2011-10-31 41 views
11

Khi tôi cố gắng trích xuất văn bản từ các tệp PDF của mình, dường như chèn khoảng trắng giữa các từ ngẫu nhiên.PDFBox thêm khoảng trắng trong các từ

Tôi đang sử dụng pdfbox-app-1.6.0.jar (phiên bản mới nhất) trên sau tập tin mẫu trong Downloads phần của trang này: http://www.sheffield.gov.uk/roads/children/parents/6-11/pedestrian-training

Tôi đã thử với nhiều tập tin PDF khác và nó có vẻ làm tương tự trên nhiều trang.

tôi làm như sau:

java -jar pdfbox-app-1.6.0.jar ExtractText -force -console ~/Desktop/PED đào tạo pdf.pdf

vào file tải về và bạn sẽ thấy khoảng trống trong sau đây chèn sai trong kết quả trên giao diện điều khiển: "• Nếu ildren ch có thể đi bộ đến schoo l một cách an toàn này có thể làm giảm tình trạng tắc nghẽn "

"• Phát triển hab tốt của nó đối với cuộc sống sau này."

"www.sheff ield.gov.uk"

"Think Ahead !, ich wh được dựa trên"

vv vv

Như bạn có thể thấy một vài chữ trên đã khoảng cách giữa chúng không có lý do gì tôi có thể hiểu được.

Tôi đang dùng ubuntu và chạy JDK 1.6 của Sun.

Tôi đã thử điều này trên một số tệp PDF khác nhau và cố gắng tìm kiếm giải pháp trên diễn đàn, có lỗi tương tự nhưng tất cả dường như đã được giải quyết.

Bất kỳ trợ giúp nào hoặc nếu bất kỳ ai khác có cùng sự cố, vui lòng nhận xét. Điều này gây ra vấn đề lớn trong việc lập chỉ mục nội dung phù hợp để tìm kiếm.

Trả lời

11

Rất tiếc, hiện tại không có giải pháp dễ dàng nào cho việc này.

Tài liệu PDF nội bộ chỉ chứa các hướng dẫn như "ký tự vị trí 'ở vị trí X" và "ký tự vị trí' ở vị trí Y" và PDFBox cố gắng giải thích liệu văn bản được trích xuất có phải là "abc def" hay không "abcdef" dựa trên những thứ như khoảng cách giữa X và Y. Những chẩn đoán này thường khá chính xác, nhưng bạn có thể thấy chúng không phải lúc nào cũng tạo ra kết quả chính xác.

Một cách để cải thiện chất lượng của văn bản được trích xuất là thử tra cứu từ điển trên mỗi từ hoặc mã thông báo được trích xuất. Nếu tra cứu không thành công, hãy thử kết hợp mã thông báo với mã thông báo tiếp theo. Nếu tra cứu từ điển trên mã thông báo kết hợp thành công, thì có khả năng trình trích xuất văn bản đã thêm nhầm một khoảng trống thừa bên trong từ đó. Thật không may một tính năng như vậy chưa tồn tại trong PDFBox. Xem https://issues.apache.org/jira/browse/PDFBOX-1153 để biết yêu cầu tính năng được gửi cho điều này. Bản vá chào mừng!

+1

Cảm ơn Jukka, đôi khi thật nhẹ nhõm khi chỉ hiểu tại sao thứ gì đó không hoạt động như mong đợi và tôi cũng không làm bất cứ điều gì gây ra sự cố. –

+0

Đây là một ví dụ về cách xây dựng một từ điển thuật ngữ như vậy nếu bạn đang sử dụng Lucene. [Làm thế nào để trích xuất một Vector thuật ngữ trong Lucene] (http://stackoverflow.com/a/8901758/165085) –

5

Lớp org.apache.pdfbox.util.PDFTextStripper (pdfbox-1.7.1) cho phép sửa đổi xu hướng để quyết định xem hai chuỗi có phải là một phần của cùng một từ hay không.

Tăng spacingTolerance sẽ giảm số lượng không gian được chèn.

/** 
* 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; 
} 
Các vấn đề liên quan