我已经开始学习 nltk
并关注 this教程。首先,我们使用 sent_tokenize
来使用内置分词器,然后我们使用 PunktSentenceTokenizer
。本教程提到 PunktSentenceTokenizer
能够进行无监督机器学习。
那么这是否意味着它比默认的更好?或者各种tokenizers之间比较的标准是什么?
最佳答案
查看 source code对于 sent_tokenize()
显示该方法当前使用预训练的 punkt tokenizer,因此它等同于 PunktSentenceTokenizer
。您是否需要重新训练分词器取决于您使用的文本的性质。如果它不是太奇特的东西,比如报纸文章,那么您可能会发现预训练的分词器就足够了。分词归结为分类任务,因此可以通过对标记数据使用典型指标(如精度、召回率、f 分数等)来比较不同的分词器。
punkt tokenizer 基于以下论文中发表的工作:
http://www.mitpressjournals.org/doi/abs/10.1162/coli.2006.32.4.485#.V2ouLXUrLeQ
它基本上是一种基于启发式的方法,旨在消除句子边界与缩写的歧义——这是句子标记化的祸根。称其为启发式方法并不意味着贬低。我以前使用过内置的句子分词器,它对我所做的工作很好,当然,我的任务并不真正依赖于准确的句子分词。或者更确切地说,我能够在无关紧要的地方投入足够的数据。
这是一个关于 SO 的问题示例,其中用户发现缺少预训练的分词器,需要训练一个新分词器:
How to tweak the NLTK sentence tokenizer
有问题的文本是 Moby Dick,奇怪的句子结构使分词器出错。您可能需要训练自己的分词器的一些示例是社交媒体(例如推特)或技术文献,其中包含许多预训练分词器未遇到的奇怪缩写。
关于python - 哪个分词器更适合与 nltk 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958781/