使用哈希表将单词存储为键,将计数存储为值
哈希表(称为关联数组或其他语言中的 dict)仅允许唯一键
这个 perl one liner 演示了这个概念
perl -n -e '$a{$_}++ for(split(/\s+/)); END { use Data::Dumper; print Dumper(\%a);}' corpus.txt
这是 python 中的相同类型的东西
counter = dict()
for line in open("corpus.txt").readlines():
for word in line.split(" "):
v = counter.get(word, 0)
counter[word] = v + 1
for word in sorted(counter.keys()):
print "%d \t %s" % (counter[word], word)
您刚刚编辑了您的问题,说它是在 java 中。在java中,你可以使用HashMap类型,这里是一个示例声明
HashMap<String, Integer> lookup = new HashMap<Character, Integer>();
至于您问题的第二部分,正则表达式可能会起作用-尽管删除您所描述的某些字符实际上很难严格执行。
像这样的正则表达式替换
s/[^\w\s]//g
方法
- s 表示替换,s/1/2 表示用 1 替换 2
- [开始一个字符类
- ^ 在字符类中匹配与该类相反的内容
- \w 字母
- \s 空格
- ] 字符类结束
- 最后的 g 是一个“全局”标志,重复应用于输入
所以匹配任何不是空格或字母的东西并用任何东西替换,即删除它
在上面的 perl 中使用
perl -n -e 's/[^\w\s]//g; $a{$_}++ for(split(/\s+/)); END { use Data::Dumper; print Dumper(\%a);}' corpus.txt
python、java等语言也有正则表达式系统