如何使用WordNet查找英语单词的频率计数?

时间:2011-05-08 16:26:29

标签: python nltk wordnet

有没有办法使用Python使用WordNet或NLTK查找英语单词的使用频率?

注意:我不想要给定输入文件中单词的频率计数。我希望根据当今时间的用法来计算单词的频率计数。

8 个答案:

答案 0 :(得分:15)

在WordNet中,每个引理都有一个由该方法返回的频率计数 lemma.count(),并存储在nltk_data/corpora/wordnet/cntlist.rev文件中。

代码示例:

from nltk.corpus import wordnet
syns = wordnet.synsets('stack')
for s in syns:
    for l in s.lemmas():
        print l.name + " " + str(l.count())

结果:

stack 2
batch 0
deal 1
flock 1
good_deal 13
great_deal 10
hatful 0
heap 2
lot 13
mass 14
mess 0
...

但是,许多计数为零,源文件或文档中没有信息用于创建此数据的语料库。因此,最好选择最适合您的应用程序的语料库,并按照Christopher的建议自己创建数据。

答案 1 :(得分:8)

你可以使用棕色语料库来做这件事,虽然它已经过时了(1979年最后一次修订),所以它缺少很多当前的词语。

import nltk
from nltk.corpus import brown
from nltk.probability import *

words = FreqDist()

for sentence in brown.sents():
    for word in sentence:
        words.inc(word.lower())

print words["and"]
print words.freq("and")

然后,您可以将cpickle FreqDist关闭到文件,以便以后加快加载速度。

语料库基本上只是一个充满句子的文件,每行一个,还有很多其他语料库,所以你可能找到一个符合你目的的语料库。更多当前语料库的其他几个来源:GoogleAmerican National Corpus

您还可以通过以下方式获取前60,000个单词及其频率的最新列表 Corpus of Contemporary American English

答案 2 :(得分:2)

http://wn-similarity.sourceforge.net/查看Wordnet相似性项目的“信息内容”部分。在那里你可以找到Wordnet引理的单词频率数据库(或者说,信息内容,它是从词频中得到的),它是从几个不同的语料库中计算出来的。源代码在Perl中,但数据库是独立提供的,可以很容易地与NLTK一起使用。

答案 3 :(得分:2)

查看此网站的单词频率: http://corpus.byu.edu/coca/

有人编制了一份取自opensubtitles.org(电影剧本)的单词列表。有一个像这样的免费简单文本文件可供下载。有许多不同的语言。

you 6281002
i 5685306
the 4768490
to 3453407
a 3048287
it 2879962

http://invokeit.wordpress.com/frequency-word-lists/

答案 4 :(得分:1)

你无法真正做到这一点,因为它在很大程度上取决于上下文。不仅如此,对于频率较低的词,频率将极大地依赖于样本。

您最好的选择可能是查找给定类型的大量文本(例如从Project Gutenberg下载一百本书)并自行计算单词。

答案 5 :(得分:1)

维基词典项目有一些frequency lists基于电视剧本和Project Gutenberg,但它们的格式对于解析并不是特别好。

答案 6 :(得分:0)

您可以从 glove.6B.zip 下载词向量 https://github.com/stanfordnlp/GloVe,解压缩它们并查看文件 glove.6B.50d.txt

在那里,您会发现 400.000 个英文单词,每行一个(加上同一行中每个单词的 50 个数字),小写,从最常用的 (the) 到最不常用的排序。您可以通过以原始格式或 pandas 阅读此文件来创建单词排名。

它并不完美,但我过去使用过它。同一网站提供最多 220 万个英文单词的其他文件,大小写。

答案 7 :(得分:0)

Christopher Pickslay 解决方案的 Python 3 版本(包括将频率保存到 tempdir):

from pathlib import Path
from pickle import dump, load
from tempfile import gettempdir

from nltk.probability import FreqDist


def get_word_frequencies() -> FreqDist:
  tmp_path = Path(gettempdir()) / "word_freq.pkl"
  if tmp_path.exists():
    with tmp_path.open(mode="rb") as f:
      word_frequencies = load(f)
  else:
    from nltk import download
    download('brown', quiet=True)
    from nltk.corpus import brown
    word_frequencies = FreqDist(word.lower() for sentence in brown.sents()
                                for word in sentence)
    with tmp_path.open(mode="wb") as f:
      dump(word_frequencies, f)

  return word_frequencies

用法:

word_frequencies = get_word_frequencies()

print(word_frequencies["and"])
print(word_frequencies.freq("and"))

输出:

28853
0.02484774266443448