PDFBox добавление пробелов в словах - PullRequest
12 голосов
/ 31 октября 2011

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

Я использую 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 training pdf.pdf

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

«• Развивает хороший навык для дальнейшей жизни."

"www.sheff ield.gov.uk "

" Подумайте вперед !, который основан на "

и т. д. и т. д.

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

Я нахожусь на Ubuntu и использую Sun JDK 1.6.

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

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

Ответы [ 2 ]

12 голосов
/ 31 октября 2011

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

Внутренне документы PDF просто содержат инструкции, такие как «поместить символы 'abc' в позицию X" и "поместить символы 'def' в позицию Y", и PDFBox пытается определить, должен ли полученный извлеченный текст быть "abc def" или " abcdef "основан на таких вещах, как расстояние между X и Y. Эти эвристики обычно довольно точны, но, как вы можете видеть, они не всегда дают правильный результат.

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

5 голосов
/ 31 января 2013

Класс 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;
}
...