为什么在Python NLTK中标记为“&”

2024-09-28 20:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python3中尝试使用NLTK中的Toktok单词标记器时

string='&& Test & and L&R '
from nltk.tokenize.toktok import ToktokTokenizer
ToktokTokenizer().tokenize(string)

我得到以下输出:

['&&', 'Test', '&', 'and', 'L&R']

看起来它以一种奇怪的方式逃逸了。 我使用的是NLTK版本3.3和Python3.6.4。你知道吗

猜猜为什么会发生这种情况,以及一种有效的解决方法? 我知道我能把答案通读一遍

[tok.replace("&","&") for tok in tokenized_sentence]

但这似乎是一个肮脏的黑客。我想知道是否有一种方法不产生这种效果的第一种方式。你知道吗


Tags: and方法from标记teststring方式单词
1条回答
网友
1楼 · 发布于 2024-09-28 20:45:28

正如@snakecharmerb在&中提到的,源状态:

# Replace problematic character with numeric character reference.

解决此问题的一种方法是重写ToktokTokenizer实例上的字段,例如:

import re

from nltk.tokenize.toktok import ToktokTokenizer

string = '&& Test & and L&R '

tokenizer = ToktokTokenizer()
tokenizer.AMPERCENT = re.compile('& '), '& '
tokenizer.TOKTOK_REGEXES = [(regex, sub) if sub != '& ' else (re.compile('& '), '& ') for (regex, sub) in
                            ToktokTokenizer.TOKTOK_REGEXES]

result = tokenizer.tokenize(string)
print(result)

输出

['&&', 'Test', '&', 'and', 'L&R']

相关问题 更多 >