Я работаю с API-интерфейсом Python NLTK Wordnet. Я пытаюсь найти лучший synset, который представляет собой группу слов.NLTK Wordnet Synset для фразы слов
Если мне нужно найти лучший сингл для чего-то типа «школа & канцелярские принадлежности», я не уверен, как это сделать. До сих пор я пытался найти в synsets для отдельных слов, а затем вычисления лучший самый низкий общий hypernym как это:
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
Однако это не очень хорошо работает и это очень дорого. Есть ли способ выяснить, какой синт лучше всего представляет несколько слов вместе?
Благодарим за помощь!
Если все ваши выражения похожи на этот пример, то вам, вероятно, не стоит искать общий гипероним. «Школьные принадлежности» - это своего рода припасы, но это не какая-то школа. Скорее, вы могли бы рассмотреть синхронизацию последнего слова и устранить неоднозначность среди тех, кто использует предыдущие слова (я не уверен, как это сделать, однако). – lenz
Хммм, я вижу вашу точку зрения, но я не думаю, что все выражения похожи на этот пример. Я понимаю, что «школа и офис» - это тип поставок, но они по-прежнему считаются существительными вместо прилагательных. –
Ну, это не упростит вашу задачу, если выражения имеют разные внутренние структуры. Я предлагаю вам вручную назначить правильный синхронизм в случайном образце (например, 20), а затем посмотреть, можете ли вы увидеть шаблон. Или вручную делайте еще больше экземпляров и тренируйте дерево решений. – lenz