Я разрабатываю приложение, которое будет выполнять индексирование больших файлов Lucene (разделение их на несколько документов org.apache.lucene.document.Documents) разных форматов. В первоначальном подходе, по крайней мере, каждый «документ Луцен» состоит из одного «абзаца».Модифицировать анализ Apache Tika ODF и старых (1997-2003) документов MS Word?
Как правило, Apache Tika, по-видимому, является находкой для этого: вы просто бросаете в него документ и, похоже, высасываете весь текст независимо от формата.
Но я хотел получить подробное представление о том, как он обрабатывает более сложные аспекты, и в ходе моего первого взгляда, как он обрабатывает сноски и концевые сноски, я нахожу, что в то время как в файле .docx он даст это " линия», для линии с 3 сносками:
|Tecum optime[footnoteRef:2], deinde etiam[footnoteRef:3] cum mediocri amico[footnoteRef:4].
[2: Sed quoniam et advesperascit et mihi ad villam revertendum est, nunc quidem hactenus;
Quod si ita sit, cur opera philosophiae sit danda nescio.] [3: Si quae forte-possumus.
Immo videri fortasse.] [4: Huius ego nunc auctoritatem [sequens idem faciam]. Confecta
res esset. Primum Theophrasti, Strato, physicum se voluit; Ut proverbia non nulla veriora
sint quam vestra dogmata.]|
(Н.Б.„|“символы добавляются моим кодом для ясности)
... с тем же файлом в формате .doc Тик дает вам несколько «линий»:
|Tecum optime|
|, deinde etiam|
| cum mediocri amico|
|.|
...
|??|
| ? Sed quoniam et advesperascit et mihi ad villam revertendum est, nunc quidem
hactenus; Quod si ita sit, cur opera philosophiae sit danda nescio. |
|??|
| ? Si quae forte-possumus. Immo videri fortasse. |
|??|
| ? Huius ego nunc auctoritatem [sequens idem faciam]. Confecta res esset. Primum
Theophrasti, Strato, physicum se voluit; Ut proverbia non nulla veriora sint quam
vestra dogmata. |
... он не только разбивает исходный «абзац» на несколько строк, разбивая каждую ноту ссылки, но также подталкивает все сноски к концу обработки.
С обработкой файла .docx вы можете извлекать сноски и легко связывать их с предложением, к которому они принадлежат. Способ обработки .doc, конечно, довольно бесполезен для моих целей индексирования. В самом деле, я не могу понять, как исходные 4 "линии" могут быть идентифицированы как действительно принадлежащие к одному и тому же парафрагу.
Возможно, следует ожидать, что обработка Тикой устаревшего формата, такого как .doc, не так уж и прекрасна. Я теперь собираюсь взглянуть на фактический исходный код, который здесь задействован, предполагая, что я могу найти его среди многих, многих исходных банок, которые загрузил Gradle, но вместо того, чтобы настраивать код, есть более «обычный» способ модификации Tika's разбор заданного формата? Я немного искал, но ничего не нашел.
Конечно, другой подход может заключаться в преобразовании .doc-файлов (и .odt-файлов, см. Ниже) в .docx «на лету» для более качественного анализа.
PS Разбор LibreOffice .odt файлов (Open Document Format, ODF), не устаревший формат, также проблематичен. В частности, строка сноски/концевой сноски аналогично разделяется на несколько строк.
. Парсер .doc - https://github.com/apache/tika/blob/master/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java, чтобы сэкономить вам рыть через банки! – Gagravarr
Это выглядит как отличный совет. Но на самом деле в моем Tika API (1.14) org.apache.tika.parser.microsoft.WordExtractor просто распространяется из Object. (http://tika.apache.org/1.14/api/org/apache/tika/parser/microsoft/WordExtractor.html) Я посмотрю код для этого класса ... –