anq*_*ros 5 python nltk python-2.7 python-3.x
有没有办法找到一个单词与NLTK最常见的同义词?我想使用每个单词的最常见同义词来简化句子.
如果句子中使用的单词已经是同义词组中最常用的单词,则不应更改.
让我们说"嗨"比"你好"更常见; "亲爱的"比"有价值"更常见; 而"朋友"已经是其组同义词中最常见的词.
Input: "Hello my valued friend"
Return: "Hi my dear friend"
Run Code Online (Sandbox Code Playgroud)
同义词很棘手,但是如果您从 Wordnet 的同义词集开始,并且只想选择该集合中最常见的成员,则非常简单:只需从语料库构建您自己的频率列表,然后查找该集合中的每个成员选择最大值的同义词集。
nltk 将让您只需几行代码即可构建频率表。这是基于布朗语料库的一个:
from nltk.corpus import brown
freqs = nltk.FreqDist(w.lower() for w in brown.words())
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样查找单词的频率:
>>> print(freqs["valued"])
14
Run Code Online (Sandbox Code Playgroud)
当然,您需要做更多的工作:我会为每个主要词类分别计算单词(wordnet 提供n
, v
, a
, and r
, resp. noun
, verb
, adjective
and adverb
),并使用这些特定于 POS 的频率(在调整不同的标记集符号)以选择正确的替代品。
>>> freq2 = nltk.ConditionalFreqDist((tag, wrd.lower()) for wrd, tag in
brown.tagged_words(tagset="universal"))
>>> print(freq2["ADJ"]["valued"])
0
>>> print(freq2["ADJ"]["dear"])
45
Run Code Online (Sandbox Code Playgroud)