【问题标题】:Replace specific text with a redacted version using Python使用 Python 将特定文本替换为编辑版本
【发布时间】:2019-12-17 21:46:50
【问题描述】:

我希望做与这里所做的相反的事情:

import re

text = '1234-5678-9101-1213 1415-1617-1819-hello'

re.sub(r"(\d{4}-){3}(?=\d{4})", "XXXX-XXXX-XXXX-", text)

output = 'XXXX-XXXX-XXXX-1213 1415-1617-1819-hello'

Partial replacement with re.sub()

我的总体目标是使用神经网络替换文本中的所有XXXXXXXX 可以表示 .csv 文件中的名称、地点、数字、日期等。

最终结果如下:

XXXX went to XXXX XXXXXX

海绵宝宝去了迪斯尼乐园。

简而言之,我正在取消屏蔽文本并将其替换为使用模糊生成的数据集。

【问题讨论】:

    标签: python-3.x nlp lstm


    【解决方案1】:

    您可以使用named-entity recognition (NER) 来完成。这相当简单,并且有现成的工具可以做到这一点,例如spaCy

    NER 是一项NLP 任务,其中训练神经网络(或其他方法)以检测某些实体,例如姓名、地点、日期和组织。

    例子:

    海绵宝宝去了南海滩,他付了 200 美元的门票!
    我知道,迈克尔是个好人,他去麦当劳,但在圣路易斯街向慈善机构捐款。

    返回:

    请注意,这不是 100%!

    这里有一个小sn-p供你试用:

    import spacy
    
    phrases = ['Sponge Bob went to South beach, he payed a ticket of $200!', 'I know, Michael is a good person, he goes to McDonalds, but donates to charity at St. Louis street.']
    nlp = spacy.load('en')
    for phrase in phrases:
       doc = nlp(phrase)
       replaced = ""
       for token in doc:
          if token in doc.ents:
             replaced+="XXXX "
          else:
             replaced+=token.text+" "
    
    

    在此处阅读更多信息:https://spacy.io/usage/linguistic-features#named-entities

    您可以根据实体类型进行替换,而不是替换为 XXXX,例如:

    if ent.label_ == "PERSON":
       replaced += "<PERSON> "
    

    然后:

    import re, random
    
    personames = ["Jack", "Mike", "Bob", "Dylan"]
    
    phrase = re.replace("<PERSON>", random.choice(personames), phrase)
    

    【讨论】:

    • 谢谢。我将在周末对此进行测试。这有很大帮助,并指向正确的方向。
    猜你喜欢
    • 2022-10-04
    • 1970-01-01
    • 2018-04-03
    • 2015-04-07
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多