为什么NLTK使用正则表达式进行单词令牌化,而是训练句子令牌化



我在Python中使用NLTK。我了解到它在单词令牌化功能中使用正则表达式,例如treebankwordtokenizer.tokenize(),但它使用训练有素的模型(泡菜文件)进行句子tokenization。我不明白为什么他们不将培训用于单词令牌化?这是否意味着句子令牌化是一项更艰巨的任务?

我不确定您是否可以说句子分裂要比(单词)tokenisation难。但是令牌化取决于句子的分裂,因此句子分裂中的错误将传播到令牌化。因此,您需要将可靠的句子分开,因此您不必在象征化中弥补它。事实证明,一旦您有良好的句子分裂,象征性就可以与Regexes效果很好。

为什么? - 代币化的主要歧义之一(至少在拉丁文脚本语言中)是("。"):它可以是一个完整的停止(因此是其本身的象征),一个缩写标记(属于该缩写标记),或特殊的东西(例如URL的一部分,小数分数,...)。一旦句子分离器弄清楚了第一个情况(完整停止),令牌者可以集中精力关注其余的情况。识别诸如URL之类的东西正是您要使用的正则是什么?

另一方面,句子分离器的主要工作是找到一段时间的缩写。您可以手工创建一个列表 - 也可以在大型文本集合中训练它。好消息是,这是无监督的培训 - 您只需纯文本而喂食,分离器会收集缩写。直觉是:如果一个令牌几乎总是出现在一段时间内,那么它可能是缩写。

最新更新