删除特定单词后面的单词

问题描述 投票:0回答:1

我有与客户对话的德语电子邮件和文字记录。它们包括我需要删除的个人身份信息。因此,文本将是 “你好史密斯先生”“亲爱的史密斯先生”“你好丽莎” 等,然后是对话。我需要保留谈话以进行进一步分析。我想到了三个解决方案:

A) 编制名单: 目前,我还不知道所有会提到的名字。我无法访问 CRM 数据库。因此,编译列表并将其添加到停用词语料库将非常耗时且/或容易出错。

B) 词性标注(PoS)/命名实体识别(NER): 这也会删除产品名称和地点。我需要保留这些信息。所以不幸的是 NER 不是一个选择。

C) 正则表达式(regex): 使用正则表达式来匹配称呼,例如“亲爱的”,删除后面的词。 这个答案给了我一个很好的起点,但它假设我知道我需要删除的名字后面的单词,但我不知道。

import re
print re.sub(r'(?<=copy )(.*)(?=from)', '', "copy table values from 'a.dat';")

如何修改代码以删除称呼语后面的单词?

我阅读了 lookaround 并在 regex101 上玩了一下,但无法弄清楚。

另外,我需要先对字符串进行标记吗?

也欢迎使用 pandas

str.replace
解决方案。

python regex regex-lookarounds
1个回答
0
投票

除非有一种逻辑方法可以定义称呼语的结尾,否则世界上没有任何代码(不求助于人工智能)能够始终如一地做到这一点(即使如此)。您可以计算空格,但对于“亲爱的丽莎”和“亲爱的史密斯先生”来说,这会失败。您可以尝试删除所有所谓的敬称(先生、夫人、勋爵、博士等),然后计算空格。或者如果称呼后面总有一个逗号,那就很简单了。

这是一个非常简单的应急措施,假设每个称呼的末尾有一个逗号:

text = ["Dear Lisa, how are you. etc etc", " Dear mrs Smith, this is great"]
substring = "Dear "

for line in text:
    dear = line.find(substring)
    if dear == -1:
        continue
    name_ends = line.find(',', dear + len(substring))
    print(line[name_ends + 1:])

它查找单词“亲爱的”(这可能是不必要的),然后查找下一个逗号。

© www.soinside.com 2019 - 2024. All rights reserved.