2012-11-01 5 views
1

iText를 사용합니다. 5.3.3iText 추출 "?" "fi"대신

나는 pdf 파일에서 텍스트를 추출하려고합니다.

는 그 같은 것을 사용

File f (....) 

    FileInputStream fis = new FileInputStream(f); 

    r = new PdfReader(fis); 

    String s=PdfTextExtractor.getTextFromPage(r, 1); 
    System.out.print(s); 

나는이 얻을 :

"(...) 역사에서 처음 치명적인 사고 (에 의한 위기에 싱가포르 항공 ...) "

텍스트

:

"(...) 역사에서 최초의 치명적인 사고로 인한 위기 (...) "

0 싱가포르 항공

나 : 텍스트

"? (...) 국내 사업자와 최종 결론에 대한 필요성 (...) 제안" "을 (...) 전국 사업자와 최종 결론은 필요성에 대한 제안 (...) "

내가 보는 바와 같이"? " "fi"의 insted.

+0

는 그의 대답에 지적, 특정 문자 조합에 사용되는 합자 글리프가 있습니다. 이 글리프에 대한 유니 코드에 대한 적절한 매핑이있는 경우, 유니 코드는 분리 된 문자가 아닌 해당 합자를 선택합니다. 콘솔 글꼴은 그 문자를 알지 못하기 때문에 "?"가 표시됩니다. 반면에 유니 코드 문자에 대한 적절한 매핑이 없다면 텍스트 추출 루틴이 손실되고 "?"문자가 포함될 수 있습니다. 캐릭터. 분석을 위해 문서를 제공하십시오. – mkl

답변

0

문제가 해결되었습니다.

.txt 파일의 기본 인코딩을 변경했습니다. 이클립스에서

: 창 >> 일반 >> 콘텐츠 형식 >> 텍스트 기본 인코딩 : UTF-8 HRN으로

0

"파이"는 그 문자에

더 많은 정보는 여기에서 찾을 수 있습니다 LATIN SMALL LIGATURE FI로 알려진 유니 코드 문자가 될 수 있습니다.

http://www.eki.ee/letter/chardata.cgi?ucode=FB01

이 때문에 보통 인코딩 문제로 또는 경우 어떻게 당신이 "파이"가 소스에 렌더링되는 글꼴을 디코딩하지 않습니다이 텍스트를 표시하는 웹 페이지에 사용 된 글꼴입니다.

pdf 판독기 문자열을 UTF8 인코딩으로 정규화하려고 시도하십시오. 브라우저 글꼴로 렌더링하는 방법을 모르는 경우 유니 코드 문자를 확인하고 "fi"와 같이 필요한 문자를 분석 할 수 있습니다.

이렇게하는 한 가지 방법은 원하지 않는 유니 코드 문자를 구문 분석 할 수있는 정규식을 작성하는 것입니다. 아래는 예제입니다

//Used this to get the unicode range below : http://www.utf8-chartable.de/unicode-utf8-table.pl 
       s = s.Replace(/[^\u0000-\u036F\u2000-\u2023\u2153-\u217E\u20A0-\u20B5]/g, ""); 

희망이 있습니다.

감사합니다.

+0

다음과 같이 사용하려고합니다 : s.바꾸십시오 ("/ [^ \ u0000- \ u036F \ u2000- \ u2023 \ u2153- \ u217E \ u20A0- \ u20B5]/g", ""); 하지만 도움이되지 않습니다. – user1055201

+0

원래 포스터가 합자를 버리고 싶다고 생각하지 않습니다. 대신 그는 분명히 그것들을 분리 된 문자로 변환하기를 원합니다. – mkl