我有与客户交谈的德语邮箱和文字记录.它们包括我需要删除的个人身份信息.因此,这是一个数据匿名化任务.文本将是"Hello Mr. Smith""Dear Mr Smith""Hello Lisa"等,后跟对话.我需要保留这段对话以作进一步分析.我想到了三个解决方案:

A) compiling a list of names: 在这个阶段,我不知道将提到的所有名字.我没有访问CRM数据库的权限.因此,汇编列表并将其添加到停用词语料库将是耗时的和/或容易出错的.

B) Part-of-Speech Tagging (PoS) / Named Entity Recognition (NER): 这还将删除产品名称和地点.我需要保留这些信息.因此,不幸的是,NER不是一个 Select .

C) Regular expression (regex): 用regEx来匹配称呼语."亲爱的",并删除后面的字眼.This answer给了我一个很好的起点,但它假设我知道我需要删除的名字后面的单词,但我不知道.

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

我怎样才能修改代码来删除称呼后面的单词呢?

我在lookaround上读了一下,在regex101上玩了一会儿,但还是弄不明白.

另外,我是否需要首先对字符串进行标记化?

Pandas str.replace的解决方案也是受欢迎的.

推荐答案

你可以通过建立称谓和敬语(先生、夫人、博士等)的列表来实现这一点,如果你的数据中有任何一个词与这些词中的一个匹配,通过前几个词,你可以删除它.然后,提供实际名称只是一个单词,就像您的示例中的那些单词一样,那么这应该是可行的.

import re

text = ["Dear mrs smith Blah", "Dear fred, how are  you. It is a while, since etc",
        " Dear Lisa, this is great", "Hello Dr Foster, It's good to hear from you."]

salutations = ["dear", "hello", "hi"]

honorifics = ["mr", "mrs", "dr"]

for line in text:
    line = line.strip()
    words = re.split(r"[\s]+", line)
    #print(words)
    for word in words:
        if word.lower() in salutations:
            words.remove(word)
    for word in words:
        if word.lower() in honorifics:
            words.remove(word)
    del words[0]   # Remove the name

    print(' '.join(words))

从上面的数据中,打印出以下内容:

Blah
how are you. It is a while, since etc
this is great
It's good to hear from you.

您可以通过使用列表理解以及在前几个单词之后停止替换来提高代码的效率(假设您想要删除的部分位于开头).

Python相关问答推荐

numba jitClass,记录类型为字符串

未删除映射表的行

将两只Pandas rame乘以指数

Pandas 都是(),但有一个门槛

使用@ guardlasses. guardlass和注释的Python继承

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

如何在Python脚本中附加一个Google tab(已经打开)

如何设置视频语言时上传到YouTube与Python API客户端

名为__main__. py的Python模块在导入时不运行'

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

try 检索blob名称列表时出现错误填充错误""

Python Pandas—时间序列—时间戳缺失时间精确在00:00

判断Python操作:如何从字面上得到所有decorator ?

你能把函数的返回类型用作其他地方的类型吗?'

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

将字节序列解码为Unicode字符串

有了Gekko,可以创建子模型或将模型合并在一起吗?

以极轴表示的行数表达式?

替换包含Python DataFrame中的值的<;

关于数字S种子序列内部工作原理的困惑