如何从pdf中提取电子邮件

how to extract email from pdf

我正在尝试使用 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

更新: 如果电子邮件以大写字母开头,我如何编辑我的正则表达式以忽略电子邮件后面的内容

根据您最后的评论来匹配您正在匹配的电子邮件,直到它在 @ 之后找到一个大写字母,您可以使用此正则表达式:

[\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

试试这个:\w+(?:[.-]\w+)*@\w+(?:[.-]\w+)+[.-][a-z_0-9]+(?=[A-Z]|(?!=[.-])\b)

只要电子邮件的最后部分是小写,它就应该可以工作。它将匹配,直到后面跟着一个大写字母或单词边界。

此外,正则表达式中的破折号和点应该更准确,从而处理不应该有效的内容,例如 a-.@foo--a

你有一个演示here