1

私はpdfをテキストファイルに変換するためにitextを使用していますが、実際にはうまく機能しますが、いくつかの単語では次のことを行います. とにかくこの動作を修正する方法はありますか?

            String pdf="/home/can/Downloads/NLP/textSummarization/A New Approach for  Multi-Document Update Summarization.pdf";
    String txt="/home/can/myWorkSpace/PDFConverterProject/outputs/bb.txt";
    StringBuffer text=new StringBuffer() ;
    String resultText="";
    PdfReader reader;
    try {
        reader = new PdfReader(pdf);
        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
        PrintWriter out = new PrintWriter(new FileOutputStream(txt));
        TextExtractionStrategy strategy;
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
            text.append(strategy.getResultantText());

        }
        resultText=text.toString();
        resultText = resultText.replaceAll("-\n", "");
        out.println("-->"+resultText);

        StringTokenizer stringTokenizer=new StringTokenizer(resultText, "\n");
        PrintWriter lineWriter = new PrintWriter(new FileOutputStream("/home/can/myWorkSpace/PDFConverterProject/outputs/line.txt"));
        while (stringTokenizer.hasMoreTokens()){
            String curToken = stringTokenizer.nextToken();
            lineWriter.println("line-->"+curToken);
        }
        lineWriter.flush();
        lineWriter.close();
        out.flush();
        out.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

3 に答える 3

8

このように空白文字が欠落している理由は、レンダリングされた PDF に表示される空白文字が、PDF のページ コンテンツの説明にある空白文字に必ずしも対応していないためです。代わりに、PDF では、1 つの単語をレンダリングした後、次の単語をレンダリングする前に現在の位置をわずかに右に移動する操作がよく見られます。

残念ながら、隣接するグリフの外観を向上させるためにも同じメカニズムが使用されます。一部の文字の組み合わせでは、外観と読みやすさを向上させるために、デフォルトよりもグリフを互いに近づけたり、離したりして印刷する必要があります。これは、上記と同じ操作を使用して PDF で行われます。

したがって、そのような状況の PDF パーサーは、ヒューリスティックを使用して、そのようなシフトがスペース文字を暗示するためのものなのか、それとも単に文字グループの見栄えを良くするためのものなのかを判断する必要があります。また、ヒューリスティックは失敗する可能性があります。

SimpleTextExtractionStrategyテキスト抽出戦略として使用します。この場合のヒューリスティックは次のように実装されます (現在、iText 5.x github git 開発ブランチのSimpleTextExtractionStrategy.javarenderTextのメソッドにあるように):

float spacing = lastEnd.subtract(start).length();
if (spacing > renderInfo.getSingleSpaceWidth()/2f)
{
    result.append(' ');
}

したがって、空白文字の現在の幅の少なくとも半分の幅のギャップは、空白文字に変換されます。

これは一般的に賢明に聞こえます。ただし、単語を区切るために水平シフトのみを使用するドキュメントの場合、実際のスペース文字の現在の幅はヒューリスティックの適切な尺度ではない可能性があります。

したがって、できることは、テキスト抽出戦略のヒューリスティックを改善することです。既存のものをコピーして操作し、コードで使用します。

問題のサンプル PDF を提供していただければ、役立つアイデアがいくつかあるかもしれません。

于 2012-11-30T12:23:11.440 に答える
1

ジャスパーレポートを使用できます。それは魅力のように機能します

于 2013-07-01T13:56:22.843 に答える