我正在尝试将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)
提前谢谢。
答案 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)