Как я могу разобрать текст электронной почты для таких компонентов, как <salutation><body><signature>так далее? - PullRequest
5 голосов
/ 17 мая 2011

Я пишу приложение, которое анализирует электронную почту, и это сэкономило бы мне кучу времени, если бы я мог использовать библиотеку python, которая бы разбирала текст электронной почты по именованным компонентам, таким как <salutation><body><signature><reply text> и т. Д.

Например, следующий текст "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 ..." будет проанализирован как

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: ..."

Я знаю, что нет идеального решения для такого рода проблем, но даже библиотека, которая делает хорошее приближение, поможет. Где я могу найти один?

Ответы [ 4 ]

5 голосов
/ 18 мая 2011

https://github.com/Trindaz/EFZP

Это обеспечивает функциональность, изложенную в исходном вопросе, плюс справедливое распознавание зон электронной почты, поскольку они обычно появляются в электронной почте, написанной носителями английского языка из распространенных почтовых клиентов, таких как Outlook и Gmail.

3 голосов
/ 17 мая 2011

Если вы оцениваете каждую строку на основе типов слов, которые она содержит, вы можете получить довольно хорошее указание.

EG Строка приветствия со словами в начале - это приветствие (также приветствия могут содержать фразы, которые относятся кк прошедшему времени, например, было приятно видеть вас в прошлый раз)

Тело, как правило, будет содержать такие слова, как «фильм, концерт» и т. д. Оно также будет содержать глаголы (идти, бегать, ходить и т. д.)а также знаки вопроса и предложения (например, хотим ли мы, можем ли мы, предпочитаем ..).Проверьте http://nodebox.net/code/index.php/Linguistics#verb_conjugation http://ogden.basic -english.org / http://osteele.com/projects/pywordnet/

подпись будет содержать закрывающие слова.

Если вы найдете источник данных, который имеет сообщения структуры, которую выЯ хочу, чтобы вы могли провести некоторый анализ частоты, чтобы увидеть, как часто каждое слово встречается в каждом разделе.

Каждое слово получит оценку [оценка приветствия, оценка тела, оценка подписи и т. д.], например, приветствие может произойти 900 раз заПриветствие, 10 раз в теле и 3 раза в подписи.это означает, что привет получит [900, 10, 3, ..] приветствия могут быть назначены [10,3100, ..]

, теперь у вас будет большой список из 500 000 слов.слова, которые не имеют большого диапазона, бесполезны.например, улов может иметь [100,101,80 ..] = диапазон 21 (было бы хорошо догнать, хочу пойти поймать рыбу, поймать вас позже).улов может происходить где угодно.

Теперь вы можете уменьшить количество слов примерно до 10000

теперь для каждой строки, дать строке также оценку в виде [оценка приветствия, оценка тела,оценка подписи, ..]

эта оценка рассчитывается путем сложения векторной оценки каждого слова.

например, предложение "привет, ура за то, что дали мне свой номер" может быть: [900, 10, 3, ..] + [10,3100, ..] + .. + .. + = [900 + 10 + .., 10 + 3 + .., 3 + 100, ..] = [1023,900,500, ..] скажем

тогда, так как наибольшее число находится в начале в позиции оценки приветствия, это предложение является приветствием.

тогда, если вам нужно было набрать одну из ваших строк, чтобы увидетьв каком компоненте должна быть строка, для каждого слова, которое вы добавляете на его счет

Удачи, всегда есть компромисс между сложностью вычисления и точностью.Если вы сможете найти хороший набор слов и составить хорошую модель для расчета, это поможет.

1 голос
/ 17 мая 2011

Первый подход, который приходит на ум (не обязательно лучший ...), должен начинаться с использования split.вот немного кода и прочее

linearray = emailtext.split ('\ n') теперь у вас есть массив строк, каждая из которых похожа на абзац или что угодно

, поэтому linearray [0] будет содержать приветствие

, решение о том, где начинается текст ответа, немного сложнее, я заметил, что перед ним стоит двойная новая строка, так что, возможно, сделаю поиск этого сзади и надеюсь, что последнийуказывает на начало текста ответа.

Или сохраните несколько подписных слов, которые вы можете ожидать, и найдите их с фронта, такие как приветствия, пожелания и все остальное.

Как только вы выясните, гдеподпись - остальное, остальное - просто

надеюсь, это помогло

0 голосов
/ 29 мая 2018

Я разработал довольно дешевый API для этого, чтобы на самом деле анализировать контактные данные по сигнатурам писем и цепочек писем.Это называется SigParser.Вы можете увидеть документы Swagger здесь для этого.

По сути, вы отправляете ему заголовок 'x-api-key' с таким же телом JSON, и он анализирует все контакты в цепочке ответов электронной почты.

{
  "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)"
}
...