使用 word_tokenize 函数时,引号会被替换为不同的引号。
示例(德语):
import nltk
sentence = "\"Ja.\"" # sentence[0] = "
tokens = nltk.word_tokenize(sentence) #tokens[0] = ``
print(tokens[0] == sentence[0]) # Prints false.
这是一个错误还是这种行为背后有原因?
是的,这是预期的输出。 双引号标点符号更改为明确表示开始和结束双引号。 开头的"
被转换为 2x 反引号,并被转换为 2x 单引号。
>>> from nltk import word_tokenize
>>> sent = '"this is a sentence inside double quotes."'
>>> word_tokenize(sent)
['``', 'this', 'is', 'a', 'sentence', 'inside', 'double', 'quotes', '.', "''"]
>>> word_tokenize(sent)[0]
'``'
>>> len(word_tokenize(sent)[0])
2
>>> word_tokenize(sent)[0] == '`'*2
True
>>> len(word_tokenize(sent)[-1])
2
>>> word_tokenize(sent)[-1] == "'" * 2
True
我不确定这种行为的原因是什么。 可能,在识别开盘/收盘报价时要明确。
感谢您的解释。
但是当我用一个(或两个)单引号或反引号替换双引号时,这种行为不会发生。
而且我认为分词器切换出部分原始文本有点奇怪,因为它可能导致问题并且不是真正透明的。
我想我必须牢记这一点,但我希望字符串的原始元素保持不变。
@mwess经过一些检查,从"
到 `` 的转换是原始 Penn treebank word tokenizer 的产物。
它仅在有双引号时发生,进行替换的正则表达式规则是https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49
至于单引号,我们看到 treebank 标记器STARTING_QUOTES
表达式不指示方向性。 我认为这与 Penn Treebank 注释保持一致。
我希望澄清有所帮助。
非常感谢。 它实际上有很大帮助。
在许多应用程序中不建议更改原始文本。 我希望word_tokenize
有一个标志来关闭更改文本。
最有用的评论
@mwess经过一些检查,从
"
到 `` 的转换是原始 Penn treebank word tokenizer 的产物。它仅在有双引号时发生,进行替换的正则表达式规则是https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49
至于单引号,我们看到 treebank 标记器
STARTING_QUOTES
表达式不指示方向性。 我认为这与 Penn Treebank 注释保持一致。我希望澄清有所帮助。