我希望做的事情与此相反:
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()
我的总体目标是使用神经网络替换文本中的所有XXXX
。 XXXX
可以表示.csv文件中的名称,位置,数字,日期等。
最终结果如下:
XXXX转到XXXX XXXXXX
海绵鲍勃去了迪士尼世界。
简而言之,我要隐藏文本并将其替换为使用Fuzzy生成的数据集。
答案 0 :(得分:1)
您可以使用命名实体识别(NER)来实现。它相当简单,并且有现成的工具可以做到这一点,例如Spacy。
NER是NLP任务,其中训练了神经网络(或其他方法)以检测某些实体,例如名称,地点,日期和组织。
示例:
海绵鲍勃去了南海滩,他付了200美元的门票!
我知道,迈克尔是个好人,他去了麦当劳,但捐赠给了圣路易斯街的慈善机构。
请注意,这不是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+" "
在此处了解更多信息: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)