Tôi cần phải phân tích cú pháp tài liệu PDF. Tôi đã triển khai trình phân tích cú pháp và đã sử dụng Thư viện iText và cho đến bây giờ nó đã hoạt động mà không có bất kỳ vấn đề gì.Khoảng trắng lạ khi phân tích cú pháp PDF
Nhưng tôi không cần phải phân tích cú pháp tài liệu khác có khoảng trắng rất lạ ở giữa các từ. Một ví dụ tôi nhận được:
Võ RBER eitung auf chết Motorr adsaison. Viele Motorr adf AHR er
Mọi từ đậm nên được kết nối, nhưng bằng cách nào đó Parser PDF được thêm khoảng trắng vào các từ. Nhưng khi tôi sao chép và dán nội dung từ PDF vào một Textfile tôi không nhận được những không gian này.
Đầu tiên tôi nghĩ đó là do thư viện Phân tích cú pháp PDF mà tôi đang sử dụng, nhưng cũng với thư viện khác, tôi nhận được cùng một vấn đề chính xác.
Tôi đã xem qua số singleSpaceWidth
từ các từ được phân tích cú pháp và tôi nhận thấy rằng nó luôn thay đổi khi nó thêm khoảng trắng. Tôi đã cố gắng đặt chúng lại với nhau một cách thủ công. Nhưng vì không thực sự là một khuôn mẫu để kết hợp lại những từ mà hầu như không thể.
Có ai khác có vấn đề tương tự hoặc thậm chí là giải pháp cho vấn đề đó không?
Theo yêu cầu, đây là một số thông tin hơn:
- iText Version 5.2.1
- http://prine.ch/whitespacesProblem.pdf (Liên kết với các pdf)
Phân tích với 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);
}
Đây là phương pháp SemTextExtractionStrategy thực sự phân tích cú pháp t ext. Ở đó tôi tự thêm sau mỗi từ phân tích cú pháp một khoảng trắng, nhưng bằng cách nào đó nó chia các từ trong việc phát hiện:
@Override
public void parseText(TextRenderInfo renderInfo, int pageNumber) {
this.pageNumber = pageNumber;
String text = renderInfo.getText();
currTextBlock.getText().append(text + " ");
....
}
Dưới đây là toàn bộ SemTextExtraction lớp nhưng trong đó nó chỉ gọi phương thức từ trên cao (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);
}
}
}
vui lòng cho biết phiên bản iText bạn đang sử dụng và bằng cách nào đó bạn cũng cần cung cấp PDF cũng như mã mà bạn phân tích cú pháp. – Eugene
Đã thêm tất cả thông tin trong bài đăng ở trên. – Prine
Còn lớp TextExtractionStrategy mà bạn sử dụng thì sao? – Eugene