我大约一个月前问过这个问题。但是,没有人给出答案甚至没有评论。我在重复这个问题,以便这次有人帮助。
我有一个大型的Unicode单语语料库,包含超过1亿个单词,大小为1.7GB。现在,我需要找到该语料库中每个单词的词频,以便可以在该语料库中找到20个最常见的单词和20个最不常见的单词。例如(为便于理解,该示例以瑞典语而不是孟加拉语给出)
Corpus:
jag hart ett stort husocksåjag har ett stortfältjag。
词频:
jag 3
har 2
ett 2
stort 2
人类1
失败1
目标:
最频繁:
jag 3
har 2
最不频繁:
人类1
失败1
但,当我尝试使用mysql数据库存储语料库中的新单词并将其频率每次提高1时。这样最后我就可以知道它们的出现频率了。但是,花了2天才能完成10%的语料库。我尝试了另一种方法,通过保留txt文件来记录每个单词的出现频率。但是,由于系统不适用于unicode字,因此失败。请给我建议一种简便快捷的方法(可以使用PHP或PYTHON)。
答案 0 :(得分:0)
在python中,最简单的方法是使用collections.Counter创建一个计数器对象。我用一个(非常有限的)200,000个单词语料库对其进行了超时
from collections import Counter
x='jag har ett stort hus också jag har ett stort fält jag cat rat bat cat bar baz cat jag '
x=x*10000
%timeit c=Counter(x.split())
49.4 ms ± 7.51 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
c.most_common(5)
[('jag', 40000),
('cat', 30000),
('har', 20000),
('ett', 20000),
('stort', 20000)]
话虽这么说,> 1亿个单词只是一个非常大的任务,我希望会遇到内存和时间问题。我希望您最好一次处理部分数据。
您也可以考虑进行多处理