Nltk: word_tokenizeは文字を置き換えます

作成日 2017年02月15日  ·  5コメント  ·  ソース: nltk/nltk

word_tokenize関数を使用すると、引用符は別の引用符に置き換えられます。

例(ドイツ語):

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

これはバグですか、それともこの動作の背後にある理由がありますか?

最も参考になるコメント

@mwessいくつかのチェックの後、 "から ``への変換は、元のペンツリーバンクワードトークナイザーのアーティファクトです。

二重引用符がある場合にのみ発生します。置換を行う正規表現ルールは

また、一重引用符については、ツリーバンクのトークナイザーSTARTING_QUOTES正規表現は、方向性を示していないことがわかります。 これは、PennTreebankの注釈と一致していると思います。

説明がお役に立てば幸いです。

全てのコメント5件

はい、それは期待される出力です。 二重引用符の句読点が変更され、二重引用符の開始と終了を明示的に示します。 開始"は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 、テキストの変更をオフにするフラグがあればいいのにと思います。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

ndvbd picture ndvbd  ·  4コメント

chaseireland picture chaseireland  ·  3コメント

libingnan54321 picture libingnan54321  ·  3コメント

alvations picture alvations  ·  4コメント

alvations picture alvations  ·  4コメント