给定一组单词V
,我想将V
中的同义词组合在一起。我想知道在NLTK和Wordnet中是否有任何内置函数以V
为输入并根据同义词自动聚类它们。
我已经知道如何提取每个单词的同义词,但这不是我要找的。如果我这样做,当同义词集相互交叉,或者是彼此的子集/超集时,问题会变得复杂,这需要编写一个消除冲突的函数。
举个例子,让我们考虑一下
V = ["good","constipate","bad","nice","defective","right","respectable","powerful"]
我想得到的输出是:
[('constipate'), ('nice'), ('bad', 'defective'), ('good', 'powerful', 'respectable', 'right')]
现在,根据群集的大小/数量,某些集合可能会分成几个集合,或者组合在一起。在这里,我只是关心V
中的字词以及V
中的同义词。
答案 0 :(得分:0)
是的,有一种方法可以使用nltk
和wordnet
。以下是一个例子。我使用内置的sysnets并寻找'book'的同义词,
import nltk
from nltk.corpus import wordnet
synonyms = []
for syn in wordnet.synsets('book'):
for lemma in syn.lemmas():
synonyms.append(lemma.name())
“book”的结果是
print(synonyms)
>>['book', 'book', 'volume', 'record', 'record_book', 'book', 'script', 'book', 'playscript', 'ledger', 'leger', 'account_book', 'book_of_account', 'book', 'book', 'book', 'rule_book', 'Koran', 'Quran', "al-Qur'an", 'Book', 'Bible', 'Christian_Bible', ..]
同义词的长度,
len(synonyms)
>>38
注意:有些同义词是动词形式,许多同义词只是“书”的不同用法。相反,如果我们采用同义词集,则会有更少的唯一字,如下面的代码所示:
len(set(synonyms))
>>25
使用set
操作后,
{'record', 'Quran', 'Holy_Scripture', 'Koran', 'Good_Book', 'playscript', 'book', 'Word_of_God', 'hold', 'Holy_Writ', 'script', 'leger', 'book_of_account', 'Scripture', 'ledger', 'reserve', 'volume', 'record_book', "al-Qur'an", 'Christian_Bible', 'Word', 'rule_book', 'Bible', 'Book', 'account_book'}