python-3.x - PDFMiner:如何仅提取正文
问题描述
我使用以下代码将 PDF 转换为文本文件。但是,我只对文档的正文感兴趣,没有数字、没有页码、没有表格、没有标题、没有公式等。
但它给了我一堆文本,其中一些是从表格或公式中提取的短行。我希望用户可以阅读生成的文本,而无需在文本模式下显示的内容。
另一个问题是它把句子分成多行,所以我会放宽句子的界限。我想有完整的句子没有中断。
我玩了一些选项,例如“all_text = False”,但没有成功。
import sys
from tqdm import tqdm
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
import io
def pdfparser(pdf_file):
fp = open(pdf_file, 'rb')
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
laparams.all_texts = False
laparams.detect_vertical = False
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
# Create a PDF interpreter object.
interpreter = PDFPageInterpreter(rsrcmgr, device)
# Process each page contained in the document.
password = ""
maxpages = 3
caching = True
pagenos=set()
imagewriter = None
for page in tqdm(PDFPage.get_pages(fp)):
interpreter.process_page(page)
text = retstr.getvalue()
text = text.replace("\\n","\n")
return text
if __name__ == '__main__':
text = pdfparser(sys.argv[1])
print(text)
解决方案
通常,这在 PDF 中是无法直接实现的。
与 docbook、markdown 和 restructuredtext 等不同,PDF 文件不包含有关文档内容的语义信息。
也就是说,内容没有被标记为eq“图像”、“公式”、“页眉”、“页脚”、“章节标题”、“正文”等。
因此,您将不得不尝试从文本中的线索重建这些语义信息。不幸的是,这是否可能取决于文档。
例如,如果文档的结构使得页眉和页脚与正文明确分开,您可以从字符串的起始位置推断它是否是页眉、页脚或正文的一部分。
例如,字体系列和大小可能使您能够区分正文和章节或章节标题以及图像或表格标题。但这是假设这些特征得到一致应用。
推荐阅读
- r - “无法分配大小向量......”即使 memory.limit() 和 memory.size() 更高,也会出现错误
- html - 避免 html 选择值更改模糊
- python - Python 和线程:为什么在锁定区域之外提取计算会加速代码?
- android - 设置“数字”并输入禁止字符时,EditText 隐藏错误消息
- reporting-services - 基于多参数的SSRS填充颜色表达式
- database - Kubernetes 持久化卷:主机路径与本地和数据持久化
- r - 如何使用闪亮的highcharter为不同的输入变量制作交互式图表
- javascript - JavaScript 中这个简写的名称是什么?
- c++ - 在多线程 C++ 服务器中弹出
- c++ - wxWidgets 内存管理标准实践