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ファイルには@/& /£や商標記号などの特殊文字がいくつかあります。抽出プロセス中または抽出プロセス後にこれらの特殊文字を削除するにはどうすればよいですか?

+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の同等物として保持することもできます。

extractedText = normalisedText.replaceAll("[^\\p{ASCII}]", ""); 
:あなたはASCIIテキストの後に、単純にしている場合は、一度規格化し、その後、あなたが this answerごとに正規表現を使用してティカから取得した文字列をフィルタリングすることができ

import java.text.Normalizer; 

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

:もしそうなら、あなたはこのような何かを行うことができますしかし

、正規表現を使用すると、正規表現を避け、(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); 
} 
関連する問題