Смысл слов в NLTK Python - PullRequest
       5

Смысл слов в NLTK Python

21 голосов
/ 13 сентября 2010

Я новичок в NLTK Python и ищу пример приложения, которое может устранить неоднозначность слов У меня есть много алгоритмов в результатах поиска, но не пример приложения. Я просто хочу пропустить предложение и узнать смысл каждого слова, обращаясь к библиотеке wordnet. Спасибо

Я нашел похожий модуль в PERL. http://marimba.d.umn.edu/allwords/allwords.html Есть ли такой модуль в NLTK Python?

Ответы [ 6 ]

12 голосов
/ 23 июня 2014

Недавно часть кода pywsd была перенесена в новейшую версию 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, когда освободюсь.


В ответ на комментарий Криса Спенсера обратите внимание на ограничения алгоритмов Леска. Я просто даю точную реализацию алгоритмов. Это не серебряная пуля, 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'

@ Крис, если тебе нужен python setup.py, просто сделай вежливый запрос, я напишу ...

7 голосов
/ 21 декабря 2011

Да, на самом деле, есть книга , которую написала команда NLTK, которая имеет несколько глав по классификации, и они явно охватывают , как использовать WordNet .Вы также можете купить физическую версию книги в Safari.

К вашему сведению: NLTK написана учеными-программистами на естественном языке для использования на начальных курсах по программированию.

7 голосов
/ 17 октября 2010
3 голосов
/ 03 января 2014

В качестве практического ответа на запрос OP, вот реализация на Python нескольких методов WSD, которые возвращают значения в виде synset (ов) NLTK, https://github.com/alvations/pywsd

Включает

  • Lesk алгоритмы (включая оригинальный Lesk , адаптированный Lesk и простой Lesk )
  • Базовые алгоритмы (случайный смысл, первый смысл, наиболее частый смысл)

Может использоваться как таковой:

#!/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)
0 голосов
/ 02 января 2011

NLTK имеет apis для доступа к Wordnet. Wordnet помещает слова в виде наборов.Это даст вам некоторую информацию о слове, его гипернимках, гипонимах, корне и т. Д.

"Обработка текста на Python с NLTK 2.0 Cookbook" - хорошая книга, с которой вы можете начать знакомиться с различными функциями NLTK.Его легко читать, понимать и реализовывать.

Кроме того, вы можете посмотреть другие документы (за пределами области NLTK), в которых говорится об использовании Википедии для устранения неоднозначности смысла слова.

0 голосов
/ 18 сентября 2010

Да, это возможно с модулем wordnet в NLTK.Меры сходства, которые использовались в инструменте, упомянутом в вашем посте, существуют и в модуле wordnet NLTK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...