【发布时间】:2017-06-21 05:41:57
【问题描述】:
我正在开发一个应用程序,它将对不同格式的大文件进行 Lucene 索引(将它们分成多个 org.apache.lucene.document.Documents)。至少在最初的方法中,每个“Lucene 文档”都由一个“段落”组成。
作为一般规则,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 格式的相同文件 Tika 为您提供多个“行”:
|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“行”识别为真正属于同一个段落。
也许可以预料,Tika 对 .doc 等过时格式的处理并不是那么美妙。我现在打算看看这里涉及的实际源代码,假设我可以在 Gradle 下载的许多源 jar 中找到它,但不是调整代码,而是有一种更“传统”的方式来修改 Tika 的解析给定格式?我做了一些搜索,但一无所获。
当然,另一种方法可能是将 .doc 文件(和 .odt 文件,见下文)“即时”转换为 .docx 以获得更高质量的解析。
PS 解析 LibreOffice .odt 文件(开放文档格式,ODF),一种非过时的格式,同样存在问题。 特别是,包含脚注/尾注的行类似地被拆分为多个行。
【问题讨论】:
-
.doc 解析器是github.com/apache/tika/blob/master/tika-parsers/src/main/java/…,以节省您在 jar 中挖掘的时间!
-
这看起来不错。但实际上在我的 Tika API (1.14) org.apache.tika.parser.microsoft.WordExtractor 中只是从 Object 扩展而来。 (tika.apache.org/1.14/api/org/apache/tika/parser/microsoft/…) 我来看看那个类的代码...
标签: java parsing ms-word lucene apache-tika