Nltk: Стеммер Портера возвращает заглавную, а не строчную

Созданный на 25 февр. 2020  ·  5Комментарии  ·  Источник: nltk/nltk

Это неожиданный результат. In возвращает заглавные буквы In из вывода PorterStemmer.

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

Подробнее на https://stackoverflow.com/q/60387288/610569

goodfirstbug stelemma

Все 5 Комментарий

Разве мы не должны сначала преобразовать их в нижний регистр как часть нормализации для любого стемминга?

Другой пример вывода с Oh буквы с использованием

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

Я думаю, это потому, что изначально он хотел сохранить первоначальную форму сокращений, когда длина слова меньше 2, например, сокращения для состояний.

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

Слова «In» и «Oh» отсутствуют в self.pool и len(word)<=2 , что означает, что оно не удовлетворяет здесь основному условию, поэтому остается неизменным.

Если он не назначен, могу ли я поработать над этим? Я впервые участвую в проекте.

@PhanatosZou не стесняйтесь вносить изменения и создавать запросы на вытягивание. Основной код, который необходимо изменить:

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

Но было бы хорошо проверить все ключи в self.pool и если они не заглавные, то тоже внесите в это изменения:

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

Звучит отлично! Я буду работать над этим.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

stevenbird picture stevenbird  ·  4Комментарии

BLKSerene picture BLKSerene  ·  4Комментарии

talbaumel picture talbaumel  ·  4Комментарии

alvations picture alvations  ·  4Комментарии

mwess picture mwess  ·  5Комментарии