Значение смысла слова в NLTK Python
Я новичок в NLTK Python, и я ищу несколько примеров приложений, которые могут делать смысловое значение смысла слова. У меня есть много алгоритмов в результатах поиска, но не пример приложения. Я просто хочу передать предложение и хочу узнать смысл каждого слова, обратившись к библиотеке wordnet.
Благодаря
Я нашел аналогичный модуль в PERL. http://marimba.d.umn.edu/allwords/allwords.html
Есть ли такой модуль в NLTK Python?
Ответы
Ответ 1
В последнее время часть кода pywsd
была перенесена в версию NLTK
'в выпуске NLTK
' в модуле wsd.py
, попробуйте:
>>> from nltk.wsd import lesk
>>> sent = 'I went to the bank to deposit my money'
>>> ambiguous = 'bank'
>>> lesk(sent, ambiguous)
Synset('bank.v.04')
>>> lesk(sent, ambiguous).definition()
u'act as the banker in a game or in gambling'
Для повышения производительности WSD используйте библиотеку pywsd
вместо модуля NLTK
. Как правило, simple_lesk()
из pywsd
лучше, чем lesk
из NLTK
. Я попытаюсь обновить модуль NLTK
насколько это возможно, когда я свободен.
В ответ на комментарий Криса Спенсера обратите внимание на ограничения алгоритмов Lesk. Я просто даю точную реализацию алгоритмов. Это не серебряная пуля, http://en.wikipedia.org/wiki/Lesk_algorithm
Также обратите внимание, что, хотя:
lesk("My cat likes to eat mice.", "cat", "n")
не дает вам правильного ответа, вы можете использовать pywsd
реализацию max_similarity()
:
>>> from pywsd.similarity import max_similiarity
>>> max_similarity('my cat likes to eat mice', 'cat', 'wup', pos='n').definition
'feline mammal usually having thick soft fur and no ability to roar: domestic cats; wildcats'
>>> max_similarity('my cat likes to eat mice', 'cat', 'lin', pos='n').definition
'feline mammal usually having thick soft fur and no ability to roar: domestic cats; wildcats'
@Chris, если вы хотите python setup.py, просто сделайте вежливый запрос, я напишу его...
Ответ 2
Обратитесь http://jaganadhg.freeflux.net/blog/archive/2010/10/16/wordnet-sense-similarity-with-nltk-some-basics.html
Ответ 3
Да, на самом деле существует книга, которую написала команда NLTK, которая имеет несколько глав по классификации, и они явно охватывают как использовать WordNet. Вы также можете купить физическую версию книги из Safari.
FYI: NLTK написана учеными естественного программирования для использования в их вводных курсах программирования.
Ответ 4
Как практический ответ на запрос OP, здесь реализована реализация нескольких методов WSD с помощью python, которая возвращает чувства в виде синтаксиса NLTK, https://github.com/alvations/pywsd
Он включает
- Лесковые алгоритмы (включая оригинальный лес, адаптированный лес и простой лес)
- Базовые алгоритмы (случайный смысл, первый смысл, наиболее частое чувство)
Его можно использовать как таковой:
#!/usr/bin/env python -*- coding: utf-8 -*-
bank_sents = ['I went to the bank to deposit my money',
'The river bank was full of dead fishes']
plant_sents = ['The workers at the industrial plant were overworked',
'The plant was no longer bearing flowers']
print "======== TESTING simple_lesk ===========\n"
from lesk import simple_lesk
print "#TESTING simple_lesk() ..."
print "Context:", bank_sents[0]
answer = simple_lesk(bank_sents[0],'bank')
print "Sense:", answer
print "Definition:",answer.definition
print
print "#TESTING simple_lesk() with POS ..."
print "Context:", bank_sents[1]
answer = simple_lesk(bank_sents[1],'bank','n')
print "Sense:", answer
print "Definition:",answer.definition
print
print "#TESTING simple_lesk() with POS and stems ..."
print "Context:", plant_sents[0]
answer = simple_lesk(plant_sents[0],'plant','n', True)
print "Sense:", answer
print "Definition:",answer.definition
print
print "======== TESTING baseline ===========\n"
from baseline import random_sense, first_sense
from baseline import max_lemma_count as most_frequent_sense
print "#TESTING random_sense() ..."
print "Context:", bank_sents[0]
answer = random_sense('bank')
print "Sense:", answer
print "Definition:",answer.definition
print
print "#TESTING first_sense() ..."
print "Context:", bank_sents[0]
answer = first_sense('bank')
print "Sense:", answer
print "Definition:",answer.definition
print
print "#TESTING most_frequent_sense() ..."
print "Context:", bank_sents[0]
answer = most_frequent_sense('bank')
print "Sense:", answer
print "Definition:",answer.definition
print
[выход]:
======== TESTING simple_lesk ===========
#TESTING simple_lesk() ...
Context: I went to the bank to deposit my money
Sense: Synset('depository_financial_institution.n.01')
Definition: a financial institution that accepts deposits and channels the money into lending activities
#TESTING simple_lesk() with POS ...
Context: The river bank was full of dead fishes
Sense: Synset('bank.n.01')
Definition: sloping land (especially the slope beside a body of water)
#TESTING simple_lesk() with POS and stems ...
Context: The workers at the industrial plant were overworked
Sense: Synset('plant.n.01')
Definition: buildings for carrying on industrial labor
======== TESTING baseline ===========
#TESTING random_sense() ...
Context: I went to the bank to deposit my money
Sense: Synset('deposit.v.02')
Definition: put into a bank account
#TESTING first_sense() ...
Context: I went to the bank to deposit my money
Sense: Synset('bank.n.01')
Definition: sloping land (especially the slope beside a body of water)
#TESTING most_frequent_sense() ...
Context: I went to the bank to deposit my money
Sense: Synset('bank.n.01')
Definition: sloping land (especially the slope beside a body of water)
Ответ 5
У NLTK есть apis для доступа к Wordnet. Wordnet помещает слова как synsets. Это даст вам некоторую информацию о слове, его гипернимах, гипонимах, корневом слове и т.д.
"Python Text Processing с NLTK 2.0 Cookbook" - это хорошая книга, которая поможет вам начать работу с различными функциями NLTK. Легко читать, понимать и реализовывать.
Кроме того, вы можете посмотреть другие документы (за пределами области NLTK), в которых говорится об использовании wikipedia для смыслового смысла смысла.
Ответ 6
Да, это возможно с помощью модуля wordnet в NLTK.
Метки схожести, которые используются в инструменте, упомянутом в вашем сообщении, также существуют в модуле wordnet модуля NLTK.