我们如何阻止 word_tokenize
拆分诸如 "pass_word"
、"https://www.gmail.com"
和 “tempemail@mail.com”
?引号应该可以防止这种情况发生,但事实并非如此。
我尝试过不同的正则表达式选项。
from nltk import word_tokenize
s = 'open "https://www.gmail.com" url. Enter "tempemail@mail.com" in email. Enter "pass_word" in password.'
for phrase in re.findall('"([^"]*)"', s):
s = s.replace('"{}"'.format(phrase), phrase.replace(' ', '*'))
tokens = word_tokenize(s)
print(tokens)
实际响应:
['open', 'https', ':', '//www.gmail.com', 'url', '.', 'Enter',
'tempemail', '@', 'mail.com', 'in', 'email', '.', 'Enter',
'pass_word', 'in', 'password', '.']
预期响应:
['open', 'https://www.gmail.com', 'url', '.', 'Enter',
'tempemail@mail.com', 'in', 'email', '.', 'Enter',
'pass_word', 'in', 'password', '.']
最佳答案
你可以试试这个:
首先,将文本标记为句子。如果句子包含特殊字符,请使用 str.split()
函数对其进行标记,否则使用 word_tokenize
。
tokens=[]
for sent in sent_tokenize(s):
if re.match(r'^\w+$', s):
for token in word_tokenize(sent):
tokens.append(token)
else:
for token in sent.split():
tokens.append(token)
print(tokens)
输出:
['open', '"https://www.gmail.com"', 'url.', 'Enter', '"tempemail@mail.com"', 'in', 'email.', 'Enter', '"pass_word"', 'in', 'password.']
编辑 您可以通过使用句点进一步分割字符串来标记句点。
关于python - 如何避免双引号字符串、站点 URL 和电子邮件地址进行标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57607946/