Eu tenho um script onde anonimizo dados pessoais, então quando uma string tem algumas palavras que começam com letras maiúsculas ela as substitui por outra função (ou seja, anonimizar nomes)
Quero escrever uma função onde a regex procure palavras fornecidas em uma lista. Quando uma string contém uma das palavras da lista fornecida, ela não deve ser substituída. Para dar um exemplo: Mijn naam é kim en ik heb een opleiding gevolgd aan de Universiteit van Amsterdam
Portanto, como a Universiteit van Amsterdam foi escrita em letras maiúsculas, ela será anonimizada por outra função. Quero fazer uma função extra que use Regex onde uma determinada lista com determinadas palavras será ignorada quando uma string corresponder às palavras da lista.
Tenho uma função que a substitui, mas quero que as palavras correspondentes sejam ignoradas.
Esta é a função que anonimizaNomes **
def anonymizeNames(sentence):
'''
:param sentence: the input sentence
:return: the sentence without names
'''
##define x
x = ""
##Check naam: indication
names0Reg = "[Aa]chternaam:|[Vv]oornaam:|[Nn]aam:|[Nn]amen:"
res = re.search(names0Reg, sentence)
if res != None:
##Achternaam:, voornaam: or naam: or namen: occurs; next Standardize
sentence = re.sub('[Nn]amen:', 'naam:', sentence)
sentence = re.sub('[Aa]chternaam:', 'naam:', sentence)
sentence = re.sub('[Vv]oornaam:', 'naam:', sentence)
sentence = re.sub('Naam:', 'naam:', sentence)
##Extract names
names00Reg = "naam: [A-Za-z]+"
x = re.findall(names00Reg, sentence)
for y in x:
##remove naam:\s
y = re.sub('naam: ', '', y)
##Check for tussenvoegsels
if y in tussenVList:
##Add next word
regTest = y + " " + "[A-Za-z]+"
x2 = re.search(regTest, sentence)
if x2 != None:
##Name found
y = x2.group()
##replace
sentence = re.sub(y, strz, sentence)
##Always check sentences for names 1
names1Reg = "[Ii]k [Bb]en ([A-Z]{1}[a-z ]{2,})+[\\.\\,]*"
res = re.search(names1Reg, sentence)
if res != None:
##adjust result
x = re.sub('[Ii]k [Bb]en ', '', res.group())
x = re.sub('[\\,\\.]', '', x)
##use NLP to only keep names
##Always check sentences for names 2
names2Reg = "[Mm]ijn [Nn]aam is ([A-Z]{1}[a-z\s-]{2,})+[\\.\\,]*"
res = re.search(names2Reg, sentence)
if res != None:
##adjust result
x = re.sub('[Mm]ijn [Nn]aam is ', '', res.group())
x = re.sub('[\\,\\.]', '', x)
##use NLP to only keep names
##Check for single letter followed by dot and series of letters
if x == "":
regNameLet = "^[A-Z]{1}\\.[A-Za-z]{2,}|\s[A-Z]{1}\\.[A-Za-z]{2,}"
res = re.search(regNameLet, sentence)
if res != None:
##replace word in sentence, first at start
sentence = re.sub('^[A-Z]{1}\\.[A-Za-z]{2,}', strz, sentence)
##next in sentence with additional space
strY = " " + strz
sentence = re.sub('\s[A-Z]{1}\\.[A-Za-z]{2,}', strz, sentence)
##Check for occurence of two subsequent uppercase words (might be a name)
if x == "":
res = re.findall("[A-Z]{1}[a-z]{2,}\s[A-Z]{1}[a-z]{2,}", sentence)
if res != []:
for y in res:
if len(y) > 1:
##replace name with strX
sentence = re.sub(y, strz, sentence)
##Always recheck remaining sentence with NLP to make sure all personal info is removed
sentence = pureNLP2(sentence) ##pureNLP2 tries to include entity checks
return (sentence)
Esta é a minha função para encontrar nomes de universidades e com esta função não quero substituí-los
school ['Hogenschool Amsterdam', 'Universiteit van Amsterdam']
strX='xxx'
def school (sentence):
for schoolname in school:
res = re.findall(schoolname,sentence)
if res !=[]:
for y in res:
if len(y) >1:
sentence = replaceNice(sentence, strX, y)
return(sentence)
print(school('Mijn naam is Kim en ik volg een opleiding aan de Universiteit van Amsterdam'))
saída :Mijn naam xxx en ik volg een opleiding aan de xxx xxx
A saída que eu quero é:
Mijn naam is Kim en ik volg een opleiding aan de Universiteit van Amsterdam
Acho que tenho um começo. Mas quando quero terminar a frase variável fico um pouco preso, porque aqui quero dizer se a string tem palavras correspondentes da lista Escola não a substitua, apenas imprima de volta.
Substitua todas as palavras seguras por uma versão em minúsculas, torne-as anônimas e restaure as palavras seguras em minúsculas à sua forma original.
Saída: