【发布时间】:2015-08-16 19:40:24
【问题描述】:
我正在使用 Python NLTK Wordnet API。我正在尝试找到代表一组单词的最佳同义词集。
如果我需要为“学校和办公用品”之类的内容找到最佳同义词集,我不知道该怎么做。到目前为止,我已经尝试找到单个单词的同义词集,然后计算出最好的最低通用上位词,如下所示:
def find_best_synset(category_name):
text = word_tokenize(category_name)
tags = pos_tag(text)
node_synsets = []
for word, tag in tags:
pos = get_wordnet_pos(tag)
if not pos:
continue
node_synsets.append(wordnet.synsets(word, pos=pos))
max_score = 0
max_synset = None
max_combination = None
for combination in itertools.product(*node_synsets):
for test in itertools.combinations(combination, 2):
score = wordnet.path_similarity(test[0], test[1])
if score > max_score:
max_score = score
max_combination = test
max_synset = test[0].lowest_common_hypernyms(test[1])
return max_synset
但是,这不是很好,而且成本很高。有什么方法可以确定哪个同义词集最能代表多个单词?
感谢您的帮助!
【问题讨论】:
-
如果你所有的表达方式都像那个例子,那么你可能不应该寻找一个共同的上位词。 “学习用品”是一种用品,但不是某种学校。相反,您可以考虑最后一个词的同义词,并在使用前面的词的词组之间消除歧义(不过,我不知道该怎么做)。
-
嗯,我明白你的意思,但我不认为所有的表达方式都像那个例子。我意识到“学校和办公室”是用品的类型,但它们仍然被认为是名词而不是形容词。
-
好吧,如果表达式具有不同的内部结构,它不会简化您的任务。我建议您在随机样本中手动分配正确的同义词(例如从 20 个开始),然后查看是否可以看到模式。或者手动执行更多实例并训练决策树。