2014-01-18 3 views
1

Я хотел бы написать простую функцию, чтобы увидеть, существует ли это слово «существует» в WordNet через NLTK.Почему NLTK WordNet не находит простых слов?

def is_known(word): 
    """return True if this word "exists" in WordNet 
     (or at least in nltk.corpus.stopwords).""" 
    if word.lower() in nltk.corpus.stopwords.words('english'): 
     return True 
    synset = wn.synsets(word) 
    if len(synset) == 0: 
     return False 
    else: 
     return True 

Почему слова вроде could, since, without, although return False? Разве они не появляются в WordNet? Есть ли лучший способ узнать, существует ли слово в WN (с использованием NLTK)?

Моя первая попытка состояла в том, чтобы устранить «стоп-слова», такие как to, if, when, then, I, you, но есть еще очень распространенные слова (например, could), которых я не могу найти.

+0

Почему вы возвращаетесь Правда, когда это стоп-слов? – alvas

+1

Это было всего лишь попытка проигнорировать эти слова. Но я заметил, что не все распространенные слова - это временные слова. – Sadik

ответ

6

WordNet не содержит эти слова или слова, подобные им. Для объяснения смотрите следующее из WordNet docs:

Q. Why is WordNet missing: of, an, the, and, about, above, because, etc. 
A. WordNet only contains "open-class words": nouns, verbs, adjectives, and adverbs. Thus, excluded words include determiners, prepositions, pronouns, conjunctions, and particles. 

Вы также не найдете эти виды слов в онлайн-версии WordNet.

+0

thanx для ссылки – Sadik

0

Вы можете попытаться извлечь все леммы в WordNet, а затем проверить по этому списку:

from nltk.corpus import wordnet as wn 
from itertools import chain 
all_lemmas = set(chain(*[i.lemma_names for i in wn.all_synsets()])) 

def in_wordnet(word): 
    return True if word in all_lemmas else False 

print in_wordnet('can') 
print in_wordnet('could') 

[выход]:

True 
False 

Обратите внимание, что WordNet содержит леммы, а не слова , Также обратите внимание, что слово/лемма может быть многозначной и не является действительно содержащим слово, например.

I can foo bar. против The water can is heavy

+0

in_wordnet дает мне те же результаты, что и is_known, но очень медленный (не сама функция, конечно) – Sadik

Смежные вопросы