1

我解析PDF文件以使用Apache Tika提取文本。使用Apache Tika從文本/ 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^ith在字符串上的正則表達式?使用[String.replace](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace(java.lang.CharSequence,%20java.lang.CharSequence))? – Gagravarr

回答

1

PDF使用Unicode代碼點你可能有包含代理對的字符串相結合的形式(如變音符號)等,不妨保存這些作爲自己最親近的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); 
}