2011-03-31 89 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