2016-01-11 4 views
5

Ich verwende die nltk, um Sätze in Wörter aufzuteilen. z.B.Verhindern der Spaltung bei Apostrophien beim Tokenisieren von Wörtern mit nltk

nltk.word_tokenize("The code didn't work!") 
-> ['The', 'code', 'did', "n't", 'work', '!'] 

Die Tokenisieren funktioniert gut an Wortgrenzen spliting bis [d Aufspalten der Interpunktion von Wörtern], aber manchmal überspaltet, und Modifizierer am Ende des Wortes werden als separate Teile behandelt. Beispiel: didn't wird in die Teile did und n't aufgeteilt und i've wird in I und 've aufgeteilt. Offensichtlich ist dies so, weil solche Wörter in dem ursprünglichen Korpus, das nltk verwendet, zweigeteilt sind und in einigen Fällen wünschenswert sein können.

Gibt es eingebaute Überschreitungen dieses Verhaltens? Möglicherweise in ähnlicher Weise wie nltk'sMWETokenizer in der Lage ist, mehrere Wörter zu Phrasen zusammenzufassen, aber in diesem Fall nur Wortbestandteile zu Wörtern aggregieren.

Gibt es alternativ einen anderen Tokenizer, der Wortteile nicht aufteilt?

Antwort

7

Dies ist eigentlich working as expected:

, dass die richtige/erwartete Ausgabe ist. Für Wort-Tokenization werden Kontraktionen als zwei Wörter betrachtet, weil sie sinngemäß sind.

Verschiedene nltk Tokenizer behandeln englische Sprache Kontraktionen anders. Zum Beispiel habe ich festgestellt, dass TweetTokenizer nicht die Kontraktion in zwei Teile spaltet:

>>> from nltk.tokenize import TweetTokenizer 
>>> tknzr = TweetTokenizer() 
>>> tknzr.tokenize("The code didn't work!") 
[u'The', u'code', u"didn't", u'work', u'!'] 

Bitte beachten Sie weitere Informationen und Abhilfen bei:

Verwandte Themen