0

与えられた文字列:

c = 'A problem. She said: "I don\'t know about it."'

そしてそれをトークン化する試み:

>>> for sindex,sentence in enumerate(sent_tokenize(c)):
...     print str(sindex)+": "+sentence
...
0: A problem.
1: She said: "I don't know about it.
2: "
>>>

NLTK がセンテンス 2 の最後の引用符を独自のセンテンス 3 に入れるのはなぜですか? この動作を修正する方法はありますか?

4

2 に答える 2

2

デフォルトの の代わりに必要なのは、センテンス トークナイザsent_tokenizeで事前にトレーニングされ、事前にコード化されている再配置機能です。punkt

>>> import nltk
>>> st2 = nltk.data.load('tokenizers/punkt/english.pickle')
>>> sent = 'A problem. She said: "I don\'t know about it."'
>>> st2.tokenize(sent, realign_boundaries=True)
['A problem.', 'She said: "I don\'t know about it."']

http://nltk.googlecode.com/svn/trunk/doc/howto/tokenize.html6 Punkt Tokenizerのセクションを参照してください

于 2013-09-22T16:52:28.403 に答える
1

デフォルトのセンテンス トークナイザはPunktSentenceTokenizer、ピリオドを検出するたびに新しいセンテンスを検出します。たとえば、ピリオドは USA のような頭字語に属します。

nltk のドキュメントには、異なるコーパスを使用して新しいセンテンス スプリッターをトレーニングする方法の例があります。ここで見つけることができます

したがって、デフォルトの文のトークナイザーでは問題を解決できないと思います。新しいものをトレーニングして試してみる必要があります。

于 2013-09-22T10:07:07.170 に答える