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