我有成千上万个需要从中提取数据的pdf文件。这是一个示例pdf。我想从示例pdf中提取此信息。
我愿意使用nodejs,python或任何其他有效方法。我对python和nodejs知之甚少。 我尝试将python与这段代码一起使用
import PyPDF2
try:
pdfFileObj = open('test.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageNumber = pdfReader.numPages
page = pdfReader.getPage(0)
print(pageNumber)
pagecontent = page.extractText()
print(pagecontent)
except Exception as e:
print(e)
但是我被困在如何查找采购历史上。从pdf中提取采购历史记录的最佳方法是什么?
答案 0 :(得分:1)
pdfplumber 是最好的选择。 [Reference]
安装
pip install pdfplumber
提取所有文本
import pdfplumber
path = 'path_to_pdf.pdf'
with pdfplumber.open(path) as pdf:
for page in pdf.pages:
print(page.extract_text())
答案 1 :(得分:0)
很久以前,我做了类似的事情来取消成绩。我发现最简单(不是很漂亮)的解决方案是将pdf转换为html,然后解析html。
为此,我使用了pdf2text / pdf2html(https://pypi.org/project/pdf-tools/)和html。
我还使用了编解码器,但不记得确切的原因。
一个简短而肮脏的摘要:
from lxml import html
import codecs
import os
# First convert the pdf to text/html
# You can skip this step if you already did it
os.system("pdf2txt -o file.html file.pdf")
# Open the file and read it
file = codecs.open("file.html", "r", "utf-8")
data = file.read()
# We know we're dealing with html, let's load it
html_file = html.fromstring(data)
# As it's an html object, we can use xpath to get the data we need
# In the following I get the text from <div><span>MY TEXT</span><div>
extracted_data = html_file.xpath('//div//span/text()')
# It returns an array of elements, let's process it
for elm in extracted_data:
# Do things
file.close()
只需检查pdf2text或pdf2html的结果,然后使用xpath即可轻松提取信息。
希望对您有帮助!
编辑:注释代码
EDIT2: 以下代码正在打印数据
# Assuming you're only giving the page 4 of your document
# os.system("pdf2html test-page4.pdf > test-page4.html")
from lxml import html
import codecs
import os
file = codecs.open("test-page4.html", "r", "utf-8")
data = file.read()
html_file = html.fromstring(data)
# I updated xpath to your need
extracted_data = html_file.xpath('//div//p//span/text()')
for elm in extracted_data:
line_elements = elm.split()
# Just observed that what you need starts with a number
if len(line_elements) > 0 and line_elements[0].isdigit():
print(line_elements)
file.close();
答案 2 :(得分:0)
好。我从opait.com帮助开发此商业产品。 我将您输入的PDF划分为如下几个区域:
还有您拥有的表:
大约2分钟后,我就可以从一个和1000个文档中提取它了。请注意,此图像是日志视图,并将该数据导出为CSV。所有蓝色的“链接”都是实际提取的数据,并实际链接回PDF,因此您可以查看从何处。输出可以是XML或JSON或其他格式。在该屏幕截图中看到的是日志视图,所有视图均为CSV格式(如果一个PDF在一个PDF中包含1000个这些文档,则所有视图都为CSV格式的一个主要属性,每个由记录ID链接的表的其他属性)。
同样,我会协助您开发此产品,但您可以要求完成。我提取了整个表格,但也提取了所有其他重要字段。
答案 3 :(得分:0)
PDFTron,我工作的公司拥有一个全自动的PDF到HTML输出解决方案。
您可以在此处在线尝试。 https://www.pdftron.com/pdf-tools/pdf-table-extraction
这是您提供的文件的HTML输出的屏幕截图。输出既包含HTML表,又包含两者之间的可重排文本内容。
输出为标准XML HTML,因此您可以轻松解析/处理HTML表。
答案 4 :(得分:0)
我为制作PDFTables的公司工作。 PDFTables API将帮助您解决此问题,并立即转换所有PDF。这是一个简单的基于Web的API,因此可以从任何编程语言中调用。您需要在PDFTables.com上创建一个帐户,然后使用以下示例语言之一的脚本:https://pdftables.com/pdf-to-excel-api。这是使用Python的示例:
import pdftables_api
import os
c = pdftables_api.Client('MY-API-KEY')
file_path = "C:\\Users\\MyName\\Documents\\PDFTablesCode\\"
for file in os.listdir(file_path):
if file.endswith(".pdf"):
c.xlsx(os.path.join(file_path,file), file+'.xlsx')
该脚本在文件夹中查找扩展名为“ .pdf”的所有文件,然后将每个文件转换为XLSX格式。您可以将格式更改为“ .csv”,“。html”或“ .xml”。前75页是免费的。
答案 5 :(得分:0)
这是 IntelliGet 中的四行脚本
{ start = IsSubstring("CAGE Contract Number",Line(-2));
end = IsEqual(0, Length(Line(1)));
{ start = 1;
output = Line(0);
}
}