PDF矿工 - 如何提取字体大小?
我很好奇,能不能用pdfminer这个工具来提取字体大小。我觉得这对区分不同的部分会很有帮助。我知道下面有讨论,但我还是想知道用pdfminer是否可行。
pdfminer的文档上说这是可能的,http://www.unixuser.org/~euske/python/pdfminer/
但是当我在命令行输入以下内容时,我只得到一个纯文本文件。我没有看到任何字体信息。
pdf2txt.py -o output.html samples/CentolaCV.pdf
例如...
2008-13 Assistant Professor, Sloan School of Management, M.I.T.
2006-08 Robert Wood Johnson Scholar in Health Policy, Harvard University
2001-02 Visiting Scholar, The Brookings Institution
2 个回答
5
这个任务让我困惑了很久。除了提取字体信息,我还想在一个Python脚本中运行这段代码。
不过,今天我终于解决了这个问题。下面我写了一个脚本,它从命令行调用了pdf2txt.py
这个脚本,然后从解析后的PDF和新创建的HTML文件中提取字体信息。
import os
pathToScript = r'path\to\script\pdf2txt.py'
pathPDFinput = os.path.join(path\to\file, 'test.pdf')
pathHTMLoutput = os.path.join(path\to\file, 'test.html')
# call the pdf2txt.py from the command line
os.system('python {} -o {} -S {} -t html'.format(pathToScript, pathHTMLoutput, pathPDFinput))
提取每个HTML标签的字体大小:
# credits to akash karothiya:
# https://stackoverflow.com/questions/39012739/need-to-extract-all-the-font-sizes-and-the-text-using-beautifulsoup/39015419#39015419
import re
import pandas as pd
from bs4 import BeautifulSoup
# open the html file
html = open(pathHTMLoutput, 'r')
soup = BeautifulSoup(html)
font_spans = [data for data in soup.select('span') if 'font-size' in str(data)]
output = []
for span in font_spans:
fonts_size = re.search(r'(?is)(font-size:)(.*?)(px)', str(span.get('style'))).group(2)
fonts_family = re.search(r'(?is)(font-family:)(.*?)(;)', str(span.get('style'))).group(2)
# split fonts_family into fonts-type and fonts-style
try:
fonts_type = fonts_family.strip().split(',')[0]
fonts_style = fonts_family.strip().split(',')[1]
except IndexError:
fonts_type = fonts_family.strip()
fonts_style = None
output.append(
(str(i.text).strip(), fonts_size.strip(), fonts_type, fonts_style)
)
# create dataframe
df = pd.DataFrame(output, columns = ['text', 'fonts-size', 'fonts-type', 'fonts-style'])
5
试着用 -t
这个标志来指定文件输出类型:
pdf2txt.py -o output.html -t html samples/CentolaCV.pdf
这样应该会生成一个包含字体样式(比如字体和字号)的html文件。
编辑:其实,看起来输出文件的后缀名也可以在没有 -t
标志的情况下指定输出文件类型。你能分享一下你想提取字体样式的pdf文件链接吗?