2011-07-29 2 views
11

PDF를 텍스트로 줄이기 위해 PDFminer의 pdf2text를 사용했습니다. 불행히도 특수 문자가 포함되어 있습니다. 내 콘솔파이썬 : 나를 (PDFminer에서) 문제를주는 특수 문자

>>>a=pdf_to_text("ap.pdf") 
을 heres

그것의 샘플을 조금 잘린

>>>a[5000:5500] 
'f one architect. Decades ...... but to re\xef\xac\x82ect\none set of design ideas, than to have one that contains many\ngood but independent and uncoordinated ideas.\n1 Joshua Bloch, \xe2\x80\x9cHow to Design a Good API and Why It Matters\xe2\x80\x9d, G......=-3733' 

내가 그것을

>>>a[5000:5500].encode('utf-8') 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 237: ordinal not in range(128) 

내가 조금 주위에 검색 인코딩해야 함을 이해하고 출력을 보여 드리죠 그들을 시도했다, 특히 Replace special characters in python. 입력은 PDFminer에서 비롯되어 힘든 (AFAIK) 컨트롤입니다. 적절한 출력 방법은 무엇입니까 일반 텍스트?

내가 뭘 잘못하고 있니?

--A 빠른 수정 : ASCII-하는 PDFminer의 코덱을 변경할 수 있지만,이 코덱을 변경 답변 -에 대한 지속적인 solution--

--Abandoned 빠른 수정이 아니다는 제거 정보 -

맥심 http://en.wikipedia.org/wiki/Windows-1251에서 언급 한 바와 같이

--A relavent 주제 - 비 ASCII 문자가 str 객체에 저장 될 때

+0

감사합니다! 파이썬에서 임베디드 초보자는 어쩌면 데모 코드를 게시하여이 오류가 문제가되지 않도록 Pdfminer를 사용할 수 있습니까? 감사합니다 –

답변

10

이 문제가 종종 발생합니다. 당신이하려고하는 것은 utf-8에 이미 인코딩 된 문자열 (0x7f 이상의 코드를 가진 문자를 포함하고 있기 때문에)로 인코딩하는 것입니다.

이러한 문자열을 utf-8에 인코딩하려면 먼저 디코딩해야합니다. 원본 텍스트 인코딩이라고 가정 cp1251 (실제 인코딩으로 대체), 같은 뭔가 트릭 할 것이다 다음

u = s.decode('cp1251') # decode from cp1251 byte (str) string to unicode string 
s = u.encode('utf-8') # re-encode unicode string to utf-8 byte (str) string 

기본적으로, 위의 코드는이에서 문자열로 변환, 즉 iconv --from-code=CP1251 --to-code=UTF-8 명령이 무엇을 수행을 한 인코딩에서 다른 인코딩으로.

몇 가지 유용한 링크 :이 질문에 대한

+0

예, 이것은 완벽하게 작동합니다! 나는 "... вÐ,ÑšDiverivering Custo .."와 같은 약간의 유물을 얻었지 만 최대의 화려 함을 위해 아마추어가 만든 PDF였습니다. 클리너 PDF는 깨끗하게 구문 분석됩니다. – aitchnyu

+0

좋은 의견, 입력 인코딩을 알아야합니다. –

+0

필자는 그것을'a.decode ('cp1250'). encode ('utf-8')'로 확실히 씁니다. –