Question

J'écris une application qui analyse les e-mails et cela me ferait gagner beaucoup de temps si je pouvais utiliser une bibliothèque Python qui analyserait le texte de messagerie dans des composants nommés comme <salutation><body><signature><reply text> etc.

Par exemple, le texte suivant "Hi Dave,\nLets meet up this Tuesday\nCheers, Tom\n\nOn Sunday, 15 May 2011 at 5:02 PM, Dave Trindall wrote: Hey Tom,\nHow about we get together ..."serait analysé comme

Salutation: "Hi Dave,\n"
Body: "Lets meet up this Tuesday\n"
Signature: "Cheers, Tom\n\n"
Reply Text: "On Sunday, 15 May 2011 at 5:02 PM, Dave Trindal wrote: ..."

Je sais qu'il n'y a pas de solution parfaite pour ce type de problème, mais même une bibliothèque qui fait une bonne approximation aiderait. Où puis-je en trouver un?

Était-ce utile?

La solution

https://github.com/trindaz/efzp

Cela fournit des fonctionnalités posées dans la question initiale, ainsi que la reconnaissance équitable des zones de messagerie telles qu'elles apparaissent généralement dans les e-mails écrits par des conférenciers anglais natifs de clients de messagerie communs comme Outlook et Gmail.

Autres conseils

Si vous marquez chaque ligne en fonction des types de mots qu'il contient, vous pouvez obtenir une assez bonne indication.

Par exemple, une ligne avec des mots de salutation près du début est la salutation (les salutations peuvent également avoir des phrases qui se réfèrent au passé, par exemple, il était bon de vous voir la dernière fois)

Un corps contiendra généralement des mots tels que "film, concert", etc. Il contiendra également des verbes (allez à, courir, marcher, etc.) et les marques et les offres (par exemple, pouvons-nous, si nous préférons ..) . Vérifier http://nodebox.net/code/index.php/linguistics#verb_conjugationhttp://ogden.basic-english.org/http://osteele.com/projects/pywordnet/

La signature contiendra des mots de clôture.

Si vous trouvez une source de données qui a des messages de la structure que vous souhaitez, vous pouvez effectuer une analyse de fréquence pour voir à quelle fréquence chaque mot se produit dans chaque section.

Chaque mot obtiendrait un score [score de salut, score corporel, score de signature, ..] Par exemple, Hello pourrait se produire 900 fois dans la salutation, 10 fois dans le corps et 3 fois dans la signature. Cela signifie que bonjour serait attribué [900, 10, 3, ..] Les acclamations pourraient être attribuées [10,3,100, ..

Vous aurez maintenant une grande liste d'environ 500 000 mots. Les mots qui n'ont pas une large gamme ne sont pas utiles. Par exemple, la capture pourrait avoir [100,101,80 ..] = plage de 21 (c'était bon de rattraper, je veux aller attraper un poisson, vous attraper plus tard). une capture peut se produire n'importe où.

Vous pouvez maintenant réduire le nombre de mots à environ 10 000

Maintenant, pour chaque ligne, donnez également à la ligne un score de la forme [score de salut, score corporel, score de signature, ..

Ce score est calculé en ajoutant les scores vectoriels de chaque mot.

Par exemple, une phrase "bonjour bravo pour me donner votre numéro" pourrait être: [900, 10, 3, ..] + [10,3,100, ..] + .. + .. + = [900 + 10 + .., 10 + 3 + .., 3 + 100, ..] = [1023,900,500, ..] dire

Ensuite, parce que le plus grand nombre est au début de la position du score de salutation, cette phrase est une salutation.

Ensuite, si vous deviez marquer une de vos lignes pour voir dans quel composant la ligne doit être dans la ligne, pour chaque mot que vous ajouteriez sur son score

Bonne chance, il y a toujours un compromis entre la complexité de calcul et la précision. Si vous pouvez trouver un bon ensemble de mots et faire un bon modèle pour baser vos calculs, cela vous aidera.

La première approche qui me vient à l'esprit (pas nécessairement la meilleure ...) serait de commencer par utiliser Split. Voici un peu de code et de trucs

linearray = emailText.split (' n') Maintenant, vous avez un tableau de chaînes, chacune comme un paragraphe ou quoi que ce soit

Donc Linearray [0] contiendrait la salutation

Décider où le texte de réponse commence est un peu plus délicat, j'ai remarqué qu'il y a une double nouvelle ligne juste avant elle, alors peut-être faire une recherche de celle de l'arrière et j'espère que la dernière indique le début du texte de réponse.

Ou stockez des mots de signature auxquels vous pourriez vous attendre et rechercher ceux de l'avant, comme les acclamations, les salutations et quoi que ce soit d'autre.

Une fois que vous avez compris où la signature est le reste est le reste est facile

J'espère que cela a aidé

J'ai construit une API assez bon marché pour cela pour analyser les données de contact des signatures des e-mails et des chaînes de messagerie. Cela s'appelle SigParser. Vous pouvez voir les documents de fanfaronnade ici pour ça.

Fondamentalement, vous lui envoyez un en-tête «x-ap-key» avec un corps JSON comme ainsi et il analyse tous les contacts dans la chaîne de réponse d'un e-mail.

{
  "subject": "Thanks for meeting...",
  "from_address": "bgates@example.com",
  "from_name": "Bill Gates",
  "htmlbody": "<div>Hi, good seeing you the other day.</div><div>--</div><div>Bill Gates</div><div>Cell 777-444-8888</div><a href=\"https://www.linkedin.com/in/williamhgates/\">LinkedIn</a><a href=\"https://twitter.com/BillGates\">Twitter</a>",
  "plainbody": "Hi, good seeing you the other day. \r\n--\r\nBill Gates\r\nCell 777-444-8888",
  "date": "Mon, 28 May 2018 23:33:40 +0000 (UTC)"
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top