Nltk: word_tokenize 替换字符

创建于 2017-02-15  ·  5评论  ·  资料来源: nltk/nltk

使用 word_tokenize 函数时,引号会被替换为不同的引号。

示例(德语):

import nltk
sentence = "\"Ja.\"" # sentence[0] = "
tokens = nltk.word_tokenize(sentence) #tokens[0] = ``
print(tokens[0] == sentence[0]) # Prints false.

这是一个错误还是这种行为背后有原因?

最有用的评论

@mwess经过一些检查,从"到 `` 的转换是原始 Penn treebank word tokenizer 的产物

它仅在有双引号时发生,进行替换的正则表达式规则是https://github.com/nltk/nltk/blob/develop/nltk/tokenize/treebank.py#L49

至于单引号,我们看到 treebank 标记器STARTING_QUOTES表达式不指示方向性。 我认为这与 Penn Treebank 注释保持一致。

我希望澄清有所帮助。

所有5条评论

是的,这是预期的输出。 双引号标点符号更改为明确表示开始和结束双引号。 开头的"被转换为 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有一个标志来关闭更改文本。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

goodmami picture goodmami  ·  4评论

DavidNemeskey picture DavidNemeskey  ·  4评论

Chris00 picture Chris00  ·  3评论

libingnan54321 picture libingnan54321  ·  3评论

alvations picture alvations  ·  3评论