1

Word (.docx) ドキュメントと PDF の 2 つのドキュメントを調整する必要があるシナリオがあります。この 2 つは互いに「同一」であるはずです (PDF は DOCX ファイルの PDF バージョンにすぎません)。つまり、同じテキスト、コンテンツなどが含まれている必要があります。

具体的には、両方のドキュメントに同じ数の段落が含まれていることを確認する必要があります。したがって、DOCX を読んで段落数を取得し、次に PDF を読んでその段落数を取得する必要があります。両方の数字が同じなら、私は仕事をしています。

Apache Tika (私は 1.3 に興味があります) が、ここでの仕事に適したツールのようです。このソース ファイルでは、Tika が段落カウントの概念をサポートしていることがわかりますが、両方のドキュメントからカウントを取得する方法を見つけようとしています。これが私の最善の試みですが、最後の点のいくつかを接続するのに窒息しています:

InputStream docxStream = new FileInputStream("some-doc.docx");
InputStream pdfStream = new FileInputStream("some-doc.pdf");

ContentHandler handler = new DefaultContentHandler();
Metadata docxMeta = new Metadata();
Metadata pdfMeta = new Metadata();
Parser parser = new OfficeParser();
ParseContext pc = new ParseContext();

parser.parse(docxStream, handler, docxMeta, pc);
parser.parse(pdfStream, handler, pdfMeta, pc);

docxStream.close();
pdfStream.close();

int docxParagraphCount = docxMeta.getXXX(???);
int pdfParagraphCount = pdfMeta.getXXX(???);

if(docxParagraphCount == pdfParagraphCount)
    setInBusiness(myself, true);

だから私は尋ねます:これを正しく設定しましたか、それともベースから外れていますか?基地外の場合は、元に戻すための助けを貸してください. Metadataまた、正しく設定した場合、2 つのインスタンスから目的のカウントを取得するにはどうすればよいでしょうか? 前もって感謝します。

4

1 に答える 1

1

まず、Tika はドキュメントに含まれるメタデータのみを返します。何も計算しません。そのため、文書の 1 つに段落数のメタデータがない場合、運が悪いことになります。ドキュメントの 1 つにダフ データがある場合 (つまり、ファイルを書き出したプログラムが間違っている場合)、運が悪いでしょう。

それ以外の場合、コードはほぼ完成していますが、完全ではありません。DefaultParseror AutoDetectParser-を使用する可能性が最も高いOfficeParserのは、Microsoft ファイル形式のみです。その他のパーサーは、使用可能なすべてのパーサーを自動的に読み込み、正しいパーサーを選択します。

必要なプロパティはPARAGRAPH_COUNTで、Office メタデータ名前空間から取得されます。コードは次のようになります。

TikaInputStream docxStream = TikaInputStream.get(new File("some-doc.docx"));
TikaInputStream pdfStream = TikaInputStream.get(new File("some-doc.pdf"));

ContentHandler handler = new DefaultContentHandler();
Metadata docxMeta = new Metadata();
Metadata pdfMeta = new Metadata();
ParseContext pc = new ParseContext();

Parser parser = TikaConfig.getDefaultConfig().getParser();

parser.parse(docxStream, handler, docxMeta, pc);
parser.parse(pdfStream, handler, pdfMeta, pc);

int docxParagraphCount = docxMeta.getInt(Office.PARAGRAPH_COUNT);
int pdfParagraphCount = pdfMeta.getInt(Office.PARAGRAPH_COUNT);

テキストをまったく気にせず、メタデータのみを気にする場合は、ダミーのコンテンツ ハンドラーを渡します。

于 2013-02-20T22:45:59.977 に答える