Почему & обозначается как "&" в Python NLTK - PullRequest
0 голосов
/ 09 ноября 2018

При попытке использовать токенайзер слов Toktok из NLTK в Python3

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

Я получаю следующий вывод:

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

Похоже, это странным образом ускользает от &. Я использую NLTK версии 3.3 и Python 3.6.4.

Можно догадаться, почему это происходит, и эффективный способ ее решения? Я знаю, что могу пройти через ответ с

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

но это кажется грязным хаком. Я хотел бы знать, есть ли способ не производить этот эффект первым способом.

1 Ответ

0 голосов
/ 10 ноября 2018

Как упомянуто @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']
...