用文本替换XXXX或XX / XX / XX

时间:2019-12-17 21:46:50

标签: python-3.x nlp 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'

Partial replacement with re.sub()

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

最终结果如下:

XXXX转到XXXX XXXXXX

海绵鲍勃去了迪士尼世界。

简而言之,我要隐藏文本并将其替换为使用Fuzzy生成的数据集。

1 个答案:

答案 0 :(得分:1)

您可以使用命名实体识别(NER)来实现。它相当简单,并且有现成的工具可以做到这一点,例如Spacy。

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

示例:

  

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

返回: NER with 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+" "

在此处了解更多信息: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)