使用 Python 将特定文本替换为编辑版本

Hel*_*rld 5 nlp python-3.x lstm

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

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'
Run Code Online (Sandbox Code Playgroud)

部分替换为 re.sub()

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

最终结果将如下所示:

XXXX went to XXXX XXXXXX
Run Code Online (Sandbox Code Playgroud)

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

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

Tia*_*que 3

您可以使用命名实体识别(NER) 来完成此操作。这非常简单,并且有现成的工具可以做到这一点,例如spaCy

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

例子:

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

返回:

NER 与 spacy

请注意,这不是 100%!

这里有一个小片段供您尝试:

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+" "

Run Code Online (Sandbox Code Playgroud)

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

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

if ent.label_ == "PERSON":
   replaced += "<PERSON> "
Run Code Online (Sandbox Code Playgroud)

然后:

import re, random

personames = ["Jack", "Mike", "Bob", "Dylan"]

phrase = re.replace("<PERSON>", random.choice(personames), phrase)
Run Code Online (Sandbox Code Playgroud)