PDFBox добавление пробелов в слова

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

Я использую pdfbox-app-1.6.0.jar (последняя версия) на следующем примере файла в разделе Загрузки этой страницы : http://www.sheffield.gov.uk/roads/children/parents/6-11/pedestrian-training

Я пробовал с несколькими другими файлами PDF, и, похоже, делает то же самое на нескольких страницах.

Я делаю следующий:

java-jar pdfbox-app-1.6.0.jar ExtractText-force-console ~ / Desktop / ped обучение pdf.формат PDF

на загруженный файл, и вы увидите пробелы в следующем вставлены неправильно в результате на консоли: "• Если ч ildren способны дойти до schoo l безопасно это может уменьшить затор. "

• * развивает хороший хаб ее для дальнейшей жизни."

"www.в поле Шефф.гов.УК"

"Думаю, Впереди!, wh ich основан на в"

etc etc.

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

Я на ubuntu и запускаю JDK 1.6 Sun.

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

любая помощь или если кто-то еще имеет ту же проблему, пожалуйста, комментарий. Это вызывает большую проблему в индексировании содержание правильно для поиска.

2 ответов


к сожалению в настоящее время не существует простого решения для этого.

внутренне PDF-документы содержат инструкции, как "место символы 'ABC' в точке x" и "место символов" Def "в положение Y", и PDFBox пытается рассуждать, является ли извлеченный текст должен быть "АВС деф" или "абвгде", что расстояние между X и Y. Эти алгоритмы, как правило, довольно точный, но как видно они не всегда дают правильный результат.

один из способов улучшить качество извлеченного текста-попробовать поиск по словарю для каждого извлеченного слова или токена. Если поиск не удался, попробуйте объединить маркер со следующим. Если поиск словаря в комбинированном токене завершается успешно, то вполне вероятно, что текстовый экстрактор ошибочно добавил дополнительное пространство внутри слова. К сожалению, такая функция еще не существует в PDFBox. См.https://issues.apache.org/jira/browse/PDFBOX-1153 для запрос функции подан для этого. Патчи добро пожаловать!


класс org.apache.pdfbox.util.PDFTextStripper (pdfbox-1.7.1) позволяет изменить склонность решать, являются ли две строки частью одного и того же слова или нет.

повышение spacingTolerance уменьшит количество вставленных пробелов.

/**
 * Set the space width-based tolerance value that is used
 * to estimate where spaces in text should be added.  Note that the
 * default value for this has been determined from trial and error.
 * Setting this value larger will reduce the number of spaces added. 
 * 
 * @param spacingToleranceValue tolerance / scaling factor to use
 */
public void setSpacingTolerance(float spacingToleranceValue) {
    this.spacingTolerance = spacingToleranceValue;
}