Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更新nltk包,使其不会将电子邮件分成3个不同的令牌?_Python_Regex_Nlp_Nltk - Fatal编程技术网

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]+
    -看起来像电子邮件的文本:
    • \S+
      -1个或多个非空白字符
    • @
      -一个
      @
      符号
    • [^\s.]+
      -1个或多个字符,而不是空格和
    • \。
      -文字点
    • [a-zA-Z]+
      -1个或多个ASCII字母
  • |
    -或
  • \w+
    -1个或多个单词字符(字母、数字或下划线)
  • |
    -或
  • [^\w\s]
    -除单词和空格字符外,字符的单个(在其后面添加
    +
    ,以匹配一个或多个序列)

请参阅。

正如您自己选择的标记所示,一个可能的解决方案是使用
RegexpTokenizer
,定义您自己应该被视为令牌的内容。这与更新包无关。