Я хочу извлечь текст, содержащийся в PDF.Это мой код для этого:
import textract
doc = textract.process(r"C:\path\to\the\downloaded.pdf", encoding = 'raw_unicode_escape')
f = open('pdf_to_text.txt','wb')
f.write(doc)
Это вывод:
\u53cb\u90a6\u4fdd\u96aa\u63a7\u80a1\u6709\u9650\u516c\u53f8
REAL LIFE
REAL IMPACT
A NNUA L REP ORT 2015
STOCK CODE : 1299
VISION & PURPOSE
Our Vision is to be the pre-eminent life
insurance provider in the Asia-Pacific region.
That is our service to our customers and
our shareholders.
Our Purpose is to play a leadership role in
driving economic and social development
across the region. That is our service to
societies and their people.
ABOUT AIA
AIA Group Limited and its subsidiaries (collectively \u201cAIA\u201d
or the \u201cGroup\u201d) comprise the largest independent publicly
listed pan-Asian life insurance group. It has a presence in
18 markets in Asia-Paci\ufb01c \u2013 wholly-owned branches and
subsidiaries in Hong Kong, Thailand, Singapore, Malaysia,
China, Korea, the Philippines, Australia, Indonesia, Taiwan,
... ...
... ...
... ...
Как видно, он читает некоторые «причудливые» тексты (unicode? Ascii?) правильно, но не все.Как это исправить?
Я перепробовал 5 схем кодирования - utf-8
дает плохие результаты, utf-16
дает худшие результаты, преобразуя все в неразборчивый текст, ascii
дает неплохие результаты, нооставляет несколько символов, unicode_escape
дает средние результаты, оставляя довольно много неразборчивых символов, а raw_unicode_escape
также дает хорошие результаты, но оставляет несколько таких, как ascii
.
Это ссылка наPDF, который я скачал на локальный диск для анализа:
https://www.aia.com/content/dam/group/en/docs/annual-report/aia-annual-report-2015-eng.pdf
PS Еще одна небольшая не связанная с этим проблема заключается в том, что временами сохраняются пробелы между буквами слова,как A NNUA L REP ORT
в текстовом фрагменте выше.Как это можно исправить?
РЕДАКТИРОВАТЬ: Я нашел на страницах 10 и 11 документация textract о возможных вариантах схемы кодирования.Но их почти сотня:
Possible choices: aliases, ascii, base64_codec, big5, big5hkscs,
bz2_codec, charmap, cp037, cp1006, cp1026, cp1140, cp1250, cp1251,
cp1252, cp1253, cp1254, cp1255, cp1256, cp1257, cp1258, cp424,
cp437, cp500, cp720, cp737, cp775, cp850, cp852, cp855, cp856,
cp857, cp858, cp860, cp861, cp862, cp863, cp864, cp865, cp866,
cp869, cp874, cp875, cp932, cp949, cp950, euc_jis_2004, euc_jisx0213,
euc_jp, euc_kr, gb18030, gb2312, gbk, hex_codec, hp_roman8, hz,
idna, iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_2004,
iso2022_jp_3, iso2022_jp_ext, iso2022_kr, iso8859_1, iso8859_10,
iso8859_11, iso8859_13, iso8859_14, iso8859_15, iso8859_16,
iso8859_2, iso8859_3, iso8859_4, iso8859_5, iso8859_6, iso8859_7,
iso8859_8, iso8859_9, johab, koi8_r, koi8_u, latin_1, mac_arabic,
mac_centeuro, mac_croatian, mac_cyrillic, mac_farsi, mac_greek,
mac_iceland, mac_latin2, mac_roman, mac_romanian, mac_turkish,
mbcs, palmos, ptcp154, punycode, quopri_codec, raw_unicode_escape,
rot_13, shift_jis, shift_jis_2004, shift_jisx0213, string_escape, tactis,
tis_620, undefined, unicode_escape, unicode_internal, utf_16, utf_16_be,
utf_16_le, utf_32, utf_32_be, utf_32_le, utf_7, utf_8, utf_8_sig, uu_codec,
zlib_codec
Как я могу определить, какой из них используется в этом конкретном PDF?А что, если даже это оставляет несколько персонажей?Или это правда, что одна из этих должна быть схемой кодирования , которая не оставляет после себя ни одного неразборчивого символа?