Nltk: word_tokenize ersetzt Zeichen

Erstellt am 15. Feb. 2017  ·  5Kommentare  ·  Quelle: nltk/nltk

Bei Verwendung der Funktion word_tokenize werden die Anführungszeichen durch andere Anführungszeichen ersetzt.

Beispiel (deutsch):

import nltk
sentence = "\"Ja.\"" # sentence[0] = "
tokens = nltk.word_tokenize(sentence) #tokens[0] = ``
print(tokens[0] == sentence[0]) # Prints false.

Ist das ein Bug oder gibt es einen Grund für dieses Verhalten?

Hilfreichster Kommentar

@mwess Nach einiger Überprüfung ist die Konvertierung von " in `` ein Artefakt des ursprünglichen Penn Treebank-Wort-Tokenizers .

Es passiert nur, wenn es doppelte Anführungszeichen gibt. Die Regex-Regeln, die die Ersetzungen vornehmen, sind https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

Und was die einfachen Anführungszeichen betrifft, so sehen wir, dass der Treebank-Tokenizer STARTING_QUOTES Regexes nicht auf Direktionalität hinweist. Ich denke, dies steht im Einklang mit den Anmerkungen von Penn Treebank.

Ich hoffe, die Erläuterungen helfen.

Alle 5 Kommentare

Ja, das ist die erwartete Ausgabe. Die Satzzeichen in doppelten Anführungszeichen ändern sich, um explizit öffnende und schließende doppelte Anführungszeichen anzuzeigen. Die öffnenden " werden in 2x Backticks umgewandelt und die schließenden in 2x einfache Anführungszeichen.

>>> from nltk import word_tokenize
>>> sent = '"this is a sentence inside double quotes."'
>>> word_tokenize(sent)
['``', 'this', 'is', 'a', 'sentence', 'inside', 'double', 'quotes', '.', "''"]
>>> word_tokenize(sent)[0]
'``'

>>> len(word_tokenize(sent)[0])
2
>>> word_tokenize(sent)[0] == '`'*2
True

>>> len(word_tokenize(sent)[-1])
2
>>> word_tokenize(sent)[-1] == "'" * 2
True

Ich bin mir jedoch nicht sicher, was der Grund für das Verhalten ist. Möglicherweise muss es bei der Identifizierung von Eröffnungs-/Schlusszitaten explizit sein.

Danke für die Erklärung.
Aber wenn ich die doppelten Anführungszeichen durch ein (oder zwei) einfache Anführungszeichen oder Backticks ersetze, tritt dieses Verhalten nicht auf.
Und ich finde es etwas seltsam, dass der Tokenizer Teile des Originaltextes ausschaltet, da dies zu Problemen führen könnte und nicht wirklich transparent ist.

Ich denke, ich muss es im Hinterkopf behalten, aber ich würde es vorziehen, wenn die ursprünglichen Elemente der Saite gleich bleiben.

@mwess Nach einiger Überprüfung ist die Konvertierung von " in `` ein Artefakt des ursprünglichen Penn Treebank-Wort-Tokenizers .

Es passiert nur, wenn es doppelte Anführungszeichen gibt. Die Regex-Regeln, die die Ersetzungen vornehmen, sind https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

Und was die einfachen Anführungszeichen betrifft, so sehen wir, dass der Treebank-Tokenizer STARTING_QUOTES Regexes nicht auf Direktionalität hinweist. Ich denke, dies steht im Einklang mit den Anmerkungen von Penn Treebank.

Ich hoffe, die Erläuterungen helfen.

Vielen Dank. Es hilft tatsächlich sehr.

Das Ändern des Originaltexts wird in vielen Anwendungen nicht empfohlen. Ich wünschte, das word_tokenize hätte ein Flag, um das Ändern des Textes zu deaktivieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen