with tutorial framework español djangoproject desde con cero applications python nltk stemming

python - framework - tutorial django



¿Cuál es el mejor método de derivación en Python? (4)

¿Has intentado derivar 1.0 here ?

Intenté todos los métodos de nltk para derivar pero me da resultados extraños con algunas palabras.

Ejemplos

A menudo corta el final de las palabras cuando no debería hacerlo:

  • poodle => poodl
  • articulo articulo

o no proviene muy bien:

  • Fácil y fácil no se encuentran en la misma palabra.
  • Hojas, crecen, bastante no son talladas.

¿Conoces otras librerías derivadas de python o un buen diccionario?

Gracias


En mi proyecto de chatbot he usado PorterStemmer. Sin embargo, LancasterStemmer también cumple su función. El objetivo final es detener la palabra a su raíz para que podamos buscar y comparar con las entradas de palabras de búsqueda.

Por ejemplo: desde nltk.stem importar PorterStemmer ps = PorterStemmer ()

def SrchpattrnStmmed(self): KeyWords =[] SrchpattrnTkn = word_tokenize(self.input) for token in SrchpattrnTkn: if token not in stop_words: KeyWords.append(ps.stem(token)) continue #print(KeyWords) return KeyWords

Espero que esto ayude ..


Los resultados que está obteniendo son (generalmente) esperados para un stemmer en inglés. Usted dice que intentó "todos los métodos de nltk" pero cuando intento sus ejemplos, no parece ser el caso.

Aquí hay algunos ejemplos usando el PorterStemmer

import nltk ps = nltk.stemmer.PorterStemmer() ps.stem(''grows'') ''grow'' ps.stem(''leaves'') ''leav'' ps.stem(''fairly'') ''fairli''

Los resultados son ''grow'', ''leav'' y ''fairli'' que, incluso si son lo que querías, son versiones derivadas de la palabra original.

Si cambiamos a la stemball Snowball, tenemos que proporcionar el idioma como parámetro.

import nltk sno = nltk.stem.SnowballStemmer(''english'') sno.stem(''grows'') ''grow'' sno.stem(''leaves'') ''leav'' sno.stem(''fairly'') ''fair''

Los resultados son como antes para ''crece'' y ''se va'' pero ''justo'' se deriva de ''justo''

Por lo tanto, en ambos casos (y hay más de dos stemmers disponibles en nltk), las palabras que usted dice que no son derivadas, de hecho, sí lo son. LancasterStemmer devolverá ''fácil'' cuando se le proporcione ''fácil'' o ''fácil'' como entrada.

Tal vez realmente quería un lematizante? Eso devolvería "artículo" y "caniche" sin cambios.

import nltk lemma = nltk..wordnet.WordNetLemmatizer() lemma.lemmatize(''article'') ''article'' lemma..lemmatize(''leaves'') ''leaf''


Todos estos analizadores analizados aquí son generadores algorítmicos, por lo que siempre pueden producir resultados inesperados, como

In [3]: from nltk.stem.porter import * In [4]: stemmer = PorterStemmer() In [5]: stemmer.stem(''identified'') Out[5]: u''identifi'' In [6]: stemmer.stem(''nonsensical'') Out[6]: u''nonsens''

Para obtener correctamente las palabras raíz, se necesita un diccionario basado en stemmer como Hunspell Stemmer. Aquí hay una implementación de Python en el siguiente link . Código de ejemplo está aquí

>>> import hunspell >>> hobj = hunspell.HunSpell(''/usr/share/myspell/en_US.dic'', ''/usr/share/myspell/en_US.aff'') >>> hobj.spell(''spookie'') False >>> hobj.suggest(''spookie'') [''spookier'', ''spookiness'', ''spooky'', ''spook'', ''spoonbill''] >>> hobj.spell(''spooky'') True >>> hobj.analyze(''linked'') ['' st:link fl:D''] >>> hobj.stem(''linked'') [''link'']