С некоторой помощью polm23 я нашел это решение, которое использует сходство между словами и предотвращает получение неверных результатов, когда имя класса неоднозначно. Идея состоит в том, что Wor dNet можно использовать для сравнения списка words
со строкой animal
и вычисления оценки сходства. С веб-страницы nltk.org:
Wu-Palmer Similarity: Return a score denoting how similar two word senses are, based on the depth of the two senses in the taxonomy and that of their Least Common Subsumer (most specific ancestor node).
def keep_similar(words, similarity_thr):
similar_words=[]
w2 = wn.synset('animal.n.01')
[similar_words.append(word) for word in words if wn.synset(word + '.n.01').wup_similarity(w2) > similarity_thr ]
return similar_words
Например, если word_list = ['dog', 'car', 'train', 'dinosaur', 'London', 'cheese', 'radon']
, соответствующие баллы будут такими:
0.875
0.4444444444444444
0.5
0.7
0.3333333333333333
0.3076923076923077
0.3076923076923077
Это может легко использоваться для создания списка животных, задав правильное значение similarity_thr