python - pos_tag - textblob spanish
DesambiguaciĆ³n del sentido de las palabras en NLTK Python (6)
Como una respuesta práctica a la solicitud del OP, aquí hay una implementación en Python de varios métodos WSD que devuelven sentidos en forma de los sínset (s) de NLTK, github.com/alvations/pywsd
Incluye
- Algoritmos de Lesk (incluye Lesk original , Lesk adaptado y Lesk simple )
- Algoritmos de línea de base (sentido aleatorio, primer sentido, sentido más frecuente)
Puede ser utilizado como tal:
#!/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
[afuera]:
======== 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)
Soy nuevo en NLTK Python y estoy buscando una aplicación de ejemplo que pueda hacer la desambiguación del sentido de las palabras. Tengo muchos algoritmos en los resultados de búsqueda pero no una aplicación de ejemplo. Solo quiero pasar una oración y quiero saber el sentido de cada palabra refiriéndome a la biblioteca de wordnet. Gracias
He encontrado un módulo similar en PERL. http://marimba.d.umn.edu/allwords/allwords.html ¿Hay tal módulo presente en NLTK Python?
NLTK tiene apis para acceder a Wordnet. Wordnet coloca las palabras como synsets. Esto le daría alguna información sobre la palabra, sus hipernemas, hipónimos, raíz de la palabra, etc.
"Python Text Processing with NLTK 2.0 Cookbook" es un buen libro para comenzar a utilizar varias funciones de NLTK. Es fácil de leer, entender e implementar.
Además, puede consultar otros documentos (fuera del ámbito de NLTK) que hablan sobre el uso de wikipedia para la desambiguación del sentido de las palabras.
Sí, de hecho, hay un libro que escribió el equipo de NLTK que tiene varios capítulos sobre clasificación y explican explícitamente cómo usar WordNet . También puedes comprar una versión física del libro en Safari.
FYI: NLTK está escrito por académicos de programación en lenguaje natural para usar en sus cursos de programación introductoria.
Sí, es posible con el módulo wordnet en NLTK. Las medidas de similitud que se usaron en la herramienta que se mencionó en su publicación también existen en el módulo wordnet de NLTK.
Recientemente, parte del código pywsd
se ha portado a la versión de NLTK
''en el módulo wsd.py
, intente:
>>> 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''
Para un mejor rendimiento de WSD, use la biblioteca pywsd
lugar del módulo NLTK
. En general, simple_lesk()
de pywsd
funciona mejor que lesk
de lesk
. Intentaré actualizar el módulo NLTK
tanto como sea posible cuando esté libre.
Al responder al comentario de Chris Spencer , tenga en cuenta las limitaciones de los algoritmos de Lesk. Simplemente estoy dando una implementación precisa de los algoritmos. No es una bala de plata, http://en.wikipedia.org/wiki/Lesk_algorithm
También tenga en cuenta que, aunque:
lesk("My cat likes to eat mice.", "cat", "n")
No le dé la respuesta correcta, puede usar la implementación max_similarity()
de 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, si quieres un setup.py de python, solo haz una solicitud educada, la escribiré ...