NLTK分词器和斯坦福CoreNLP分词器无法在句末的句号(.)后没有空格的情况下区分两个句子。

2024-05-17 12:13:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据集中有两个句子:

我是猫普希恩。我太可爱了。#句点后没有空格
w2=我是猫普希恩。我真可爱。#句点后有空格

当我使用NKTL标记器(word和sent)时,nltk不能区分cat.I之间的内容

这里是单词tokenize

>>> nltk.word_tokenize(w1, 'english')
['I', 'am', 'Pusheen', 'the', 'cat.I', 'am', 'so', 'cute']
>>> nltk.word_tokenize(w2, 'english')
['I', 'am', 'Pusheen', 'the', 'cat', '.', 'I', 'am', 'so', 'cute']

并发送标记化

^{pr2}$

我想问一下怎么解决这个问题?i、 e:让nlkt检测为w2,而在我的数据集中,有时单词和标点符号粘在一起。在

更新: 尝试过斯坦福corenlp3.7.0,他们也无法区分'cat.I'为'cat'、'''、'I'

meow@meow-server:~/projects/stanfordcorenlp$ java edu.stanford.nlp.process.PTBTokenizer sample.txt
I
am
Pusheen
the
cat.I
am
so
cute
.
PTBTokenizer tokenized 9 tokens at 111.21 tokens per second.

Tags: the数据标记cutesoamcatword
1条回答
网友
1楼 · 发布于 2024-05-17 12:13:53

它是故意这样实现的一个句点后面没有空格通常并不表示一个句子的结束(想想像“版本4.3”,“例如”,“a.M.”等短语中的句点)。如果你有一个语料库,在这个语料库中,句号后面没有空格是很常见的,那么你必须在发送到NLTK之前用正则表达式或类似的方法对文本进行预处理。在

一个好的经验法则可能是,通常一个小写字母后跟一个句点后接一个大写字母通常表示一个句子的结尾。在这种情况下,要在句点后插入空格,可以使用正则表达式,例如

import re
w1 = re.sub(r'([a-z])\.([A-Z])', r'\1. \2', w1)

相关问题 更多 >