Странные пробелы при анализе PDF

Мне нужно проанализировать PDF-документ. Я уже реализовал парсер и использовал библиотеку iText , и до сих пор все работало без проблем.

Но нет, мне нужно разобрать другой документ, в котором есть очень странные пробелы в середине слов. В качестве примера я получаю:

Vo rber eitung auf die Motorr adsaison. Viele Motorr adf ahr er

Все слова, выделенные жирным шрифтом, должны быть связаны, но анализатор PDF каким-то образом добавляет в слова пробелы. Но когда я копирую и вставляю содержимое из PDF в текстовый файл, я не получаю этих пробелов.

Сначала я подумал, что это из-за библиотеки синтаксического анализа PDF, которую я использую, но и с другой библиотекой я получаю точно такую ​​​​же проблему.

Я посмотрел на singleSpaceWidthиз проанализированных слов и заметил, что они всегда меняются тогда, когда добавляются пробелы. Пробовал собирать их вручную. Но поскольку шаблона для рекомбинации слов на самом деле нет, это почти невозможно.

У кого-нибудь была похожая проблема или хотя бы решение этой проблемы?

По просьбе, вот дополнительная информация:

Анализ с помощью 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);
}

Здесь метод 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 textParsingStrategies = new ArrayList();
    public ArrayList imageParsingStrategies = new ArrayList();

    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);
        }
    }
}

9
задан Prine 13 August 2012 в 06:49
поделиться