假设我有两个小字典
posList=['感兴趣','新','创造性','最新']
negList=["过期","直接向前","私人"]
我有一个新词,说"创新",这是我所不知道的,我正试图通过NLTK函数找出它的同义词来了解它的情感,如果同义词从我的小词典中掉了出来,那么我递归地调用NLTK函数来找出上次中同义词的同义词
启动输入可以是这样的:
从nltk.corpus导入wordnet创新=wordnet.synsets("创新")
用于synset的创新:
print synset
print synset.lemmas
它产生类似的输出
Synset('advanced.s.03')[引理(‘advanced.s.03.advanced’)、引理(’advanced.s.03.prospective’Synset('novative.s.02')引理
很明显,新词包括"高级"、"向前看"、"现代"、"创新"、"突破性"都是新词,而不在我的词典中,所以现在我应该用这些词作为开始,再次调用synsets函数,直到没有新的引理词出现为止。任何人都可以给我一个演示代码,如何从Synset中提取这些引理词,并将它们保存在一个集合strcutre中?
我认为这涉及到处理Python中的重新模块,但我对Python还很陌生。我需要指出的另一点是,我只需要得到形容词,所以在引理中只有"s"one_answers"a"符号("advanced.s.03.modern"),而不是"v"(动词)或"n"(名词)。
后来我会尝试计算一个新词与任何词典单词的相似性得分,我需要定义度量。这个问题很难解决,因为根据我的知识,形容词没有按层次排列,也没有可用的衡量标准。有人可以建议吗?
您可以获得同义词的同义词,如下所示。(请注意,该代码使用NodeBox语言学库的WordNet函数,因为它提供了对WordNet的更容易访问)。
def get_remote_synonyms(s, pos):
if pos == 'a':
syns = en.adjective.senses(s)
if syns:
allsyns = sum(syns, [])
# if there are multiple senses, take only the most frequent two
if len(syns) >= 2:
syns = syns[0] + syns[1]
else:
syns = syns[0]
else:
return []
remote = []
for syn in syns:
newsyns = en.adjective.senses(syn)
remote.extend([r for r in newsyns[0] if r not in allsyns])
return [unicode(i) for i in list(set(remote))]
据我所知,NLTK的所有语义测量功能都是基于上假名/下假名层次结构的,因此它们不能应用于形容词。此外,如果你将WordNet的结果与同义词库(如同义词库)的结果进行比较,我发现WordNet中缺少很多同义词。