2011-03-31 85 views
2

是否存在Apache Tika中application/octet-stream类型的解析器?我想这是一个不可分析的流。从未知内容类型的文档中提取文本

我只需要解析ODS文档,MS文档和PDF文件。看来new Tika().parseToString(file);就够了。但我不知道内容类型未检测到时会发生什么 - >application/octet-stream是默认设置。如果我有机会从这些类型的文档中提取文本,但contentType检测器未检测到它们的类型。

我还应该尝试什么,而不是将文档返回给用户,告诉他它不支持格式。

或者真的是由此产生的application/octet-stream内容类型的信号,我们不能读这个?或者“你必须找出自己的方式来处理这个问题”?

回答

3

如果探测器不知道文件是什么,它会返回应用程序/八位字节流

而且,如果检测不知道它是什么,然后提卡将无法为它选择合适的解析器。 (最终你会用它执行EmptyParser无)

如果可以的话,通过在你的文件的名称,当你做了检测和分析,因为这会在某些情况下的检测帮助:

Metadata metadata = new Metadata(); 
metadata.set(Metadata.RESOURCE_NAME_KEY, filename); 
ParseContext context = new ParseContext(); 

Parser parser = new AutoDetectParser(); 
parser.parse(input, textHandler, metadata, new ParseContext()); 

此外,这是值得一试的蒂卡网站所支持的格式部分,以确保您的文件是那些地方有一个分析器 - http://tika.apache.org/0.9/formats.html

如果您的文件是在当前不支持的格式,那么你有两个选择(既不立即修复)。一种是帮助编写一个新的解析器(需要为该格式找到合适的Java库)。另一种方法是使用基于命令行的解析器(需要为您的平台找到可执行xhtml代的可执行文件,然后将其接入)

+0

谢谢,并且在Tika中如何处理MIME只想使用的文件扩展名的类型和范围?默认情况下,它会加载tika-mimetypes.xml文件中的所有MIME类型和文件扩展名,并将其加载到MimeTypes.types和MimeTypes.registry中。我是否必须创建自己的tika-mimetypes.xml?或者我可以加载与MIME类型定义不同的文件?只有加载文件的MimeTypes.getDefaultMimeTypes()。 – lisak 2011-04-05 10:43:45

+0

你的意思是你想删除某些默认情况下的MIME类型的检测吗?如果是这样,那么目前只有easy-ish选项是自定义tika-mimetypes.xml并且让你的版本在类路径中更早地出现,所以它被优先使用。如果您想要检测一些新的mimetypes,最简单的方法是提交一个补丁,以便将其包含在上游! – Gagravarr 2011-04-05 13:30:09

+0

我想删除90%的MIME类型的检测。只应检测与这些扩展名html,doc,docx,odt,txt,rtf,srt,sub,pdf,ods,odp,xls,ppt,msg相对应的MIME类型。应该拒绝具有不同MIME类型的其他文件。我使用ContainerAwareDetector和MimeTypes检测器作为后备检测器...我希望这是一个不错的选择 – lisak 2011-04-05 17:45:57