4

テキストの文を抽出したいのですが、結果の正確な位置が必要です。NLTKの現在の実装ではtokenize.sent_tokenize、抽出された文の位置が返されないため、次のようなことを試しました。

offset, length = 0, 0
for sentence in tokenize.sent_tokenize(text):
    length = len(sentence)
    yield sentence, offset, length
    offset += length

sent_tokenizeただし、結果の文の境界の外にある一部の書き込み文字 (改行、余分なスペースなど) が削除されるため、文の正確な位置は返されません。文を分割するために単純な正規表現パターンを使用したくありません。その場合、この問題は些細なことです。

ありがとう。

4

2 に答える 2

10

直接使用できますPunktSentenceTokenizer(実装に使用されますsent_tokenize()):

from nltk.tokenize.punkt import PunktSentenceTokenizer

text = 'Rabbit say to itself "Oh dear! Oh dear! I shall be too late!"'
for start, end in PunktSentenceTokenizer().span_tokenize(text):
    length = end - start
    print buffer(text, start, length), start, length

各文のコピーを気にしない場合は、text[start:end]代わりに使用できます。buffer(text, start, end - start)

于 2013-02-10T17:29:04.353 に答える
0

それはそれほど難しいことではありませんでした、ここに簡単な解決策があります:

offset, length = 0, 0
for sentence in tokenize.sent_tokenize(text):
    # fix ignored characters
    while text[offset] != sentence[0]:
        offset += 1

    length = len(sentence)
    yield sentence, offset, length
    offset += length
于 2013-02-10T16:56:02.650 に答える