Nltk: Porter Stemmer devuelve una mayúscula en lugar de minúsculas

Creado en 25 feb. 2020  ·  5Comentarios  ·  Fuente: nltk/nltk

Esta salida es inesperada. In devuelve la capitalización In de la salida de PorterStemmer.

>>> from nltk.stem import PorterStemmer
>>> porter = PorterStemmer()
>>> porter.stem('In')
'In'

Más detalles en https://stackoverflow.com/q/60387288/610569

goodfirstbug stelemma

Todos 5 comentarios

Para cualquier derivación, ¿no se supone que primero debemos convertirlas en minúsculas como parte de la normalización?

Otro ejemplo de producción capitalizada usando Oh

>>> from nltk.stem import PorterStemmer
>>> porter = PorterStemmer()
>>> porter.stem('Oh')
'Oh'

Creo que es porque originalmente quiere seguir siendo la forma original de abreviaturas cuando la longitud de la palabra es menor que 2, como abreviaturas de estados.

def stem(self, word):
    stem = word.lower()

    if self.mode == self.NLTK_EXTENSIONS and word in self.pool:
        return self.pool[word]

    if self.mode != self.ORIGINAL_ALGORITHM and len(word) <= 2:
        # With this line, strings of length 1 or 2 don't go through
        # the stemming process, although no mention is made of this
        # in the published algorithm.
        return word

    stem = self._step1a(stem)
    stem = self._step1b(stem)
    stem = self._step1c(stem)
    stem = self._step2(stem)
    stem = self._step3(stem)
    stem = self._step4(stem)
    stem = self._step5a(stem)
    stem = self._step5b(stem)

    return stem

La palabra 'In' y 'Oh' no están en self.pool , y len(word)<=2 , lo que significa que no satisface la condición de la raíz aquí, por lo que sigue siendo la misma.

Si no está asignado, ¿puedo trabajar en esto? Es la primera vez que contribuyo a un proyecto.

@PhanatosZou no dude en realizar los cambios y crear una solicitud de extracción. El código principal que debe cambiarse es:

if self.mode != self.ORIGINAL_ALGORITHM and len(word) <= 2:
    # With this line, strings of length 1 or 2 don't go through
    # the stemming process, although no mention is made of this
    # in the published algorithm.
    return stem

Pero será bueno verificar todas las claves en self.pool y si no son mayúsculas, también realice cambios en esto:

if self.mode == self.NLTK_EXTENSIONS and word in self.pool:
    return self.pool[stem]

¡Suena bien! Trabajaré en eso.

¿Fue útil esta página
0 / 5 - 0 calificaciones