双引号的NLTK字令牌化行为令人困惑

时间:2015-08-24 14:40:01

标签: python nltk

import nltk
>>> nltk.__version__
'3.0.4'
>>> nltk.word_tokenize('"')
['``']
>>> nltk.word_tokenize('""')
['``', '``']
>>> nltk.word_tokenize('"A"')
['``', 'A', "''"]

了解它如何将"更改为双重``和''

这里发生了什么?为什么要改变这个角色?有修复吗?因为我需要稍后在字符串中搜索每个标记。

Python 2.7.6如果它有任何区别。

1 个答案:

答案 0 :(得分:0)

似乎不可能在任何 nltk 标记器中轻松处理引用的单词。

  • 单引号单词与附加的起始引号分开,结束引号作为下一个标记
  • 双引号被拆分为两个单引号,具体取决于标记器,在单词之前和之后生成 2 个标记,或者在单词之前生成 2 个单引号中的 1 个标记,之后生成 2 个单引号。
  • 您应该搜索这些令牌
s = "marked with ''gonzaga'' "
from nltk.tokenize import word_tokenize
word_tokenize(s)
['marked', 'with', '``', 'gonzaga', "''"]
from sacremoses  import MosesTokenizer
tokenizer = MosesTokenizer()
tokenizer.tokenize(s, escape=False)
['marked', 'with', "'", "'", 'gonzaga', "'", "'"]