Python NLTK标记器和Stanford corenlp标记器不能在句点(.)处区分两个没有空格的句子

Python NLTK标记器和Stanford corenlp标记器不能在句点(.)处区分两个没有空格的句子,python,nlp,nltk,stanford-nlp,tokenize,Python,Nlp,Nltk,Stanford Nlp,Tokenize,我的数据集中有两个句子: w1=我是普希恩猫。我太可爱了句点后没有空格 我是普希恩猫。我真可爱一段又一段 当我使用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

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

w1=我是普希恩猫。我太可爱了句点后没有空格
我是普希恩猫。我真可爱一段又一段

当我使用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']
并发送标记化

>>> nltk.sent_tokenize(w1, 'english')
['I am Pusheen the cat.I am so cute']
>>> nltk.sent_tokenize(w2, 'english')
['I am Pusheen the cat.', 'I am so cute']
我想问一下如何解决这个问题?i、 e:让nlkt检测为w2,而在我的数据集中,有时单词和标点符号粘在一起

更新: 尝试使用斯坦福CoreNLP 3.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.

它是故意这样实现的——后面没有空格的句点通常并不表示句子的结尾(想想“Version4.3”、“i.e.”、“a.M.”等短语中的句点)。如果你的语料库中经常出现句号后没有空格的句子结尾,那么在将文本发送到NLTK之前,你必须用正则表达式或类似的方法对文本进行预处理

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

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

不考虑以“#”开头的所有内容,w1是一个句子,单词中包含句点(例如电子邮件地址)。因此,没有不能区分两个句子的情况,因为只有一个句子。