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 回答