1

Apache Tika로 텍스트를 추출하기 위해 PDF 파일을 구문 분석하고 있습니다.Apache Tika를 사용하여 text/PDF에서 특수 문자를 제거하십시오.

//Create a body content handler 
BodyContentHandler handler = new BodyContentHandler(); 

//Metadata 
Metadata metadata = new Metadata(); 

//Input file path 
FileInputStream inputstream = new FileInputStream(new File(faInputFileName)); 

//Parser context. It is used to parse InputStream 
ParseContext pcontext = new ParseContext(); 

try 
{  
    //parsing the document using PDF parser from Tika. 
    PDFParser pdfparser = new PDFParser(); 

    //Do the parsing by calling the parse function of pdfparser 
    pdfparser.parse(inputstream, handler, metadata,pcontext); 

}catch(Exception e) 
{ 
    System.out.println("Exception caught:"); 
} 
String extractedText = handler.toString(); 

위의 코드 작업과 PDF의 텍스트는 인용되어 있습니다.

일부 특수 문자가 @/&/£ 또는 상표 기호 등의 PDF 파일에 있습니다. 추출 과정에서 또는 추출 과정 후에 특수 문자를 어떻게 제거 할 수 있습니까?

+0

W를 문자열에 정규식이 있습니까? [String.replace] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace (java.lang.CharSequence, % 20java.lang.CharSequence))? – Gagravarr

답변

1

PDF는 유니 코드 코드 포인트를 사용합니다. 서로 게이트 쌍을 포함하고 양식 (예 : 발음 구별 기호) 등을 결합한 문자열을 사용하고 가장 가까운 ASCII로 유지해야 할 수도 있습니다. 예 : é에서 e으로 정규화하십시오. 그렇다면, 당신은 같은 것을 할 수 있습니다

import java.text.Normalizer; 

String normalisedText = Normalizer.normalize(handler.toString(), Normalizer.Form.NFD); 

당신이 ASCII 문자를 다음 번에 당신이 this answer에 따라 정규 표현식 사용하면 티카에서 얻을 문자열을 필터링 할 수있는 표준화 단순히 이후 인 경우 :

extractedText = normalisedText.replaceAll("[^\\p{ASCII}]", ""); 

그러나 정규 표현식은 정규식을 방지 할 수 있습니다 (특히 큰 문자열에) 속도가 느려질 수 및 (this answer에 따라) 간단하게 교체 할 수 있기 때문에 :

public static String flattenToAscii(String string) { 
    char[] out = new char[string.length()]; 
    String normalized = Normalizer.normalize(string, Normalizer.Form.NFD); 
    int j = 0; 
    for (int i = 0, n = normalized.length(); i < n; ++i) { 
     char c = normalized.charAt(i); 
     if (c <= '\u007F') out[j++] = c; 
    } 
    return new String(out); 
}