下面我使用的代码是帮助我比较文件,并找到作为CSV文件的差异。
但是,我在CSV文件中得到的结果,是从两个文件中提取的随机行集,或者不是在文档中的顺序。我该如何解决这个问题?有没有更好的方法来比较PDF?
`from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
from itertools import chain
import pandas as pd
from time import sleep
from tqdm import tqdm
# List of pdf files to process
pdf_files = ['file1.pdf', 'file2.pdf']
# Create a list to store the text from each PDF
pdf1_text = []
pdf2_text = []
# Iterate through each pdf file
for pdf_file in tqdm(pdf_files):
# Open the pdf file
with open(pdf_file, 'rb') as pdf_now:
# Extract text using pdfminer
rsrcmgr = PDFResourceManager()
sio = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, sio, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.get_pages(pdf_now, set()):
interpreter.process_page(page)
text = sio.getvalue()
text = text.split('\n')
if pdf_file == pdf_files[0]:
pdf1_text.append(text)
else:
pdf2_text.append(text)
device.close()
sio.close()
sleep(20)
pdf1_text = list(chain.from_iterable(pdf1_text))
pdf2_text = list(chain.from_iterable(pdf2_text))
differences = set(pdf1_text).symmetric_difference(pdf2_text)
## Create a new dataframe to hold the differences
differences_df = pd.DataFrame(columns=['pdf1_text', 'pdf2_text'])
# Iterate through the differences and add them to the dataframe
for difference in differences:
# Create a new row in the dataframe with the difference from pdf1 and pdf2
differences_df = differences_df.append({'pdf1_text': difference if difference in pdf1_text else '',
'pdf2_text': difference if difference in pdf2_text else ''}, ignore_index=True)
# Write the dataframe to an excel sheet
differences_df = differences_df.applymap(lambda x: x.encode('unicode_escape').decode('utf-8') if isinstance(x, str) else x)
differences_df.to_excel('differences.xlsx', index=False, engine='openpyxl')`
2条答案
按热度按时间fwzugrvs1#
下面的代码段生成文档中排序文本行的列表。
请注意,PyMuPDF包支持PDF和六种其他文档类型(XPS、EPUB、MOBI等),所以相同的代码可以处理这些类型中的任何一种。
ozxc1zmp2#
两个相同大小的pdf文件即使在屏幕或打印机上的内容相同,也会有不同的表现,原因是无限的。同样,两个不同的文件可以产生100%相同的墨水或像素布局。因此,比较可能是有问题的。
这里两个文件应该输出相同的文本:-
但另一个副本有一个小的变化
对于两个PDF文件的受控比较,MuPDF或其他一些库适合于定制查询,然而,如果你需要的是最快的编号页面(或所有文本)的文本比较,那么写一行命令用于pdf到文本提取,另一行命令用于文件比较会更快。然而,在这个故意说明陷阱的例子中,第一个文件需要调整才能符合要求。
使用原始比较没有多大用处,因为PDF通常不同,除非实际上相同
与众不同
所以在修正第一个文件之后
相同
然而,一切并非如表面所见:
放置样式和比例不同
因此,测试两个文件差异的最有效方法是:
对结果的一部分使用文本比较,对第二个意见使用两个文件的图形呈现。