有没有办法使用Python使用WordNet或NLTK查找英语单词的使用频率?
注意:我不想要给定输入文件中单词的频率计数。我希望根据当今时间的用法来计算单词的频率计数。
答案 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关闭到文件,以便以后加快加载速度。
语料库基本上只是一个充满句子的文件,每行一个,还有很多其他语料库,所以你可能找到一个符合你目的的语料库。更多当前语料库的其他几个来源:Google,American 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
答案 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