:::

使用Apache Tika指令列抽取文件的內文 / Using Apache Tika Extract File’s Content

image

如果要做檔案中的全文檢索服務,那就要先把檔案的內文抽取出來轉換成字串,這樣才能提供全文檢索引擎進行索引。Apache Tika是一個萬用型的檔案內文抽取工具,我們可以用指令列來操作Tika,就能從PDF、Microsoft Office、Open Document、純文字檔案等文件抽取內文。非常好用!


Apache Tika下載 / Down Apache Tika

tika

Apache Tika原本是Java的一個套件,但它也提供了指令端的操作方式。要使用指令端來操作,就必須先取得tika-app-x.xx.jar檔案。目前最新版是tika-app-1.14.jar。下載網址如下:

Tika支援格式 / Support Formats

Tika支援三十幾種的檔案格式,根據Content Extraction with Tika這篇的說明,支援格式如下:

  • 壓縮檔案:因為壓縮檔會在一個檔案內包含多個檔案,所以Tika會將全部包含在內的檔案抽取出來。
    • .tar
    • .jar
    • .zip
    • .bzip2
    • .gz
    • .tgz
  • 文字檔案:
    • .doc (MS Word Document)
    • .xls (MS Excel Document)
    • .ppt (MS PowerPoint Document)
    • .rtf (Rich Text Format)
    • .pdf (Adobe Portable Document Format)
    • .html
    • .xhtml
    • OpenDocument
    • .txt (Plain text)
  • 圖片檔案:
    • .bmp
    • .gif
    • .png
    • .jpeg
    • .tiff
  • 聲音檔案:
    • .mp3
    • .aiff
    • .au
    • .midi
    • .wav
  • 其他格式:
    • .pst (Outlook mail)
    • .xml
    • .class (Java class files)

上面的圖片、聲音等檔案的抽取似乎並不是OCR影像辨識或是聲音辨識,而只是抽取metadata而已。

示範檔案 / Demo Files

為了方便示範,我也找幾個不同種類的檔案來試著抽取全文看看:


指令列用法 / Command Line Utility Usage

使用指令列的時候必須先安裝Java工具。各種作業系統安裝Java的方式不同,請自行研究。如果順利安裝好的話,應該可以用「java –version」輸出正常的訊息,例如下圖:

image

tika指令列的用法如下:

java -jar [tika-jar-path] -t [file-path]

如果是在Linux環境下,那還需要加上額外的參數,以確保Tika將檔案正確輸出成UTF8編碼,避免中文變成「?」:

java -Dfile.encoding=UTF8 -jar [tika-jar-path] -t [file-path]

指令當中有兩個位置需要由你指定,這兩個位置最好都以絕對路徑表示:

使用示範 / Demo

Windows

Windows執行的指令可能是:

java -jar d:\tika-app-1.14.jar -t https://docs.google.com/spreadsheets/d/1Sq2XapdnErl-vrj6mfWJPqaUDs17PtwgeMdZ8Df-pA4/export?format=ods

執行結果如下:

image

Linux

如果是在Linux中執行,指令可能是:

java -Dfile.encoding=UTF8 -jar /opt/tika-app-1.14.jar -t https://docs.google.com/spreadsheets/d/1Sq2XapdnErl-vrj6mfWJPqaUDs17PtwgeMdZ8Df-pA4/export?format=ods

執行結果如下:

image

這樣就能簡單抽取文件的內文啦!


轉換成HTML / Convert Files to HTML

在上面的例子中,我使用了-t參數將檔案轉換成純文字輸出,但我們也可以用-h參數來將檔案轉換成HTML,並輸出到指定檔案中。

在Windows環境下執行的指令如下:

java -jar d:\tika-app-1.14.jar -h https://docs.google.com/spreadsheets/d/1Sq
2XapdnErl-vrj6mfWJPqaUDs17PtwgeMdZ8Df-pA4/export?format=ods > output.html

最後可以輸出一個output.html檔案,打開來可以看到以下畫面:

image

網頁裡面是用HTML所撰寫的表格喔。

image


小結 / In closing

在很久以前,我也在DSpace做過從文件中抽取內文的這種工作。詳細請看「DSpace擴增MediaFilter格式(安裝篇)」這篇。因為DSpace只能夠抽取PDF格式的內文,所以那時候的思維是將各種檔案轉換成PDF,這樣就能讓DSpace順利去進行索引。那時候使用的工具是OpenOffice跟JODconverter搭配使用,OpenOffice負責將各種文件轉換成PDF,而JODconverter則是跟OpenOffice溝通。但實際上這種做法非常難用。先不說OpenOffice很多時候無法正常讀取各種文件,而OpenOffice轉換的過程還相當吃記憶體,甚至容易造成當機。最後我只做了一個堪用的轉換器,雖然常常當機,但大致上還是能夠使用。

現在,只要使用Apache Tika,就能夠克服在DSpace那時候遇到的各種問題。不僅是從各種檔案抽取出有待索引的文字,也能夠用輸出成HTML的方式產生各種預覽檔案。

我終於超越那時候的自己了,真令人開心啊。