word_tokenize
保持开放的单引号,不用空格填充,这是为了确保附着词被分词为 'll
,如 've' 等。
原始的树库分词器具有相同的行为,但斯坦福核心NLP并不具备。看起来有些额外的正则表达式被添加进来,以确保如果没有附着词,开放的单引号会被空格填充。
应该有一个非捕获的正则表达式来捕获非附着词并填充空格。
详细信息请参考:https://stackoverflow.com/questions/49499770/nltk-word-tokenizer-treats-ending-single-quote-as-a-separate-word/49506436#49506436
7条答案
按热度按时间pb3skfrl1#
如果我们在https://github.com/nltk/nltk/blob/develop/nltk/tokenize/init.py处对
word_tokenize
进行以下更改,它将实现与Stanford CoreNLP相似的行为:[输出]:
上述正则表达式技巧将涵盖以下的clitics:
是否还有更多的clitics应该添加?
nvbavucw2#
单引号出现在复数名词的宾格形式末尾,如"providers'",该如何处理?
kzipqqlq3#
"读者"需要被分词为"读者"和"'"吗?此外,到目前为止这个bug的状态是什么?如果上面提到的更改还没有被实施,我想提出这个问题。
ddhy6vgd4#
这个问题出现在开头的引号和附着词修复上,可以很容易地解决,这将使
word_tokenize
的行为类似于斯坦福大学的。我个人认为这是一个很好的功能。请随时贡献并在上面打开一个pull-request=)
但是要处理所有格复数,很难理解如何做到这一点,因为我们需要定义句子之间的差异,例如:
有很多示例表明,所有格复数可能会与关闭的单引号混淆。我认为对于使用单引号表示复数所有格的情况,不值得修复。
vfh0ocws5#
dgtucam16#
我刚刚又处理了nltk分词器的结果,它解决了我的问题。
但这可能不是最优解决方案,需要更新nltk库
6l7fqoea7#
是否存在从#2018的回归问题,还是说这个pr没有解决这个问题?
nltk版本:3.8.1
python版本:3.10.12
预期结果:['I', "'ve", 'said', 'many', 'times', ',', "'", "We", "'ll", 'make', 'it', 'through', '!', "'"]
实际结果:['I', "'ve", 'said', 'many', 'times', ',', "'We", "'ll", 'make', 'it', 'through', '!', "'"]