Python PDFminer因无法识别的字符而出错
尝试使用pdfminer从pdf中提取文本时,出现以下错误:Python PDFminer因无法识别的字符而出错,python,character-encoding,pdfminer,Python,Character Encoding,Pdfminer,尝试使用pdfminer从pdf中提取文本时,出现以下错误: ValueError:unichr()参数不在范围内(0x110000)(宽Python构建) 似乎存在无法识别的字符,并且一个字符在提取其余文本之前抛出错误。utf整数大于110000。大多数此类错误都与狭窄的Python构建有关,但在本例中并非如此 错误似乎出现在pdfminer中的name2unicode函数中: <ipython-input-87-ebcd473faf08> in name2unicode(name
ValueError:unichr()参数不在范围内(0x110000)(宽Python构建)
似乎存在无法识别的字符,并且一个字符在提取其余文本之前抛出错误。utf整数大于110000。大多数此类错误都与狭窄的Python构建有关,但在本例中并非如此
错误似乎出现在pdfminer中的name2unicode函数中:
<ipython-input-87-ebcd473faf08> in name2unicode(name)
13 if not m:
14 raise KeyError(name)
---> 15 return unichr(int(m.group(0)))
name2unicode(名称)中的
13如果不是m:
14 raise KeyError(名称)
--->15返回unichr(内部(m.group(0)))
我发现了那个令人讨厌的角色。它的unicode int比范围大得多,我还没有找到相应的符号。pdfminer函数设置为跳过键错误(调用函数在尝试中,但在键错误后传递),但当它是超出范围的错误时,将忽略该错误。您可以通过更改原始函数来修复此问题,如下所示:
import re
from pdfminer.psparser import PSLiteral
from pdfminer.glyphlist import glyphname2unicode
from pdfminer.latin_enc import ENCODING
STRIP_NAME = re.compile(r'[0-9]+')
def edit_name2unicode(name):
"""Converts Adobe glyph names to Unicode numbers."""
if name in glyphname2unicode:
return glyphname2unicode[name]
m = STRIP_NAME.search(name)
# print('name: '+name)
# print('m: '+str(m))
if not m or m>110000:
raise KeyError(name)
return unichr(int(m.group(0)))
pdfminer.encodingdb.name2unicode = edit_name2unicode
最后请注意,在为整个文档导入pdfminer后,必须将旧函数设置为新函数。
这是一个运行时解决方案,对于一个必须多次完成的过程,我将更改源文档,尤其是因为pdfminer没有良好的类结构,您无法轻松继承和覆盖
但是,如果要保留的字符存在关键错误,可以将其添加到pypdf或添加其他字符集编码