Nltk: O stemmer de Porter retorna maiúscula em vez de minúsculas

Criado em 25 fev. 2020  ·  5Comentários  ·  Fonte: nltk/nltk

Esta saída é inesperada. O In retorna a capitalização In da saída de PorterStemmer.

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

Mais detalhes em https://stackoverflow.com/q/60387288/610569

goodfirstbug stelemma

Todos 5 comentários

Para qualquer lematização, não devemos primeiro convertê-los em minúsculas como parte da normalização?

Outro exemplo de saída em letras maiúsculas usando Oh

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

Acho que é porque originalmente ele deseja manter a forma original de abreviações quando a palavra tem comprimento menor que 2, como abreviações 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

As palavras 'In' e 'Oh' não estão em self.pool e len(word)<=2 , o que significa que ela não satisfaz a condição de radical aqui, portanto, permanece a mesma.

Se não estiver atribuído, posso trabalhar nisso? É minha primeira vez contribuindo para um projeto.

@PhanatosZou sinta-se à vontade para fazer as alterações e criar uma solicitação pull. O código principal que precisa ser alterado é:

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

Mas será bom verificar todas as chaves em self.pool e, se não forem maiúsculas, faça alterações também:

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

Soa bem! Vou trabalhar nisso.

Esta página foi útil?
0 / 5 - 0 avaliações