Python NLTK句子标记器,自定义句子起始符

Python NLTK句子标记器,自定义句子起始符,python,python-3.x,nltk,tokenize,Python,Python 3.x,Nltk,Tokenize,我试图用nltk中的PunktSentenceTokenizer将文本拆分成句子。文本包含以项目符号开头的列表,但它们不会被识别为新句子。我试图添加一些参数,但没有成功。还有别的办法吗 下面是一些示例代码: from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters params = PunktParameters() params.sent_starters = set(['•']) tokenizer =

我试图用nltk中的
PunktSentenceTokenizer
将文本拆分成句子。文本包含以项目符号开头的列表,但它们不会被识别为新句子。我试图添加一些参数,但没有成功。还有别的办法吗

下面是一些示例代码:

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters

params = PunktParameters()
params.sent_starters = set(['•'])
tokenizer = PunktSentenceTokenizer(params)

tokenizer.tokenize('• I am a sentence • I am another sentence')
['• I am a sentence • I am another sentence']

您可以将
punklanguagevars
子类化,并调整
sent\u end\u chars
属性以满足您的需要,如下所示:

from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktLanguageVars

class BulletPointLangVars(PunktLanguageVars):
    sent_end_chars = ('.', '?', '!', '•')

tokenizer = PunktSentenceTokenizer(lang_vars = BulletPointLangVars())
tokenizer.tokenize(u"• I am a sentence • I am another sentence")
这将产生以下输出:

['•', 'I am a sentence •', 'I am another sentence']
然而,这使•成为一个句子结束标记,而在您的情况下,它更像是一个句子开始标记。因此,本示例文本:

我介绍一系列句子

  • 我是第一句
  • 我是第二句
我也是

根据文本的详细信息,会产生如下结果:

>>> tokenizer.tokenize("""
Look at these sentences:

• I am sentence one
• I am sentence two

But I am one, too!
""")

['\nLook at these sentences:\n\n•', 'I am sentence one\n•', 'I am sentence two\n\nBut I am one, too!\n']
PunktSentenceTokenizer
用于句子标记化,而不是简单地使用多分隔符拆分函数的一个原因是,它能够学习如何区分用于句子的标点符号和用于其他目的的标点符号,例如在“先生”中

但是,对于•,应该不会有这样的复杂情况,因此我建议您编写一个简单的解析器来预处理要点格式,而不是滥用
PunktSentenceTokenizer
,因为它并不是真正为之设计的。 具体如何实现这一点取决于这种标记在文本中的使用方式