PDF解析:使用pdfminer和pandas

时间:2017-08-14 21:59:53

标签: python pandas pdf pdfminer

我正在尝试将pdf文件解析为csv格式。在pdf中,有一个没有框架的表,因此建议here的方法不起作用。我的想法是使用pdfminer分析pdf的布局,找到所有文本行,并匹配每个文本行的bbox位置以重建表。

到目前为止,我已经通过比较每个文本行对象的x0坐标成功地将文本行分类为“左”和“右”列,并且我将基于它们的y0坐标匹配左右行。当我试图将每行的内容放入pandas DataFrame时,我得到一个TypeErrorL无法连接非NDFrame对象。请帮忙。

我的代码如下:

testfile = 'file location'
page_layouts = extract_layout_by_page(testfile)
l_lines = []
r_lines = []
for elem in page_layouts[0]:
    if isinstance(elem, pdfminer.layout.LTTextBoxHorizontal):
       for l in elem:
           (x0,y0,x1,y1) = l.bbox
           if x0 <= 65.35 and x0 >=65.33:
               l_lines.append(l)
           elif x0 <= 280.1 and x0 >= 279.9:
               r_lines.append(l)

csv = pd.DataFrame()
csv['l'] = 0
csv['r'] = 0

for i in r_lines:
    x = i.get_text().encode('ascii','ignore')
    csv['r'].append(x) 

提前谢谢。

1 个答案:

答案 0 :(得分:0)

虽然很旧,但也许会对某人有所帮助。我猜想您的错误是在数据框中添加了文本。您应该将此文本放在一系列中。 您正在执行类似以下操作:

l=[]
for i in r_lines:
    x = i.get_text().encode('ascii','ignore')
    l.append(x) 
df=pd.DataFrame()

#if you want to append vertically (adding a column):
df.append(l)
#if you want to append horizontally (adding a row):
s=pd.Series(l)
s.name ("Series") #you may custom format this to create a new name for each row added, with a counter for example. Giving a name is necessary when the series is appended to the df, else it raises a TypeError (unless you use ignore_index = True
df.append(s)