首页 > 解决方案 > 为什么 Tika 2.1 应用程序会忽略 .txt 文件中的文本?

问题描述

我正在使用以下命令从 Ubuntu 20.04 下的命令行使用 Tika 2.1 处理文件:

java -jar tika-app-2.1.0.jar -t test.txt

该文件是纯文本 ANSI 文件(所有字符都是 0x0 到 0x7f)。令人难以置信的是,当文本文件中存在特定字符串时,Tika 2.1 应用程序会忽略所有字符。

这是文本文件:

From:
Sent:
text

this is a test
testing 

next
last

这是输出:

this is a test
testing

next
last

为了表明这是一个没有格式化、没有 Unicode 2 字节序列等的纯 ANSI 文本文件,下面是 'od' 命令的输出:

0000000 7246 6d6f 0d3a 530a 6e65 3a74 0a0d 6574
0000020 7478 0a0d 0a0d 6874 7369 6920 2073 2061
0000040 6574 7473 0a0d 6574 7473 6e69 2067 0a0d
0000060 0a0d 656e 7478 0a0d 616c 7473

但是,如果我只是将“已发送:”更改为“已发送:”,则输出为:

From:
sent:
text

this is a test
testing

next
last

我一直在解决这个问题,但没有看到连接。如果我将“已发送:”附加到第一行:

From: Sent:
Sent:
text

this is a test
testing 

next
last

结果是:

this is a test
testing

next
last

但是,如果我在第二行将“Sent:”更改为“\Sent”,我会得到以下输出:

From: Sent:
\Sent:
text

this is a test
testing

next
last

这个文件:

From: Sent:
Sent:
Sent:
text

this is a test
testing 

next
last

输出结果:

this is a test
testing

next
last

但是,如果我将“Sent:”放在第一行或简单的 (0d 0a) 作为前两个字节,则输出很好。为什么第二行的开头似乎很重要,以及大写或小写工作但不是“已发送:”?为什么在“已发送”前面加上“\”会使其工作?我还在另一台机器上试过这个——一台运行 Ubuntu 18.04 并在 Windows 10 系统上运行 jar——两者都得到相同的结果。

Tika 对一个非常简单的文本文件的基本响应是怎么回事?我没有以任何方式改变罐子。这是从 Apache Tika 站点下载的 jar 文件。我错过了什么?

非常感谢任何信息。

标签: apache-tika

解决方案


Tika 将文本解释为电子邮件。这个具体的例子是电子邮件的文本提取并且包括某些关键字(例如,特定位置的“发件人:”和“发件人:”)。这就是为什么在文件开头添加其他字符时,它默认将其解释为纯文本文件。

我原以为解释顺序首先基于“.txt”扩展名,然后分析内容(在这种情况下,该文本文件没有任何元数据)。但这里的情况似乎并非如此。在考虑“.txt”扩展名之前,分析似乎是第一顺序。

该示例通过作为服务器运行的 Tika 运行。展望未来,我将使用 Tika API 并遵循评论者 (@Gagravarr) 提供的建议,跳过对 AutoDetectParser 的调用,在元数据上设置内容类型属性并通过 API 调用 DefaultParser。

发送给@Gagravarr 以寻求解决方案。


推荐阅读