python - 如何避免双引号字符串、站点 URL 和电子邮件地址进行标记化

标签 python nlp

我们如何阻止 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/

相关文章:

python - 字符串包含两个 pandas 系列

python - 在不下载视频的情况下提取 youtube 视频的特定帧

python - 给定一个带有空格的英语句子,我如何在 python 中估计特定单词适合该空格的概率?

machine-learning - 我想要一台机器学习对短文本进行分类

python - 在列表中存储的字符串中插入 200 个变量

Python:使用 Ghost 进行动态网页抓取

python - K8s 中微服务利用率低的性能问题(也对开发和 DevOps 产生影响)

python - 如何将文件中的行追加到列表中,同时保留行数 - python 3

nlp - Hunspell 词缀条件正则表达式格式。有什么方法可以匹配开始吗?

machine-learning - 使用词嵌入时处理缺失词的最佳方法是什么?