Я восхищаюсь вашей изобретательностью, пытаясь использовать показатель сходства Wordnet, но сомневаюсь, что этого будет достаточно для ваших целей.Вам нужно отношение hypernym , и синтаксис Wordnet удобно предоставляет его с помощью метода hypernyms()
.(У лемм также есть метод hypernyms()
, по некоторым причинам; но он всегда пуст; не позволяйте ему сбить вас с толку.)
Вот что Wordnet может сказать вам о слове «воробей»:
>>> from nltk.corpus import wordnet as wn
>>> wn.synsets("sparrow")
[Synset('sparrow.n.01'), Synset('hedge_sparrow.n.01')]
>>> sparrow = wn.synsets("sparrow")[0]
>>> sparrow.hypernyms()
[Synset('passerine.n.01')]
>>> sparrow.hypernyms()[0].hypernyms()
[Synset('bird.n.01')]
>>> sparrow.hypernyms()[0].hypernyms()[0].hypernyms()
[Synset('vertebrate.n.01')]
Как видите, Wordnet переносит вас от воробей до птица за два шага, а не за один.Это именно то, что содержит Wordnet.
В целом, вы ищете таксономию всего в вашем корпусе, то есть иерархический словарь всех интересных концепций в вашей области.Обратите внимание, что я продолжаю квалифицироваться, как в «вашем корпусе», «вашем домене».Есть много разных способов классифицировать вещи по «типу».Пшеница - это растение, но вы также можете сказать, что это зерновое зерно (подтип растения) или что это семя, пищевой продукт, ингредиент в пищевых продуктах и т. Д. (Не говоря уже о том, что «пшеница»также цвет и т. д.)
Таким образом, идеальным решением для ваших нужд является таксономия вещей, которые вас интересуют, и , подходящих для ваших целей. Если вы имеете дело с конкретным доменом, вполне может быть один;попробуйте поискать в Google или попросить обменять подходящие стеки.Но многие такие ресурсы представлены в формате RDF и требуют иных инструментов и методов, чем те, к которым вы привыкли.Один огромный бесплатный ресурс - dbpedia , извлеченный из Википедии.Вот запись о глотать , чтобы дать вам представление.