我有与客户对话的德语电子邮件和文字记录。它们包括我需要删除的个人身份信息。因此,文本将是 “你好史密斯先生”、“亲爱的史密斯先生”、“你好丽莎” 等,然后是对话。我需要保留谈话以进行进一步分析。我想到了三个解决方案:
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
解决方案。
除非有一种逻辑方法可以定义称呼语的结尾,否则世界上没有任何代码(不求助于人工智能)能够始终如一地做到这一点(即使如此)。您可以计算空格,但对于“亲爱的丽莎”和“亲爱的史密斯先生”来说,这会失败。您可以尝试删除所有所谓的敬称(先生、夫人、勋爵、博士等),然后计算空格。或者如果称呼后面总有一个逗号,那就很简单了。
这是一个非常简单的应急措施,假设每个称呼的末尾有一个逗号:
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:])
它查找单词“亲爱的”(这可能是不必要的),然后查找下一个逗号。