【发布时间】:2021-10-31 06:22:13
【问题描述】:
我正在使用以下命令在 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 可能会将其解释为一封电子邮件 - 如果您获取元数据,您会在那里找到其余信息吗?
-
@Gagravarr:当我运行检测时,它显示它是消息/rfc822 类型的电子邮件。但我拥有的所有文件都是包含 OCR 操作内容的文本文件。我只想对文本进行操作并将元数据单独存储。所以我只想让 TIKA 提供文件中的文本,然后我可以翻译和分析。如果 Tika 只允许它自己的解释而不是使用 .txt 扩展名,那么它将不适用于我的应用程序。有没有办法强制检测到文件扩展名(即txt)?
-
这很有趣,因为如果我将 0d 0a 添加到文件的开头,它会检测到一个文本文件并且工作正常。
-
如果知道是文本文件,可以跳过
AutoDetectParser,直接调用文本解析器。或者,在元数据上设置内容类型属性,然后调用DefaultParser,它会为您调用文本解析器 -
@Gagravarr - 听起来不错。我一直在使用服务器模式,将按照您的建议使用 API。 Tx 寻求帮助。
标签: apache-tika