Nltk: Porter Stemmer gibt einen Großbuchstaben statt Kleinbuchstaben zurück

Erstellt am 25. Feb. 2020  ·  5Kommentare  ·  Quelle: nltk/nltk

Diese Ausgabe ist unerwartet. Das In gibt die Großbuchstaben In aus der Ausgabe von PorterStemmer zurück.

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

Weitere Details unter https://stackoverflow.com/q/60387288/610569

goodfirstbug stelemma

Alle 5 Kommentare

Sollten wir für jegliches Stemming nicht zuerst als Teil der Normalisierung in Kleinbuchstaben umwandeln?

Ein weiteres Beispiel für eine großgeschriebene Ausgabe mit Oh

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

Ich denke, es liegt daran, dass es ursprünglich die ursprüngliche Form von Abkürzungen bleiben möchte, wenn die Wortlänge weniger als 2 ist, wie Abkürzungen für Staaten.

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

Das Wort 'In' und 'Oh' sind beide nicht in self.pool und len(word)<=2 , was bedeutet, dass es die Stammbedingung hier nicht erfüllt, also bleibt es gleich.

Wenn es nicht zugewiesen ist, kann ich daran arbeiten? Es ist mein erster Beitrag zu einem Projekt.

@PhanatosZou Sie können die Änderungen

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

Aber es ist gut, alle Schlüssel in self.pool zu überprüfen und wenn sie keine Großbuchstaben sind, dann nehmen Sie auch hier Änderungen vor:

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

Hört sich gut an! Ich werde daran arbeiten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen