PDF文書を解析する必要があります。私はすでにパーサーを実装してライブラリを使用しましたiTextこれまで問題なく動作しました。PDFを解析する際に奇妙な空白があります
しかし、いいえ、私は単語の真ん中に非常に奇妙な空白を取得する別のドキュメントを解析する必要があります。一例として、私は得る:
VoのRBER eitungアウフMotorrのadsaisonを死にます。 Viele Motorr ADF AHR ER
すべての大胆な言葉が接続されている必要がありますが、何らかの形でPDFパーサが単語に空白を追加しています。しかし、私がコピーしてPDFからTextfileにコンテンツを貼り付けるとき、私はこれらのスペースを取得しません。
まず、私が使用しているPDF解析ライブラリのためだと思っていましたが、別のライブラリでもまったく同じ問題が発生しました。
私は、パースされた単語からsingleSpaceWidth
を見ました。そして、それは空白を追加するときに常に変化していることに気付きました。私はそれらを手動でまとめようとしました。しかし、実際には単語を再結合するパターンはないので、ほとんど不可能です。
誰かに同様の問題がありましたか、その問題の解決策がありましたか?
要求されたとして、ここではいくつかのより多くの情報がある:
- iTextのバージョン5.2.1
- http://prine.ch/whitespacesProblem.pdf(PDFファイルへのリンク)SemTextExtractionStrategyで解析
:
PdfReader reader = new PdfReader("data/SpecialTests/SuedostSchweiz/" + src);
SemTextExtractionStrategy semTextExtractionStrategy = new SemTextExtractionStrategy();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
// Set the page number on the strategy. Is used in the Parsing strategies.
semTextExtractionStrategy.pageNumber = i;
// Parse text from page
PdfTextExtractor.getTextFromPage(reader, i, semTextExtractionStrategy);
}
ここで、実際にtを解析するSemTextExtractionStrategyメソッド内線そこで私は、手動ですべての解析された単語の空白の後に追加し、何とかそれを検出して単語を分割しない:
ここ@Override
public void parseText(TextRenderInfo renderInfo, int pageNumber) {
this.pageNumber = pageNumber;
String text = renderInfo.getText();
currTextBlock.getText().append(text + " ");
....
}
は全体SemTextExtractionクラスですが、そこにはそれだけで(parseText)上からメソッドを呼び出しありません。
public class SemTextExtractionStrategy implements TextExtractionStrategy {
// Text Extraction Strategies
public ColumnDetecter columnDetecter = new ColumnDetecter();
// Image Extraction Strategies
public ImageRetriever imageRetriever = new ImageRetriever();
public int pageNumber = -1;
public ArrayList<TextParsingStrategy> textParsingStrategies = new ArrayList<TextParsingStrategy>();
public ArrayList<ImageParsingStrategy> imageParsingStrategies = new ArrayList<ImageParsingStrategy>();
public SemTextExtractionStrategy() {
// Add all text parsing strategies which are later on applied on the extracted text
// textParsingStrategies.add(fontSizeMatcher);
textParsingStrategies.add(columnDetecter);
// Add all image parsing strategies which are later on applied on the extracted text
imageParsingStrategies.add(imageRetriever);
}
@Override
public void beginTextBlock() {
}
@Override
public void renderText(TextRenderInfo renderInfo) {
// TEXT PARSING
for(TextParsingStrategy strategy : textParsingStrategies) {
strategy.parseText(renderInfo, pageNumber);
}
}
@Override
public void endTextBlock() {
}
@Override
public void renderImage(ImageRenderInfo renderInfo) {
for(ImageParsingStrategy strategy : imageParsingStrategies) {
strategy.parseImage(renderInfo);
}
}
}
あなたが使用しているiTextのバージョンを教えてください。何らかの理由でPDFを提供する必要があります。また、解析するコードも必要です。 – Eugene
上記の情報にすべての情報を追加しました。 – Prine
あなたが使っているTextExtractionStrategyクラスはどうですか? – Eugene