word_tokenize関数を使用すると、引用符は別の引用符に置き換えられます。
例(ドイツ語):
import nltk
sentence = "\"Ja.\"" # sentence[0] = "
tokens = nltk.word_tokenize(sentence) #tokens[0] = ``
print(tokens[0] == sentence[0]) # Prints false.
これはバグですか、それともこの動作の背後にある理由がありますか?
はい、それは期待される出力です。 二重引用符の句読点が変更され、二重引用符の開始と終了を明示的に示します。 開始"
は2xバックティックに変換され、終了
>>> 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
しかし、その動作の理由はわかりません。 おそらく、開始/終了引用符を識別するときに明示する必要があります。
説明してくれてありがとう。
しかし、二重引用符を1つ(または2つ)の単一引用符またはバッククォートに置き換えると、この動作は発生しません。
また、トークナイザーが元のテキストの一部を切り替えるのは少し奇妙だと思います。問題が発生する可能性があり、実際には透過的ではないためです。
私はそれを覚えておく必要があると思いますが、文字列の元の要素は同じままであることが望ましいです。
@mwessいくつかのチェックの後、 "
から ``への変換は、元のペンツリーバンクワードトークナイザーのアーティファクトです。
二重引用符がある場合にのみ発生します。置換を行う正規表現ルールは
また、一重引用符については、ツリーバンクのトークナイザーSTARTING_QUOTES
正規表現は、方向性を示していないことがわかります。 これは、PennTreebankの注釈と一致していると思います。
説明がお役に立てば幸いです。
どうもありがとうございます。 それは実際に大いに役立ちます。
多くのアプリケーションでは、元のテキストを変更することはお勧めしません。 word_tokenize
、テキストの変更をオフにするフラグがあればいいのにと思います。
最も参考になるコメント
@mwessいくつかのチェックの後、
"
から ``への変換は、元のペンツリーバンクワードトークナイザーのアーティファクトです。二重引用符がある場合にのみ発生します。置換を行う正規表現ルールは
また、一重引用符については、ツリーバンクのトークナイザー
STARTING_QUOTES
正規表現は、方向性を示していないことがわかります。 これは、PennTreebankの注釈と一致していると思います。説明がお役に立てば幸いです。