找到标记化句子的确切位置

时间:2013-02-08 15:49:57

标签: python tokenize nltk

我想提取文字句子,但我需要确切的结果位置。 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删除了一些书写字符(例如换行符,额外空格和......)。我不想使用简单的正则表达式模式来分割句子,我知道在这种情况下这个问题是微不足道的。

感谢。

2 个答案:

答案 0 :(得分:6)

您可以直接使用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)

答案 1 :(得分: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