我想将我的pdf文件转换为txt文件并使用pdfminer3k模块&但是,pdf2txt.py,我收到了一个错误。
pdf2txt.py -o file.txt -t tag file.pdf
这是我在cmd屏幕上的代码。
追踪(最近一次通话): 文件“C:\ Python36 \ lib \ site.py”,第67行,in 进口口 文件“C:\ Python36 \ lib \ os.py”,第409行 来自步行的收益(new_path,topdown,onerror,followlinks) ^ SyntaxError:语法无效
这是我收到的错误消息。 你能帮我解决这个问题吗?
答案 0 :(得分:0)
添加参考:大资源:
http://www.degeneratestate.org/posts/2016/Jun/15/extracting-tabular-data-from-pdfs/
-t标志是输出的类型。选项包括text,tag,xml和html。 Tag指的是为xml生成标记。在命令中用标记替换标记并尝试。
可选输入的顺序也很重要。
您还必须调用python,您的命令行确实不知道导入的含义,但您的某些环境似乎已经设置好了。我的例子是来自Anaconda3 \ Scripts目录的windows cmd。如果您使用juptyer笔记本或控制台,则应该可以使用.py
运行import pdf2txt。要设置您的环境,您需要附加os.path.append(yourpdfdirectory),否则将找不到file.pdf。
尝试python pdf2txt.py -t text -o file.txt file.pdf
或者如果你很勇敢......这是以编程方式进行的。 xml的问题在于如果要获取文本,xml树中的每个字符都以任意顺序返回。你可以让它工作,但你需要按字符构建字符串,这不是那么难,它只是逻辑上耗时。
fp = open(filesin,'rb')
parser = PDFParser(fp)
doc = PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize('')
rsrcmgr = PDFResourceManager(caching=False)
laparams = LAParams(all_texts=True)
laparams.boxes_flow = -0.2
laparams.paragraph_indent = 0.2
laparams.detect_vertical = False
#laparams.heuristic_word_margin = 0.03
laparams.word_margin = 0.2
laparams.line_margin = 0.3
outfp = open(filesin+".out.tag" ,'wb')
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
#process_pdf(rsrcmgr, device, pdfparse, pagenos,caching=c, check_extractable=True)
for p,page in enumerate(doc.get_pages()):
if p == 0: #temporary for page 1
interpreter.process_page(page)
layout = device.get_result()
alltextinbox = ''
#This is a rich environment so categorization of this object hierarchy is needed
for c,lt_obj in enumerate(layout):
#print(type(lt_obj),"This is type ",c,"th object on the ",p,"th page")
if isinstance(lt_obj,LTTextBoxHorizontal) or isinstance(lt_obj,LTTextBox) or isinstance(lt_obj,LTTextLine):
print("Type ,",type(lt_obj)," and text ..",lt_obj.get_text())
obj_textbox_line.update({lt_obj:lt_obj.get_text()})
elif p != 0:
pass
fp.close()
#print(obj_textbox_line)
#call the column finder here
#check_matching("example", "example1")
#text_doc_df = pd.DataFrame(obj_textbox_line,columns=['text'])
#print (text_doc_df)
pass
我正在使用通用行/列匹配器。如果你不想打扰,你可以购买这个软件150美元,用于专业转换器。