如何从大型语料库中找到每个单词的单词频率?

时间:2019-02-13 16:07:02

标签: php python counting word corpus

我大约一个月前问过这个问题。但是,没有人给出答案甚至没有评论。我在重复这个问题,以便这次有人帮助。

我有一个大型的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)。

1 个答案:

答案 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亿个单词只是一个非常大的任务,我希望会遇到内存和时间问题。我希望您最好一次处理部分数据。

您也可以考虑进行多处理