Analysieren Sie den Text einer großen Anzahl von E-Mails

Ich suche nach serverseitiger Software, um eine sehr große Anzahl von E-Mails zu analysieren und die E-Mail-Signatur zu extrahieren. Ganz konkret möchte ich den Text einer E-Mail-Nachricht eingeben, die Signatur identifizieren und die Daten extrahieren.

Das wichtigste Merkmal ist die gut geschriebene Mustererkennung. Tatsächlich wäre ich mit einem Textparser zufrieden, da ich bequem nur den Körper als große Zeichenfolge bereitstelle.

Die Sprache ist mir egal.

Antworten (1)

Sie können dies sehr einfach tun, entweder client- oder serverseitig, indem Sie einige Python -Skripte verwenden .

Python, das nur die eingebauten Bibliotheken verwendet, kann:

  • Verbinden Sie sich als E-Mail-Client , um die E-Mails herunterzuladen,
  • Durchsuchen Sie jeden E-Mail-Text, um eine beliebige Textsignatur zu erhalten (gültige Signaturen beginnen alle mit einer Zeile mit nur zwei Bindestrichen, gefolgt von einer Zeile „--\n“, aber es gibt einige andere Formate, nach denen gesucht werden muss), die Python - Bibliothek für reguläre Ausdrücke ist besonders geeignet gut dafür .
  • Python kann auch Bild- oder HTML-basierte Signaturen problemlos verarbeiten, indem es nur die Standardbibliotheken verwendet.
  • vCard - Signaturen ( RFC 2426 ) können mit der vcard-Plug- in- Bibliothek verarbeitet werden,
  • Auf vielen Servern, insbesondere auf Linux-basierten, ist Python bereits installiert. Wenn Sie also Zugriff auf den Server haben, können Sie dies auch mit Python tun, aber wie Sie auf den E-Mail-Inhalt auf dem Server zugreifen, hängt davon ab, welchen Mailserver Sie ausführen.

Leider gibt es eine Reihe von uneinheitlichen Möglichkeiten, eine Signatur zu bezeichnen: Meine Signatur, wie sie von Thunderbird, Outlook usw. erstellt wird:

-- 
Steve (Gadget) Barnes
Any opinions in this message are my personal opinions and do not reflect those of my employer.

Beachten Sie die Zeile, die nur Bindestrich, Bindestrich, Leerzeichen enthält - dies ist der "Standard", aber einige andere Clients hängen Dateien, Bilder, HTML-Haufen usw. an. Ebenso die Konventionen bezüglich des oberen, unteren oder verschachtelten Postens neuer Inhalte in einer E-Mail Austausch sind weitgehend eine Sache der Konvention und die Markierung von zuvor empfangenem Text durch Einrücken oder durch Präfixieren jeder Zeile der vorherigen Nachricht mit > oder einigen anderen Zeichen ist wiederum sowohl vom E-Mail-Client als auch häufig von den Einstellungen des Benutzers abhängig.

Ich würde vorschlagen, eine inkrementelle Suchmethode zu verwenden, bei der Sie möglicherweise versuchen, nach Folgendem zu suchen:

  1. -- \ngefolgt von einer oder mehreren nicht leeren Zeilen. f1=re.compile(r'^-- \n(.+)', flags=re.MULTILINE+re.DOTALL)sollte gut tun.
  2. Wenn dies nicht gefunden wird, können Sie nach Zeilen suchen, die mit Tel ephone : , Web site : , Mobile : usw. beginnen , und nach den zusammenhängenden, dh ohne Leerzeilen , Zeilen darüber suchen .
  3. Sie können auch nach Textabschnitten suchen, die mit „Mit freundlichen Grüßen“, „Mit freundlichen Grüßen“, „Mit freundlichen Grüßen“ und anderen Danksagungen beginnen (eine Liste befindet sich im Link).

Während Sie an der Entwicklung Ihres Satzes regulärer Ausdrücke arbeiten, kann ich Ihnen dringend empfehlen, einen Python-Regex-Checker wie pythex zu verwenden .

Natürlich wird dies durch die Möglichkeit erschwert, eine vCard, einen Scan einer Unterschrift usw. anzuhängen, und durch die Tatsache, dass jede gegebene Nachricht reiner Text, HTML oder beides sein kann und am ärgerlichsten manche Leute nur ein Wort senden, oder andere, Dokument als E-Mail .

Soweit ich weiß, gibt es keine aktuelle Bibliothek, die alle diese Möglichkeiten abdeckt, möglicherweise könnten Sie rechtzeitig eine beisteuern.

Danke dafür. Wirklich klar. Können Sie bitte ein wenig erläutern, was Sie mit "--\n" meinen, vielleicht, wenn Sie ein Beispiel haben. Wenn Sie sagen, dass es andere Formate gibt, nach denen gesucht werden muss, gibt es irgendwo eine umfassende Liste oder eine Python-Bibliothek, die bereits viele dieser Formate implementiert hat.
@Mika Ich habe die obige Antwort erweitert, um einige Beispiele zu geben.