假设我有两个小词典
posList = [ '有趣', '新颖', '广告素材', '状态的最先进的']
negList = [ '过时的', '直接的', '琐碎']
我有一个新词,说“创新”,这是我所不知道的,我试图通过NLTK函数找出它的同义词来弄清楚它的情绪,如果同义词掉出我的小词典,那么我递归调用NLTK函数来查找上次的同义词的同义词
开始输入可能是这样的:
来自nltk.corpus导入wordnet innov = wordnet.synsets('innovative')
创新中的synset:
print synset
print synset.lemmas
它产生这样的输出
同义词集( 'advanced.s.03') [引理('advanced.s.03.advanced'),引理('advanced.s.03.forward-looking'),引理('advanced.s.03.innovative'),引理('advanced.s.03 。现代')] 同义词集( 'innovative.s.02') [Lemma('innovative.s.02.innovative'),Lemma('innovative.s.02.innovational'),Lemma('innovative.s.02.sgroundbreaking')]
显然,新词包括'高级','前瞻性','现代','创新','开创性'是新词而不在我的词典中,所以现在我应该用这些词作为开始调用synsets再次起作用直到没有新的引理词出现。 任何人都可以给我一个演示代码如何从Synset中提取这些引理词并将它们保存在一个strcutre中?
它涉及在Python中处理re模块我想但我对Python很新。我需要解决的另一点是,我只需要获得形容词,因此引理中只有's'和'a'符号('advanced.s.03.modern'),而不是'v'(动词)或'n '(名词)。
稍后我会尝试使用任何字典单词计算新单词的相似性得分,我需要定义该度量。这个问题很难,因为根据我的知识,不是按层次方式排列的,而是没有可用的措施。有人可以提供建议吗?
答案 0 :(得分:0)
您可以按如下方式获取同义词的同义词。 (请注意,代码使用NodeBox Linguistics库的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的所有语义测量功能都是基于上位词/下位词层次结构,因此它们不能应用于形容词。此外,如果你把它的结果与像thesaurus.com.
这样的同义词库的结果进行比较,我发现WordNet中有很多同义词需要丢失。