как извлечь письмо из PDF - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь извлечь письмо из резюме с помощью pdfminer и регулярных выражений

from io import StringIO
from pdfminer3.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer3.converter import TextConverter
from pdfminer3.layout import LAParams
from pdfminer3.pdfpage import PDFPage
import re

def get_cv_email(self, cv_path):
    pagenums = set()
    output = StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)
    infile = open(cv_path, 'rb')
    for page in PDFPage.get_pages(infile, pagenums):
        interpreter.process_page(page)
    infile.close()
    converter.close()
    text = output.getvalue()
    output.close()
    match = re.search(r'[\w\.-]+@[\w\.-]+', text)
    email = match.group(0)
    return email

Письмо успешно извлечено для большинства резюме, но оно не всегда работает правильно

Пример: jayantanathcdh@gmail.comEducationalQualification

ОБНОВЛЕНИЕ: Как я могу отредактировать свое регулярное выражение, чтобы игнорировать то, что будет после сообщения, если оно начинается с заглавной буквы

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Попробуйте с этим: \w+(?:[.-]\w+)*@\w+(?:[.-]\w+)+[.-][a-z_0-9]+(?=[A-Z]|(?!=[.-])\b)

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

Кроме того, регулярное выражение должно быть более точным с тире и точками и, таким образом, заботиться о вещах, которые не должны быть действительными, как a-.@foo--a и т.д.

У вас есть демо здесь

1 голос
/ 13 марта 2019

На основании вашего последнего комментария, совпадающего с электронным письмом, которое вы соответствовали, пока оно не находит заглавную букву после @, вы можете использовать это регулярное выражение:

[\w\.-]+@[a-z0-9\.-]+

С примером:

import re
text = "jayantanathcdh@gmail.comEducationalQualification"
match = re.search(r'[\w\.-]+@[a-z0-9\.-]+', text)
email = match.group(0)

print(email)
#jayantanathcdh@gmail.com
...