我目前正在分析一组PDF文件。我想知道有多少PDF文件属于这三个类别:
这是很容易识别图像仅PDF在我的领域,因为每个PDF包含文本。如果我不能提取任何文本,它只是图像。但我怎么知道它是“只是”可搜索的PDF,还是数字创建的PDF呢?
顺便说一句,它并不像我看到的扫描文档那样简单,生产者字段说的是"Microsoft“。
注意:作为一个人,这很容易。我只是放大短信。如果我看到像素,这是“只是”搜索。
下面是3个用于测试解决方案的PDF文件示例:
我试过/想过的
发布于 2020-08-20 14:47:52
使用PyMuPDF,您可以很容易地删除@ypnos建议所需的所有文本。
作为另一种选择,使用PyMuPDF,您还可以检查文本是否隐藏在PDF中。在PDF的相关“迷你语言”中,这是由命令3 Tr (“文本呈现模式”,例如,参见1-7.pdf的402页)触发的。因此,如果所有文本都受此命令的影响,则不会呈现任何文本--允许得出“这是一个OCR‘’ed页面”的结论。
发布于 2021-06-11 14:21:35
在这个解决方案中,您不必渲染pdf,所以我猜它会更快。基本上,我修改的答案使用了文本覆盖的pdf区域的百分比来确定它是文本文档还是扫描文档(图像)。
我添加了一个类似的推理,计算图像覆盖的总面积,以计算图像覆盖的百分比。如果它大部分是由图像覆盖,您可以假设它是扫描文档。您可以移动阈值以适应您的文档集合。
我还添加了一页一页的检查逻辑。这是因为至少在我所拥有的文档集合中,有些文档可能有一个数字创建的第一页,而其余的则被扫描。
修改后的代码:
import fitz # pip install PyMuPDF
def page_type(page):
page_area = abs(page.rect) # Total page area
img_area = 0.0
for block in page.getText("RAWDICT")["blocks"]:
if block["type"] == 1: # Type=1 are images
bbox=block["bbox"]
img_area += (bbox[2]-bbox[0])*(bbox[3]-bbox[1]) # width*height
img_perc = img_area / page_area
print("Image area proportion: " + str(img_perc))
text_area = 0.0
for b in page.getTextBlocks():
r = fitz.Rect(b[:4]) # Rectangle where block text appears
text_area = text_area + abs(r)
text_perc = text_area / page_area
print("Text area proportion: " + str(text_perc))
if text_perc < 0.01: #No text = Scanned
page_type = "Scanned"
elif img_perc > .8: #Has text but very large images = Searchable
page_type = "Searchable text"
else:
page_type = "Digitally created"
return page_type
doc = fitz.open(pdffilepath)
for page in doc: #Iterate through pages to find different types
print(page_type(page))发布于 2020-10-14 14:50:09
你可以通过bash脚本来完成。
#!/bin/bash
echo "shellscript $0"
ls --color --group-directories-first
read -p "Is it OK to use this shellscript in this directory? (y/N) " ans
if [ "$ans" != "y" ]
then
exit
fi
mkdir -p scanned
mkdir -p text
mkdir -p "s-and-t"
for file in *.pdf
do
grep -aq '/Image/' "$file"
if [ $? -eq 0 ]
then
image=true
else
image=false
fi
grep -aq '/Text' "$file"
if [ $? -eq 0 ]
then
text=true
else
text=false
fi
if $image && $text
then
mv "$file" "s-and-t"
elif $image
then
mv "$file" "scanned"
elif $text
then
mv "$file" "text"
else
echo "$file undecided"
fi
done 谢谢
https://stackoverflow.com/questions/63494812
复制相似问题