【问题标题】:Retokenize email address [duplicate]重新标记电子邮件地址[重复]
【发布时间】:2021-10-17 11:26:41
【问题描述】:

有没有办法重新标记电子邮件地址,使它们再次成为电子邮件地址?在我现在使用的代码中(见下文),如果我将mobydick123@gmail.com 作为输入,我将得到mobydick123 @ gmail.com 的输出。

from nltk.tokenize.treebank import TreebankWordDetokenizer
from nltk.tokenize import word_tokenize
from itertools import groupby 
import spacy

input_sent = 'Herman Melvilles email is mobydick123@gmail.com'

tokens = word_tokenize(input_sent)
print(tokens)

myList = list(filter((']').__ne__, tokens))
myList = list(filter(('[').__ne__, myList))

res = [i[0] for i in groupby(myList)]
my_list = list(map(lambda item: item.replace("W_NLP_PERSON", "[W_NLP_PERSON]").replace('W_NLP_DATE', '[W_NLP_DATE]').replace('W_NLP_IMEI_HARDWARE_ID', '[W_NLP_IMEI_HARDWARE_ID]').replace('W_NLP_IP_ADDRESS', '[W_NLP_IP_ADDRESS]'), res))
my_list = TreebankWordDetokenizer().detokenize(my_list)

print(my_list)

【问题讨论】:

  • 所以给定您的列表my_list,您的预期结果是Herman Melvilles email is mobydick123@gmail.com?
  • 是的,这就是我想要的。
  • 不使用 spaCy 为什么还要导入它?

标签: python nltk tokenize


【解决方案1】:

假设您列表的最后 3 个元素始终是名称 + @ + 域,即:

>>> my_list.split()[-3:]
['mobydick123', '@', 'gmail.com']

您可以根据空格拆分列表并加入两个连接。

elements = my_list.split()
>>> print(' '.join(elements[:-3]),''.join(elements[-3:]))

Herman Melvilles email is mobydick123@gmail.com

第一部分以分隔符空格连接,第二部分不带分隔符,将电子邮件放在一起。假设最后 3 个元素将是电子邮件,这是一个可靠的假设,因为通常是这种情况,这应该可行。

【讨论】:

  • 谢谢!我想了想,但我不知道从哪里开始实施它。实际上,您的解决方案很容易通过搜索“@”然后在此之前和之后获取标记来概括。
  • 欢迎您,是的,这是一个非常简单的方法。或许还有更优雅的方式
  • 我还想知道标准标记化包中没有涵盖这一点。会继续寻找。
猜你喜欢
  • 2014-02-10
  • 2010-11-04
  • 1970-01-01
  • 2021-08-29
  • 2021-04-03
  • 2013-03-25
  • 2015-11-19
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多