Python 如何更新nltk包,使其不会将电子邮件分成3个不同的令牌?
当我键入以下代码时:Python 如何更新nltk包,使其不会将电子邮件分成3个不同的令牌?,python,regex,nlp,nltk,Python,Regex,Nlp,Nltk,当我键入以下代码时: tokens=word\u标记化(“a@b.com“” 它被分为以下3个标记:'a'、'@'、'b.com' 我想做的是把它作为一个单独的标记a@b.com’。免责声明:有很多电子邮件regexp。在这个问题中,我并没有试图匹配所有的电子邮件格式,只是举了一个例子 带有RegexpTokenizer(by)的正则表达式方法可以工作: from nltk.tokenize.regexp import RegexpTokenizer line="My email: a@bc.c
tokens=word\u标记化(“a@b.com“”
它被分为以下3个标记:'a'、'@'、'b.com'
我想做的是把它作为一个单独的标记a@b.com’。免责声明:有很多电子邮件regexp。在这个问题中,我并没有试图匹配所有的电子邮件格式,只是举了一个例子
带有RegexpTokenizer
(by)的正则表达式方法可以工作:
from nltk.tokenize.regexp import RegexpTokenizer
line="My email: a@bc.com is not accessible."
pattern = r'\S+@[^\s.]+\.[a-zA-Z]+|\w+|[^\w\s]'
tokeniser=RegexpTokenizer(pattern)
tokeniser.tokenize(line)
# => ['My', 'email', ':', 'a@bc.com', 'is', 'not', 'accessible', '.']
正则表达式匹配:
-看起来像电子邮件的文本:\S+@[^\S.]+\.[a-zA-Z]+
-1个或多个非空白字符\S+
-一个@
符号@
-1个或多个字符,而不是空格和[^\s.]+
-文字点\。
-1个或多个ASCII字母[a-zA-Z]+
-或|
-1个或多个单词字符(字母、数字或下划线)\w+
-或|
-除单词和空格字符外,字符的单个(在其后面添加[^\w\s]
,以匹配一个或多个序列)+
请参阅。正如您自己选择的标记所示,一个可能的解决方案是使用
RegexpTokenizer
,定义您自己应该被视为令牌的内容。这与更新包无关。