一个月前我问过这个问题。然而,没有人给出答案甚至评论。我正在重复这个问题,以便有人会帮助这一次。
我有一个大的Unicode Monolingual语料库,在一个大小为1.7GB的txt文件中包含超过1亿个单词。现在我需要找到该语料库中每个单词的单词频率,这样我才能在语料库中找到20个最常用的单词和20个最不常用的单词。例如,(这个例子用瑞典语代替孟加拉语以便于理解)
语料库:
我有一个大房子我也有一个大场。
字频率:
我3
有2
一个2
大2
房子1
领域1
desicion:
最常见的:
我3
有2
最不常见的:
房子1
领域1
但是,当我尝试使用mysql数据库存储语料库中的新单词并每次增加其频率时。所以最后我可以用它们的频率得到这些词。然而,即使完成10%的语料库也需要2天时间。我已经尝试了另一种方法,通过保留一个txt文件来记录每个单词的频率。但是由于系统不能用于unicode字,它会失败。请建议我一个简单快捷的方法来计算(可以在PHP或PYTHON)。
在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亿字只是一项非常大的任务,我希望会遇到记忆和时间问题。我希望你一次运行部分数据块会有更好的运气。
您还可以研究多处理