我试图找出“城市中的事件”的不同书写方式,它们在语义上是相似的。我试图通过查找语义上类似于“事件”的单词来实现这一点,这样我就可以在其中替换它们。
为了找到这些单词,我使用了nltk的wordnet语料库,但是我得到了一些非常奇怪的结果。例如,使用'event.n.01‘的下划词,我得到了“渥太华奇迹”。
同音词和高音词似乎同样糟糕或更糟。我想知道是否有人能更好地理解结构,并能提供一个潜在的解决方案?
下面是一些示例代码:
!/usr/bin/python3
import nltk
lemma = 'event.n.01'
synset = nltk.corpus.wordnet.synset(lemma)
print("%s: %s" % (synset.name(), synset.definition()))
print("\nFinding hyponyms...")
print([s.split('.')[0] for w in synset.hyponyms() for s in w.lemma_names()])
print("\nFinding hypernym paths...")
print([s.split('.')[0] for hyprs in synset.hypernym_paths() for hypr in hyprs for s in hypr.lemma_names()])
print("\nFinding co-hyponyms...")
for hypers in synset.hypernym_paths():
for hyper in hypers:
print(hyper.name())
for hypos in hyper.hyponyms():
print("\t%s" % (', '.join(hypos.lemma_names())))
print(synset.similar())发布于 2016-09-21 17:33:29
你可以采取一种深入的学习方法。训练一个word2vec模型,得到与“事件”向量最相似的向量。
您可以在这里测试一个模型,Word2Vec演示
发布于 2016-09-21 00:22:10
“事件”的下义词是“事件”的类型。其中一个是“奇迹”,另一些是:
>>> [s for w in synset.hyponyms() for s in w.lemma_names][:7] # is 7 enough? :)
['zap', 'act', 'deed', 'human_action', 'human_activity', 'happening', 'occurrence']“事件的”超自然现象是极小的。“事件”是一种类型的术语:
>>> synset.hypernyms()
[Synset('psychological_feature.n.01')]你可以看到“事件”是它的下划词之一
>>> synset.hypernyms()[0].hyponyms()
[Synset('motivation.n.01'), Synset('cognition.n.01'), Synset('event.n.01')]这些并不是真正“相似”的术语(“渥太华的心理特征”对机器人来说似乎是一个正确的结果,但对人类来说则不然)。
也许从一个完全不同的角度去做比较好。
>>> text = nltk.Text(word.lower() for word in nltk.corpus.brown.words())
>>> text.similar('event')
time day man order state way case house one place action night point
situation work year act and area audience现在,把它们拿出来,按path_similarity进行排序:
>>> words = 'time day man order state way case house one place action night point'\
... ' situation work year act and area audience'.split()
>>>
>>> def get_symilarity(synset, word):
... return max([synset.path_similarity(synset2)
... for synset2 in nltk.corpus.wordnet.synsets(word)]+[0])
>>>
>>> sorted(words, key=lambda w: get_symilarity(synset, w), reverse=True)[:5]
['act', 'case', 'action', 'time', 'way']结果好吗?我不知道。我想这是可行的:“渥太华的行动”、“纽约的案例”、“罗马的行动”、“东京的时间”、“阿姆斯特丹的方法”……
https://stackoverflow.com/questions/39603633
复制相似问题