我想计算文本文件中所有单词的频率.
>>> countInFile('test.txt')
Run Code Online (Sandbox Code Playgroud)
{'aaa':1, 'bbb': 2, 'ccc':1}如果目标文本文件如下,则应返回:
# test.txt
aaa bbb ccc
bbb
Run Code Online (Sandbox Code Playgroud)
我在一些帖子之后用纯python实现了它.但是,由于文件大小(> 1GB),我发现纯python方式不足.
我认为借用sklearn的力量是一个候选人.
如果你让CountVectorizer计算每一行的频率,我猜你会通过总结每一列来获得字频率.但是,这听起来有点间接的方式.
使用python计算文件中单词的最有效和直接的方法是什么?
我的(非常慢)代码在这里:
from collections import Counter
def get_term_frequency_in_file(source_file_path):
wordcount = {}
with open(source_file_path) as f:
for line in f:
line = line.lower().translate(None, string.punctuation)
this_wordcount = Counter(line.split())
wordcount = add_merge_two_dict(wordcount, this_wordcount)
return wordcount
def add_merge_two_dict(x, y):
return { k: x.get(k, 0) + y.get(k, 0) for k in set(x) | set(y) }
Run Code Online (Sandbox Code Playgroud)