重新标记电子邮件地址

Retokenize email address

有没有办法重新标记电子邮件地址,使它们再次成为电子邮件地址?在我现在使用的代码中(见下文),如果我输入 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)

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

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

您可以根据 space 拆分您的列表并加入两个联接。

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

Herman Melvilles email is mobydick123@gmail.com

第一部分以分隔符 space 连接,第二部分不使用分隔符连接,将电子邮件放在一起。基于最后 3 个元素将是电子邮件的假设,这是一个可靠的假设,因为通常是这种情况,这应该有效。