【问题标题】:Extracting email address, first name and last name from multiple PDF files within a folder从文件夹内的多个 PDF 文件中提取电子邮件地址、名字和姓氏
【发布时间】:2022-01-09 19:25:00
【问题描述】:

我正在尝试从文件夹中的所有 PDF 文件中提取以下信息,PDF 文件是 CV 的:工作项目的电子邮件地址、名字、姓氏。

我已经成功地使用此代码提取了电子邮件地址:

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 subprocess
from subprocess import call
import os

import re

working_directory = './folder'

file_list = []   # define file_list to save all dxf files
email_list = {}   # define file_list to save all dxf files
for subdir, dirs, files in os.walk(working_directory):
    for file in files:
        if file.endswith('.pdf'):
            file_list.append(file)
            
for input_file in file_list:
    
    pagenums = set()
    
    output = StringIO()
    
    manager = PDFResourceManager()
    
    converter = TextConverter(manager, output, laparams=LAParams())
    
    interpreter = PDFPageInterpreter(manager, converter)
    
    infile = open('./folder/' + input_file, '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\.-]+@[a-z0-9\.-]+', text)
    
    try:
        email = match.group(0)
    except AttributeError:
        email = match
        
    if email is None:
        pass
    else:
        email_list.update({input_file: email})
        print(email_list[input_file])
    
email_list

但是在提取名字和姓氏时遇到问题,我们将不胜感激!

【问题讨论】:

  • 我认为最好指定您要处理的数据类型。
  • 感谢您的反馈,已添加!
  • 如果您认为所有 PDF 都是以相同的方式创建的,那您就错了。如果您正在处理由许多应用程序创建的 PDF,则确实如此。我可以向您保证,我可以找到您无法处理的文件,因此您永远找不到完整的解决方案。

标签: python pdf text-extraction pdfminer


【解决方案1】:

您可以找到电子邮件信息,因为它背后有逻辑

match = re.search(r'[\w\.-]+@[a-z0-9\.-]+', text)

但您还必须找出一个逻辑来找出您的 PDF 文件的名字和姓氏。

例如Dear, 之后的特定字段

【讨论】:

  • 感谢您的回复,我正在寻找一种从 1 个 CV 中产生 2 个或最好是 3 个变量的方法,这就是我遇到的问题,我想我想出了一个逻辑来找到姓名。所以输出是例如:电子邮件:asdf@gmail.com,名字:John,姓氏:Doe。我对编程很陌生,所以可能有一个对更有经验的人来说是显而易见的答案,但不幸的是我无法弄清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多