为什么 Tika 2.1 应用程序会忽略 .txt 文件中的文本?
Why does Tika 2.1 app ignore text in a .txt file?
我正在 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 文件。我错过了什么?
非常感谢任何信息。
Tika 将文本解释为电子邮件。这个具体示例是电子邮件的文本提取,包括某些关键字(例如,特定位置的“发件人:”和“已发送:”)。这就是为什么当在文件开头添加其他字符时,它默认将其解释为纯文本文件。
我原以为解释的顺序是先根据“.txt”扩展名,然后再分析内容(在这种情况下,该文本文件没有任何元数据)。但这里似乎并非如此。看来分析是第一位的,才考虑“.txt”扩展名。
示例是 运行 通过 Tika 运行ning 作为服务器。展望未来,我将使用 Tika API 并按照评论者 (@Gagravarr) 提供的建议跳过对 AutoDetectParser 的调用,在元数据上设置内容类型 属性 并通过 API.
发送给@Gagravarr 寻求解决方案。
我正在 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 文件。我错过了什么?
非常感谢任何信息。
Tika 将文本解释为电子邮件。这个具体示例是电子邮件的文本提取,包括某些关键字(例如,特定位置的“发件人:”和“已发送:”)。这就是为什么当在文件开头添加其他字符时,它默认将其解释为纯文本文件。
我原以为解释的顺序是先根据“.txt”扩展名,然后再分析内容(在这种情况下,该文本文件没有任何元数据)。但这里似乎并非如此。看来分析是第一位的,才考虑“.txt”扩展名。
示例是 运行 通过 Tika 运行ning 作为服务器。展望未来,我将使用 Tika API 并按照评论者 (@Gagravarr) 提供的建议跳过对 AutoDetectParser 的调用,在元数据上设置内容类型 属性 并通过 API.
发送给@Gagravarr 寻求解决方案。