Python 3.x 在python3textract库中使用tesseract
我想从PDF文件中提取文本。我可以成功地安装tesseract(它在终端中工作)和textract(按照说明) 然而,当我运行代码时,我得到了一个错误Python 3.x 在python3textract库中使用tesseract,python-3.x,tesseract,python-tesseract,Python 3.x,Tesseract,Python Tesseract,我想从PDF文件中提取文本。我可以成功地安装tesseract(它在终端中工作)和textract(按照说明) 然而,当我运行代码时,我得到了一个错误 text = textract.process( '/Users/Text/en.pdf', method='tesseract', language='eng', ) 错误是: /usr/local/lib/python3.4/site-packages/textract-1.4.0-py3.4.egg/textrac
text = textract.process(
'/Users/Text/en.pdf',
method='tesseract',
language='eng',
)
错误是:
/usr/local/lib/python3.4/site-packages/textract-1.4.0-py3.4.egg/textract/parsers/pdf_parser.py in extract_tesseract(self, filename, **kwargs)
62 page_content = TesseractParser().extract(page_path, **kwargs)
63 contents.append(page_content)
---> 64 return ''.join(contents)
65 finally:
66 shutil.rmtree(temp_dir)
TypeError: sequence item 0: expected str instance, bytes found
我尝试了几次修改,但都不起作用,我也犯了同样的错误
返回b“”。加入(内容)
contents=[str(item)for item in contents]
返回之前插入contents=[内容中的项目解码(“utf-8”)
事实上,我也问了同样的问题,得到了答案。以下是我翻译的核心部分。(谢谢,@mjy) 注意:此修改至少适用于英语
返回“”。将(内容)
加入到
return "".join(item.decode('utf-8') if isinstance(item, bytes) else item for item in contents)
if isinstance(text, str):
return text
name错误:未定义名称“unicode”
utils.py
的第54行中,将如果是instance(文本,unicode):(…cont…)
更改为
return "".join(item.decode('utf-8') if isinstance(item, bytes) else item for item in contents)
if isinstance(text, str):
return text
你是绝对正确的-我道歉。我不知怎么错过了你修改的那一行。我在Slackware Linux系统上测试了您的示例tesseract 3.03和leptonica 1.70,它似乎在命令行中运行没有问题。你试过了吗
tesseract test_text.png out
BTW,为了避免混淆,我删除了我的回复…@jcoppens感谢您的检查。实际上,我也在命令行中尝试过。但是,由于提取后我需要用Python编辑文本,最方便的方法是用Python完成所有工作。我相信我曾经尝试过使用tesseract包装器,但无法使其正常工作。在这个回答中,我从程序中“手动”调用了tesseract,然后在Python中处理其输出。不要惊慌——代码很长,因为它还包括GUI代码。呼叫在第一类(识别数字)-以out
开头的两行代码中。