用nltk分割句子,同时保留引号

时间:2013-11-12 15:43:50

标签: python regex python-2.7 nltk

我正在使用nltk将文本拆分为句子单元。但是,我需要将包含引号的句子作为单个单元提取。现在,每个句子,即使它在一个引用中,也会被提取为一个单独的部分。

这是我尝试将其作为单个单元提取的一个示例:

"This is a sentence. This is also a sentence," said the cat.

现在我有了这段代码:

import nltk.data
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')

text = 'This is a sentence. This is also a sentence," said the cat.'

print '\n-----\n'.join(tokenizer.tokenize(text, realign_boundaries=True))

这很好用,但即使引号本身包含多个句子,我也希望用引号保留句子。

上面的代码产生:

This is a sentence.
-----
This is also a sentence," said the cat.

我试图将整个文本提取为一个单元:

"This is a sentence. This is also a sentence," said the cat.

有没有一种简单的方法可以使用nltk执行此操作,还是应该使用正则表达式?我对nltk入门是多么容易感到印象深刻,但现在陷入困境。

2 个答案:

答案 0 :(得分:2)

如果我正确理解了问题,那么这个正则表达式应该这样做:

import re

text = '"This is a sentence. This is also a sentence," said the cat.'

for grp in re.findall(r'"[^"]*\."|("[^"]*")*([^".]*\.)', text):
    print "".join(grp)

它是两种模式的组合或组合在一起。第一个发现普通的引用句子。第二个发现普通句子或句子,引用后跟一个句号。如果你有更复杂的句子,可能需要进一步调整。

答案 1 :(得分:0)

只需将您的print语句更改为:

print ' '.join(tokenizer.tokenize(text, realign_boundaries=True))

这将使用空格而不是\n-----\n加入句子。