From 2c2b8294d9885a10d8ea4f3525cdd0f4870f598b Mon Sep 17 00:00:00 2001 From: Felix <65565033+fexfl@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:41:00 +0100 Subject: [PATCH 1/4] Added lists to pseudo class to record NEs --- mailcom/parse.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/mailcom/parse.py b/mailcom/parse.py index 58b8d29..ada06af 100644 --- a/mailcom/parse.py +++ b/mailcom/parse.py @@ -58,6 +58,12 @@ def __init__(self): # records the already replaced names in an email self.used_first_names = {} + # records NEs in the last email + self.per_list = [] + self.org_list = [] + self.loc_list = [] + self.misc_list = [] + def init_spacy(self, language: str, model="default"): if model == "default": model = self.spacy_default_model_dict[language] @@ -95,6 +101,11 @@ def init_transformers( def reset(self): # reset used names for processing a new email self.used_first_names.clear() + # reset NEs + self.per_list.clear() + self.org_list.clear() + self.loc_list.clear() + self.misc_list.clear() def get_sentences(self, input_text): doc = self.nlp_spacy(input_text) @@ -107,8 +118,8 @@ def get_ner(self, sentence): ner = self.ner_recognizer(sentence) return ner - def pseudonymize_per(self, new_sentence, nelist): - unique_ne_list = list(dict.fromkeys(nelist)) + def pseudonymize_per(self, new_sentence): + unique_ne_list = list(dict.fromkeys(self.per_list)) for ne in unique_ne_list: # choose the pseudonym nm_list = self.used_first_names @@ -140,7 +151,6 @@ def pseudonymize_per(self, new_sentence, nelist): def pseudonymize_ne(self, ner, sentence): # remove any named entities entlist = [] - nelist = [] new_sentence = sentence for i in range(len(ner)): entity = ner[i] @@ -157,18 +167,21 @@ def pseudonymize_ne(self, ner, sentence): # replace PER if ent_string == "PER": # add the name of this entity to list - nelist.append(ent_word) + self.per_list.append(ent_word) # replace LOC elif ent_string == "LOC": new_sentence = new_sentence.replace(ent_word, "[location]") + self.loc_list.append(ent_word) # replace ORG elif ent_string == "ORG": new_sentence = new_sentence.replace(ent_word, "[organization]") + self.org_list.append(ent_word) # replace MISC elif ent_string == "MISC": new_sentence = new_sentence.replace(ent_word, "[misc]") + self.misc_list.append(ent_word) # replace all unique PER now - new_sentence = self.pseudonymize_per(new_sentence, nelist) + new_sentence = self.pseudonymize_per(new_sentence) newlist = [new_sentence] return newlist From a02fd079721cd4ff50a91fdebb55f69d1a133968 Mon Sep 17 00:00:00 2001 From: Felix <65565033+fexfl@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:21:53 +0100 Subject: [PATCH 2/4] Implemented highlighting using HTML --- notebook/demo.ipynb | 228 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 175 insertions(+), 53 deletions(-) diff --git a/notebook/demo.ipynb b/notebook/demo.ipynb index 0ab8858..a7b0bc7 100644 --- a/notebook/demo.ipynb +++ b/notebook/demo.ipynb @@ -17,7 +17,8 @@ "source": [ "import mailcom.inout\n", "import mailcom.parse\n", - "import pandas as pd" + "import pandas as pd\n", + "from IPython.display import display, HTML" ] }, { @@ -49,18 +50,142 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# function for displaying the result using HTML\n", + "def highlight_ne(text, per_list, org_list, loc_list, misc_list):\n", + " # highlight PER\n", + " for loc in loc_list:\n", + " text = text.replace(loc, \"\" + loc + \"\")\n", + " for org in org_list:\n", + " text = text.replace(org, \"\" + org + \"\")\n", + " for misc in misc_list:\n", + " text = text.replace(misc, \"\" + misc + \"\")\n", + " for per in per_list:\n", + " text = text.replace(per, \"\" + per + \"\")\n", + " return text" + ] + }, + { + "cell_type": "code", + "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Bonjour Agathe.eml\n", - "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Re reunião agendada para o dia 24 de abril 2024-04-17T17_39_49+02 00.eml\n", - "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Re_ purismo.html\n", + "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Bonjour Agathe.eml\n" + ] + }, + { + "data": { + "text/html": [ + "J'espère que tu vas bien! Je voulais partager avec toi quelques photos de mon dernier voyage!\r\n", + "[Inline-Bild]\r\n", + "\r\n", + "[Inline-Bild]\r\n", + "\r\n", + "À bientôt,\r\n", + "\r\n", + "Pierre\r\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Re reunião agendada para o dia 24 de abril 2024-04-17T17_39_49+02 00.eml\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "Olá Lino,Espero que este e-mail te encontre bem. Agradeço a confirmação de sua presença na reunião do dia 24 de abril às 15:00 na InnovaTech Solutions.Com relação à confirmação dos demais membros da equipe, irei verificar a disponibilidade de cada um e te retorno o mais breve possível para que possamos organizar todos os detalhes necessários. A relevância dos temas a serem discutidos para cada área certamente contribuirá para uma sessão produtiva.Até breve,[Alejandro Rodriguez]\n", + "InnovaTech Solutions S.L\n", + "\n", + "\n", + "\n", + " Am Mittwoch, 17. April 2024 um 17:30:19 MESZ hat lino.silva1 no.silva1@protonmail.com> Folgendes geschrieben:\n", + " \n", + "\n", + "\n", + "Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia 24 de abril, às 15:00, nas instalações da InnovaTech Solutions, localizada na Rua Principal, 123.Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:- Alessandra Acquarone (Secretária Executiva)- Dr. Giulia Agostini (Literatura Francesa/Italiana/Espanhola)- Meggi Altrock (Secretária do Prof. Dr. De Stefani)- Felicia Augusto-Hönicke (Assistente Acadêmica em Prática de Língua Portuguesa)- Ronny Beckert (Assistente Acadêmico)- Dr. Gérald Béreiziat (Professor de Prática da Língua Francesa)- Dr. Stephanie Béreiziat-Lang (Substituição de Cadeira em Literatura Espanhola)- Ursula Bergerfurth (Didática do Italiano)- Maylis Bonetti (Professora de Prática da Língua Francesa)- Dr. Sarah Burnautzki (Professora Tenure-Track em Literatura Francesa/Espanhola)- Constanza Cárdenas (Instrutora de Prática da Língua Espanhola)- Dr. Romanita Constantinescu (Professor de Romeno da Fundação)- Ricardo Coseano (Assistente Acadêmico em Prática da Língua Espanhola)- Prof. Dr. Elwys De Stefani (Cadeira de Linguística Italiana/Francesa)- Brigitta Dierkes (Didática do Espanhol)- Annachiara Di Taranto (Professora de Prática da Língua Italiana)- Agathe Duperron (Secretária do Prof. Große)- Madeleine Eppel (Responsável pelo Catálogo de Cursos e Matrículas)- José Esplá-Oliver (Assistente Acadêmico em Prática da Língua Espanhola)- Dr. Carmela Fischer Díaz (Instrutora de Prática da Língua Espanhola)- Sandrine Flores (Assistente Acadêmica em Prática da Língua Francesa)- Prof. Dr. Robert Folger (Cadeira de Literatura Espanhola)Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários.Atenciosamente,Lino Silva\n", + "\n", + "\n", + "\n", + "\n", + " Sicher versendet mit Proton Mail.\n", + " \n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Re_ purismo.html\n" + ] + }, + { + "data": { + "text/html": [ + "From : aitana.garcia@zohomail.euTo : \"Alejandro Rodriguez\"< alejandro.rodriguez1@gmx.net>Date : mié., 17 abr. 2024 17:24:41 +0200Subject : Re: purismoMuchas gracias!Sent using Zoho Mail---- El mié., 17 abr. 2024 17:22:49 +0200, Alejandro Rodriguez escribió ----Hola, aquí tienes el escaneo ;) Saludos, Aitana" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Parsing input file C:\\Users\\Felix\\Documents\\GitHub\\mailcom\\mailcom\\test\\data\\Re_ ¡Voy el 24!.html\n" ] + }, + { + "data": { + "text/html": [ + "From : pierre.lefevre@myyahoo.comTo : \"Alejandro Rodriguez\"< alejandro.rodriguez1@gmx.net>,\"Aitana Garcia\"< aitana.garcia@zohomail.eu>Date : mié., 17 abr. 2024 17:33:23 +0200Subject : Re: ¡Voy el 24!\n", + "Salut Aitana,Merci beaucoup pour l'invitation ! Je suis ravi d'apprendre que je pourrai vous rejoindre pour la réunion du 24 à 15h. Cela sera une excellente occasion de rencontrer l'équipe et de discuter des projets en cours.N'hésite pas à me dire s'il y a des documents spécifiques que je devrais consulter avant la réunion ou si tu veux que je prépare quelque chose de particulier. Je suis tout à fait disposé à contribuer de manière constructive à notre discussion.À très bientôt et encore merci de m'avoir inclus.Bien cordialement,\r\n", + "Pierre\n", + "\n", + "\n", + "\r\n", + " Am Mittwoch, 17. April 2024 um 17:31:14 MESZ hat Aitana Garcia Folgendes geschrieben:\r\n", + " \n", + "\n", + "\n", + "Ah, y me gustaría invitar a mi amigo Pierre, él está en el CCSent using Zoho Mail---- El mié., 17 abr. 2024 17:27:12 +0200, Aitana Garcia escribió ----Hola Ale,¡Todo bien por aquí! Solo pasaba a decirte que contarás conmigo el 24 a las 3 en la ofi. ¿Hay algo que deba llevar o algún tema en particular que quieras que cheque antes?¡Nos vemos!\r\n", + "AitanaSent using Zoho Mail\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -72,18 +197,25 @@ " # after this function was called, the email metadata can be accessed via io.email_content\n", " # the dict already has the entries content, date, attachments, attachment type\n", " email_dict = io.email_content.copy()\n", - " text = io.get_html_text(text)\n", + " html_text = io.get_html_text(text)\n", + " email_dict[\"html_text\"] = html_text\n", " if not text:\n", " continue\n", " # Test functionality of Pseudonymize class\n", - " output_text = ps.pseudonymize(text)\n", + " output_text = ps.pseudonymize(html_text)\n", + "\n", + " # display original text and highlight found and replaced NEs\n", + " highlighted_html = highlight_ne(html_text, ps.per_list, ps.org_list, ps.loc_list, ps.misc_list)\n", + " display(HTML(highlighted_html))\n", + "\n", + " # add pseudonymized text to dict\n", " email_dict[\"pseudo_content\"] = output_text\n", " out_list.append(email_dict)\n" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -93,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -123,33 +255,27 @@ "\n", "Email 1\n", "Original Text:\n", - "
\n", - "

Olá Lino,

Espero que este e-mail te encontre bem. Agradeço a confirmação de sua presença na reunião do dia 24 de abril às 15:00 na InnovaTech Solutions.

Com relação à confirmação dos demais membros da equipe, irei verificar a disponibilidade de cada um e te retorno o mais breve possível para que possamos organizar todos os detalhes necessários. A relevância dos temas a serem discutidos para cada área certamente contribuirá para uma sessão produtiva.

Até breve,

[Alejandro Rodriguez]\n", - "InnovaTech Solutions S.L



\n", + " \n", + "Olá Lino,Espero que este e-mail te encontre bem. Agradeço a confirmação de sua presença na reunião do dia 24 de abril às 15:00 na InnovaTech Solutions.Com relação à confirmação dos demais membros da equipe, irei verificar a disponibilidade de cada um e te retorno o mais breve possível para que possamos organizar todos os detalhes necessários. A relevância dos temas a serem discutidos para cada área certamente contribuirá para uma sessão produtiva.Até breve,[Alejandro Rodriguez]\n", + "InnovaTech Solutions S.L\n", + "\n", "\n", - "
\n", - "
\n", "\n", - "
\n", - " Am Mittwoch, 17. April 2024 um 17:30:19 MESZ hat lino.silva1 <lino.silva1@protonmail.com> Folgendes geschrieben:\n", - "
\n", - "

\n", - "

\n", + " Am Mittwoch, 17. April 2024 um 17:30:19 MESZ hat lino.silva1 Folgendes geschrieben:\n", + " \n", + "\n", + "\n", + "Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia 24 de abril, às 15:00, nas instalações da InnovaTech Solutions, localizada na Rua Principal, 123.Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:- Alessandra Acquarone (Secretária Executiva)- Dr. Giulia Agostini (Literatura Francesa/Italiana/Espanhola)- Meggi Altrock (Secretária do Prof. Dr. De Stefani)- Felicia Augusto-Hönicke (Assistente Acadêmica em Prática de Língua Portuguesa)- Ronny Beckert (Assistente Acadêmico)- Dr. Gérald Béreiziat (Professor de Prática da Língua Francesa)- Dr. Stephanie Béreiziat-Lang (Substituição de Cadeira em Literatura Espanhola)- Ursula Bergerfurth (Didática do Italiano)- Maylis Bonetti (Professora de Prática da Língua Francesa)- Dr. Sarah Burnautzki (Professora Tenure-Track em Literatura Francesa/Espanhola)- Constanza Cárdenas (Instrutora de Prática da Língua Espanhola)- Dr. Romanita Constantinescu (Professor de Romeno da Fundação)- Ricardo Coseano (Assistente Acadêmico em Prática da Língua Espanhola)- Prof. Dr. Elwys De Stefani (Cadeira de Linguística Italiana/Francesa)- Brigitta Dierkes (Didática do Espanhol)- Annachiara Di Taranto (Professora de Prática da Língua Italiana)- Agathe Duperron (Secretária do Prof. Große)- Madeleine Eppel (Responsável pelo Catálogo de Cursos e Matrículas)- José Esplá-Oliver (Assistente Acadêmico em Prática da Língua Espanhola)- Dr. Carmela Fischer Díaz (Instrutora de Prática da Língua Espanhola)- Sandrine Flores (Assistente Acadêmica em Prática da Língua Francesa)- Prof. Dr. Robert Folger (Cadeira de Literatura Espanhola)Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários.Atenciosamente,Lino Silva\n", + "\n", + "\n", + "\n", + "\n", + " Sicher versendet mit Proton Mail.\n", + " \n", "\n", "\n", - "
Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia 24 de abril, às 15:00, nas instalações da InnovaTech Solutions, localizada na Rua Principal, 123.

Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:

- Alessandra Acquarone (Secretária Executiva)
- Dr. Giulia Agostini (Literatura Francesa/Italiana/Espanhola)
- Meggi Altrock (Secretária do Prof. Dr. De Stefani)
- Felicia Augusto-Hönicke (Assistente Acadêmica em Prática de Língua Portuguesa)
- Ronny Beckert (Assistente Acadêmico)
- Dr. Gérald Béreiziat (Professor de Prática da Língua Francesa)
- Dr. Stephanie Béreiziat-Lang (Substituição de Cadeira em Literatura Espanhola)

- Ursula Bergerfurth (Didática do Italiano)
- Maylis Bonetti (Professora de Prática da Língua Francesa)
- Dr. Sarah Burnautzki (Professora Tenure-Track em Literatura Francesa/Espanhola)
- Constanza Cárdenas (Instrutora de Prática da Língua Espanhola)
- Dr. Romanita Constantinescu (Professor de Romeno da Fundação)
- Ricardo Coseano (Assistente Acadêmico em Prática da Língua Espanhola)
- Prof. Dr. Elwys De Stefani (Cadeira de Linguística Italiana/Francesa)

- Brigitta Dierkes (Didática do Espanhol)
- Annachiara Di Taranto (Professora de Prática da Língua Italiana)
- Agathe Duperron (Secretária do Prof. Große)
- Madeleine Eppel (Responsável pelo Catálogo de Cursos e Matrículas)
- José Esplá-Oliver (Assistente Acadêmico em Prática da Língua Espanhola)
- Dr. Carmela Fischer Díaz (Instrutora de Prática da Língua Espanhola)
- Sandrine Flores (Assistente Acadêmica em Prática da Língua Francesa)
- Prof. Dr. Robert Folger (Cadeira de Literatura Espanhola)

Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários.

Atenciosamente,

Lino Silva
\"grafik.png\"
\n", - "
\n", - "
\n", "\n", - "
\n", "\n", - "
\n", - " Sicher versendet mit Proton Mail.\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", "Pseudonymized Text:\n", " \n", " Olá Claude,Espero que este e-mail te encontre bem. Agradeço a confirmação de sua presença na reunião do dia [number] de abril às [number]:[number] na [organization] Solutions . Com relação à confirmação dos demais membros da equipe, irei verificar a disponibilidade de cada um e te retorno o mais breve possível para que possamos organizar todos os detalhes necessários. A relevância dos temas a serem discutidos para cada área certamente contribuirá para uma sessão produtiva. Até breve,Dominique Claude ]\n", @@ -161,7 +287,7 @@ " \n", "\n", "\n", - "Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia [number] de abril, às [number]:[number], nas instalações da [organization] Solutions , localizada na [location] , [number].Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:- Charlie (Secretária Executiva)- Dr. Florence (Literatura [misc]/[misc]/[misc])- [organization] Francis (Secretária do Prof. Dr. Maxime)- Remy (Assistente Acadêmica em Prática de [misc])- Cécile ( Assistente Acadêmico)- Dr. Claude ([misc]ofessor de [misc][organization] [misc])- DrClaude - Lang ( Substituição de Cadeira em Literatura [misc])- Claude (Didática do [misc]no)- Claude (Professora de Prática da Língua [misc])- Dr. Claude (Professora Tenure-Track em Literatura [misc])- Claude (Instrutora de Prática da Língua [misc])- Dr. Claude (Professor de [misc][location] da Fundação)- Ricardo Cosea[location] (Assistente Acadêmico em Prática da Língua [misc])- Prof. Dr[organization] Claude ([organization])- Claude Claude (Didática do [misc])- Claude [location] Claude (Professora de Prática da Língua [misc])- Claude (Secretária do Prof. Große)- Claude (Responsável pelo Catálogo de Cursos e Matrículas)- Claude -Claude ( Assistente Acadêmico em Prática da Língua [misc])- Dr. Claude (Instrutora de Prática da Língua [misc])- Claude (Assistente Acadêmica em Prática da Língua [misc])- Prof . Dr. Claude ([organization])Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários. Atenciosamente,Lino Silva\n", + "Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia [number] de abril, às [number]:[number], nas instalações da [organization] Solutions , localizada na [location] , [number].Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:- Charlie (Secretária Executiva)- Dr. Florence (Literatura [misc]/[misc]/[misc])- [organization] Francis (Secretária do Prof. Dr. Maxime)- Remy (Assistente Acadêmica em Prática de [misc])- Cécile ( Assistente Acadêmico)- Dr. Claude ([misc]ofessor de [misc][organization] [misc])- DrClaude - Lang ( Substituição de Cadeira em Literatura [misc])- Claude (Didática do [misc]no)- Claude (Professora de Prática da Língua [misc])- Dr. Claude (Professora Tenure-Track em Literatura [misc])- Claude (Instrutora de Prática da Língua [misc])- Dr. Claude (Professor de [misc][location] da Fundação)- Ricardo Cosea[location] (Assistente Acadêmico em Prática da Língua [misc])- Prof. Dr[organization] Elwys Maxime ([organization])- Claude Claude (Didática do [misc])- Claude [location] Claude (Professora de Prática da Língua [misc])- Claude (Secretária do Prof. Große)- Claude (Responsável pelo Catálogo de Cursos e Matrículas)- Claude -Claude ( Assistente Acadêmico em Prática da Língua [misc])- Dr. Claude (Instrutora de Prática da Língua [misc])- Claude (Assistente Acadêmica em Prática da Língua [misc])- Prof . Dr. Claude ([organization])Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários. Atenciosamente,Claude Silva\n", "\n", "\n", "\n", @@ -174,29 +300,25 @@ "\n", "Email 2\n", "Original Text:\n", - "
From : aitana.garcia@zohomail.eu
To : \"Alejandro Rodriguez\"< alejandro.rodriguez1@gmx.net>
Date : mié., 17 abr. 2024 17:24:41 +0200
Subject : Re: purismo

Muchas gracias!

Sent using Zoho Mail




---- El mié., 17 abr. 2024 17:22:49 +0200, Alejandro Rodriguez <alejandro.rodriguez1@gmx.net> escribió ----

Hola, aquí tienes el escaneo ;) Saludos, Aitana

\n", + " From : aitana.garcia@zohomail.euTo : \"Alejandro Rodriguez\"< alejandro.rodriguez1@gmx.net>Date : mié., 17 abr. 2024 17:24:41 +0200Subject : Re: purismoMuchas gracias!Sent using Zoho Mail---- El mié., 17 abr. 2024 17:22:49 +0200, Alejandro Rodriguez escribió ----Hola, aquí tienes el escaneo ;) Saludos, Aitana\n", "Pseudonymized Text:\n", " From : [email] : \"Claude\"< [email] : mié. , [number] abr. [number] [number]:[number]:[number] +[number]Subject : Re: purismoMuchas gracias!Sent using [organization] El mié. , [number] abr. [number] [number]:[number]:[number] +[number], Claude [email] escribió ----Hola, aquí tienes el escaneo ;) Saludos, Dominique\n", "Email 3\n", "Original Text:\n", - "
From : pierre.lefevre@myyahoo.com
To : \"Alejandro Rodriguez\"< alejandro.rodriguez1@gmx.net>,\"Aitana Garcia\"< aitana.garcia@zohomail.eu>
Date : mié., 17 abr. 2024 17:33:23 +0200
Subject : Re: ¡Voy el 24!

\n", - "

Salut Aitana,

Merci beaucoup pour l'invitation ! Je suis ravi d'apprendre que je pourrai vous rejoindre pour la réunion du 24 à 15h. Cela sera une excellente occasion de rencontrer l'équipe et de discuter des projets en cours.

N'hésite pas à me dire s'il y a des documents spécifiques que je devrais consulter avant la réunion ou si tu veux que je prépare quelque chose de particulier. Je suis tout à fait disposé à contribuer de manière constructive à notre discussion.

À très bientôt et encore merci de m'avoir inclus.

Bien cordialement,\n", - "Pierre



\n", - " \n", - "
\n", - "
\n", - " \n", - "
\n", - " Am Mittwoch, 17. April 2024 um 17:31:14 MESZ hat Aitana Garcia <aitana.garcia@zohomail.eu> Folgendes geschrieben:\n", - "
\n", - "

\n", - "

\n", - " \n", - " \n", - "
Ah, y me gustaría invitar a mi amigo Pierre, él está en el CC

Sent using Zoho Mail




---- El mié., 17 abr. 2024 17:27:12 +0200, Aitana Garcia <aitana.garcia@zohomail.eu> escribió ----

Hola Ale,

¡Todo bien por aquí! Solo pasaba a decirte que contarás conmigo el 24 a las 3 en la ofi. ¿Hay algo que deba llevar o algún tema en particular que quieras que cheque antes?

¡Nos vemos!\n", - "Aitana

Sent using Zoho Mail





\n", - "
\n", - "
\n", + " From : pierre.lefevre@myyahoo.comTo : \"Alejandro Rodriguez\"< alejandro.rodriguez1@gmx.net>,\"Aitana Garcia\"< aitana.garcia@zohomail.eu>Date : mié., 17 abr. 2024 17:33:23 +0200Subject : Re: ¡Voy el 24!\n", + "Salut Aitana,Merci beaucoup pour l'invitation ! Je suis ravi d'apprendre que je pourrai vous rejoindre pour la réunion du 24 à 15h. Cela sera une excellente occasion de rencontrer l'équipe et de discuter des projets en cours.N'hésite pas à me dire s'il y a des documents spécifiques que je devrais consulter avant la réunion ou si tu veux que je prépare quelque chose de particulier. Je suis tout à fait disposé à contribuer de manière constructive à notre discussion.À très bientôt et encore merci de m'avoir inclus.Bien cordialement,\n", + "Pierre\n", + "\n", + "\n", + "\n", + " Am Mittwoch, 17. April 2024 um 17:31:14 MESZ hat Aitana Garcia Folgendes geschrieben:\n", + " \n", + "\n", + "\n", + "Ah, y me gustaría invitar a mi amigo Pierre, él está en el CCSent using Zoho Mail---- El mié., 17 abr. 2024 17:27:12 +0200, Aitana Garcia escribió ----Hola Ale,¡Todo bien por aquí! Solo pasaba a decirte que contarás conmigo el 24 a las 3 en la ofi. ¿Hay algo que deba llevar o algún tema en particular que quieras que cheque antes?¡Nos vemos!\n", + "AitanaSent using Zoho Mail\n", + "\n", + "\n", "Pseudonymized Text:\n", " From : [email] : \" Claude\"< [email] Dominique\"< [email] >Date : mié. , [number] abr. [number] [number]:[number]:[number] +[number]Subject : Re: ¡Voy el [number]!\n", "Salut Claude,Merci beaucoup pour l'invitation ! Je suis ravi d'apprendre que je pourrai vous rejoindre pour la réunion du [number] à [number]h. Cela sera une excellente occasion de rencontrer l'équipe et de discuter des projets en cours. N'hésite pas à me dire s'il y a des documents spécifiques que je devrais consulter avant la réunion ou si tu veux que je prépare quelque chose de particulier. Je suis tout à fait disposé à contribuer de manière constructive à notre discussion. À très bientôt et encore merci de m'avoir inclus. Bien cordialement,\n", @@ -204,11 +326,11 @@ "\n", "\n", "\n", - " Am Mittwoch, [number] . April [number] um [number]:[number]:[number] [misc] hat Charlie [email] > Folgendes geschrieben:\n", + " Am Mittwoch, [number] . April [number] um [number]:[number]:[number] [misc] hat Claude Dominique [email] > Folgendes geschrieben:\n", " \n", "\n", "\n", - "Ah, y me gustaría invitar a mi amigo Florence, él está en el [organization] using [misc]---- El mié. , [number] abr. [number] [number]:[number]:[number] +[number], Charlie [email] escribió ----Hola Francis,¡Todo bien por aquí! Solo pasaba a decirte que contarás conmigo el [number] a las [number] en la ofi. ¿ Hay algo que deba llevar o algún tema en particular que quieras que cheque antes?¡Nos vemos!\n", + "Ah, y me gustaría invitar a mi amigo Florence, él está en el [organization] using [misc]---- El mié. , [number] abr. [number] [number]:[number]:[number] +[number], Claude Dominique [email] escribió ----Hola Francis,¡Todo bien por aquí! Solo pasaba a decirte que contarás conmigo el [number] a las [number] en la ofi. ¿ Hay algo que deba llevar o algún tema en particular que quieras que cheque antes?¡Nos vemos!\n", "ClaudeSent using [organization]\n", "\n", "\n" @@ -219,7 +341,7 @@ "# print results\n", "for idx, mail in df.iterrows():\n", " print(\"Email\", idx)\n", - " print(\"Original Text:\\n\", mail[\"content\"])\n", + " print(\"Original Text:\\n\", mail[\"html_text\"])\n", " print(\"Pseudonymized Text:\\n\", mail[\"pseudo_content\"])\t" ] }, From cba16075a4bb5e2ffcd666e7896856130cdbad36 Mon Sep 17 00:00:00 2001 From: Felix <65565033+fexfl@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:29:25 +0100 Subject: [PATCH 3/4] Adjusted test_pseudonymize_per --- mailcom/test/test_parse.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mailcom/test/test_parse.py b/mailcom/test/test_parse.py index fa586fb..82189c5 100644 --- a/mailcom/test/test_parse.py +++ b/mailcom/test/test_parse.py @@ -105,7 +105,8 @@ def test_get_sentences_with_punctuation(get_default_fr): def test_pseudonymize_per(get_default_fr): sentence = "Francois and Agathe are friends." nelist = ["Francois", "Agathe"] - pseudonymized_sentence = get_default_fr.pseudonymize_per(sentence, nelist) + get_default_fr.per_list = nelist + pseudonymized_sentence = get_default_fr.pseudonymize_per(sentence) assert "Francois" not in pseudonymized_sentence assert "Agathe" not in pseudonymized_sentence assert any( From 3dddb6f5893b871de6780ca893afeb274012c5f5 Mon Sep 17 00:00:00 2001 From: Felix <65565033+fexfl@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:45:21 +0100 Subject: [PATCH 4/4] Fixed overlapping --- notebook/demo.ipynb | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/notebook/demo.ipynb b/notebook/demo.ipynb index a7b0bc7..dac7bfe 100644 --- a/notebook/demo.ipynb +++ b/notebook/demo.ipynb @@ -50,27 +50,36 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# function for displaying the result using HTML\n", "def highlight_ne(text, per_list, org_list, loc_list, misc_list):\n", - " # highlight PER\n", + " # create a list of all entities with their positions\n", + " entities = []\n", " for loc in loc_list:\n", - " text = text.replace(loc, \"\" + loc + \"\")\n", + " entities.append((loc, \"green\"))\n", " for org in org_list:\n", - " text = text.replace(org, \"\" + org + \"\")\n", + " entities.append((org, \"blue\"))\n", " for misc in misc_list:\n", - " text = text.replace(misc, \"\" + misc + \"\")\n", + " entities.append((misc, \"yellow\"))\n", " for per in per_list:\n", - " text = text.replace(per, \"\" + per + \"\")\n", + " entities.append((per, \"red\"))\n", + " \n", + " # sort entities by their positions in the text in reverse order\n", + " entities.sort(key=lambda x: text.find(x[0]), reverse=True)\n", + " \n", + " # replace entities with highlighted spans\n", + " for entity, color in entities:\n", + " text = text.replace(entity, f\"{entity}\")\n", + " \n", " return text" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -110,21 +119,21 @@ "data": { "text/html": [ "\n", - "Olá Lino,Espero que este e-mail te encontre bem. Agradeço a confirmação de sua presença na reunião do dia 24 de abril às 15:00 na InnovaTech Solutions.Com relação à confirmação dos demais membros da equipe, irei verificar a disponibilidade de cada um e te retorno o mais breve possível para que possamos organizar todos os detalhes necessários. A relevância dos temas a serem discutidos para cada área certamente contribuirá para uma sessão produtiva.Até breve,[Alejandro Rodriguez]\n", - "InnovaTech Solutions S.L\n", + "Olá Lino,Espero que este e-mail te encontre bem. Agradeço a confirmação de sua presença na reunião do dia 24 de abril às 15:00 na InnovaTech Solutions.Com relação à confirmação dos demais membros da equipe, irei verificar a disponibilidade de cada um e te retorno o mais breve possível para que possamos organizar todos os detalhes necessários. A relevância dos temas a serem discutidos para cada área certamente contribuirá para uma sessão produtiva.Até breve,[Alejandro Rodriguez]\n", + "InnovaTech Solutions S.L\n", "\n", "\n", "\n", - " Am Mittwoch, 17. April 2024 um 17:30:19 MESZ hat lino.silva1 no.silva1@protonmail.com> Folgendes geschrieben:\n", + " Am Mittwoch, 17. April 2024 um 17:30:19 MESZ hat lino.silva1 <lino.silva1@protonmail.com> Folgendes geschrieben:\n", " \n", "\n", "\n", - "Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia 24 de abril, às 15:00, nas instalações da InnovaTech Solutions, localizada na Rua Principal, 123.Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:- Alessandra Acquarone (Secretária Executiva)- Dr. Giulia Agostini (Literatura Francesa/Italiana/Espanhola)- Meggi Altrock (Secretária do Prof. Dr. De Stefani)- Felicia Augusto-Hönicke (Assistente Acadêmica em Prática de Língua Portuguesa)- Ronny Beckert (Assistente Acadêmico)- Dr. Gérald Béreiziat (Professor de Prática da Língua Francesa)- Dr. Stephanie Béreiziat-Lang (Substituição de Cadeira em Literatura Espanhola)- Ursula Bergerfurth (Didática do Italiano)- Maylis Bonetti (Professora de Prática da Língua Francesa)- Dr. Sarah Burnautzki (Professora Tenure-Track em Literatura Francesa/Espanhola)- Constanza Cárdenas (Instrutora de Prática da Língua Espanhola)- Dr. Romanita Constantinescu (Professor de Romeno da Fundação)- Ricardo Coseano (Assistente Acadêmico em Prática da Língua Espanhola)- Prof. Dr. Elwys De Stefani (Cadeira de Linguística Italiana/Francesa)- Brigitta Dierkes (Didática do Espanhol)- Annachiara Di Taranto (Professora de Prática da Língua Italiana)- Agathe Duperron (Secretária do Prof. Große)- Madeleine Eppel (Responsável pelo Catálogo de Cursos e Matrículas)- José Esplá-Oliver (Assistente Acadêmico em Prática da Língua Espanhola)- Dr. Carmela Fischer Díaz (Instrutora de Prática da Língua Espanhola)- Sandrine Flores (Assistente Acadêmica em Prática da Língua Francesa)- Prof. Dr. Robert Folger (Cadeira de Literatura Espanhola)Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários.Atenciosamente,Lino Silva\n", + "Espero que este e-mail o encontre bem. Escrevo para confirmar minha presença na reunião agendada para o dia 24 de abril, às 15:00, nas instalações da InnovaTech Solutions, localizada na Rua Principal, 123.Agradeceria se pudesse confirmar a participação das seguintes pessoas de nossa equipe, uma vez que os temas a serem discutidos são relevantes para suas respectivas áreas:- Alessandra Acquarone (Secretária Executiva)- Dr. Giulia Agostini (Literatura Francesa/Italiana/Espanhola)- Meggi Altrock (Secretária do Prof. Dr. De Stefani)- Felicia Augusto-Hönicke (Assistente Acadêmica em Prática de Língua Portuguesa)- Ronny Beckert (Assistente Acadêmico)- Dr. Gérald Béreiziat (Professor de Prática da Língua Francesa)- Dr. Stephanie Béreiziat-Lang (Substituição de Cadeira em Literatura Espanhola)- Ursula Bergerfurth (Didática do Italiano)- Maylis Bonetti (Professora de Prática da Língua Francesa)- Dr. Sarah Burnautzki (Professora Tenure-Track em Literatura Francesa/Espanhola)- Constanza Cárdenas (Instrutora de Prática da Língua Espanhola)- Dr. Romanita Constantinescu (Professor de Romeno da Fundação)- Ricardo Coseano (Assistente Acadêmico em Prática da Língua Espanhola)- Prof. Dr. Elwys De Stefani (Cadeira de Linguística Italiana/Francesa)- Brigitta Dierkes (Didática do Espanhol)- Annachiara Di Taranto (Professora de Prática da Língua Italiana)- Agathe Duperron (Secretária do Prof. Große)- Madeleine Eppel (Responsável pelo Catálogo de Cursos e Matrículas)- José Esplá-Oliver (Assistente Acadêmico em Prática da Língua Espanhola)- Dr. Carmela Fischer Díaz (Instrutora de Prática da Língua Espanhola)- Sandrine Flores (Assistente Acadêmica em Prática da Língua Francesa)- Prof. Dr. Robert Folger (Cadeira de Literatura Espanhola)Fico no aguardo da sua confirmação para prosseguir com os preparativos necessários.Atenciosamente,Lino Silva\n", "\n", "\n", "\n", "\n", - " Sicher versendet mit Proton Mail.\n", + " Sicher versendet mit Proton Mail.\n", " \n", "\n", "\n",