Hah*_*pro 3 python nlp tokenize nltk stanford-nlp
我的数据集中有两个句子:
w1 =我是Pusheen的猫.我太可爱了.#句号后没有空格
w2 =我是Pusheen的猫.我很可爱.#期后的空间
当我使用NKTL tokenizer(word和sent)时,nltk无法区分cat.I.
这是单词标记化
>>> 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']
Run Code Online (Sandbox Code Playgroud)
并发送了tokenize
>>> 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']
Run Code Online (Sandbox Code Playgroud)
我想问一下如何解决这个问题?即:在我的数据集中将nlkt检测为w2,有时单词和标点符号会粘在一起.
更新:尝试过Stanford 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.
Run Code Online (Sandbox Code Playgroud)
它是故意这样实现的 - 一个没有空格的时期后它通常不表示一个句子的结尾(想想短语中的句点,如"4.3版","ie","AM"等) .如果你有一个语料库,在完全停止后没有空格的句子的末尾是常见的,你必须先用正则表达式或类似的方法预处理文本,然后再发送给NLTK.
一个好的经验法则可能是通常小写字母后跟一个句点后跟一个大写字母通常表示一个句子的结尾.要在这种情况下在句点之后插入空格,您可以使用正则表达式,例如
import re
w1 = re.sub(r'([a-z])\.([A-Z])', r'\1. \2', w1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |