2016-09-29 1 views
1

Когда я печатаю следующий код: tokens = word_tokenize("[email protected]")Как обновить пакет nltk, чтобы он не разбивал электронную почту на 3 разных токена?

Он получает разбитый на этих 3-х токенов: «а», «@», «» b.com

То, что я хочу сделать, это держать его в качестве один токен '[email protected]'.

+0

Как показывает ваш собственный выбор тегов, возможным решением является использование 'RegexpTokenizer', определяющее, что следует считать токеном. Это не имеет никакого отношения к обновлению пакета. – lenz

ответ

1

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Есть много регулярных выражений электронной почты. Я не пытаюсь сопоставить все форматы электронной почты в этом вопросе, просто показывая пример.

Регулярное выражение подход с RegexpTokenizer (mentioned above по lenz) могут работать:

from nltk.tokenize.regexp import RegexpTokenizer 
line="My email: [email protected] is not accessible." 
pattern = r'\[email protected][^\s.]+\.[a-zA-Z]+|\w+|[^\w\s]' 
tokeniser=RegexpTokenizer(pattern) 
tokeniser.tokenize(line) 
# => ['My', 'email', ':', '[email protected]', 'is', 'not', 'accessible', '.'] 

регулярное выражение матча:

  • \[email protected][^\s.]+\.[a-zA-Z]+ - текст, глядя, как электронная почта:
    • \S+ - 1 или более не-пробельные символы
    • @ - это @ символ
    • [^\s.]+ - 1 или более символов, кроме пробельных символов и .
    • \. - буквальная точка
    • [a-zA-Z]+ - 1 или более ASCII буквы
  • | - или
  • \w+ - 1 или более символов слова (буквы, цифры или символы подчеркивания)
  • | - или
  • [^\w\s] - одиночный (добавить + после него, чтобы он соответствовал последовательности из 1 или более) появления символа, отличного от слова и символа пробела.

См. online regex demo.

 Смежные вопросы

  • Нет связанных вопросов^_^