跳到主要內容

Apache Tika 抽取文本內容的好工具


Apache Tika,對於想要進行內容分析的人來說,絕對是個必要的工具。它是個抽取文字內容的工具箱,集結了POI、Pdfbox等多種函式庫以提取多種檔案內容。Apache Tika最大的優點,在於提供單一的提取界面,只要幾行,就能自動偵測並傳回文字。

還沒發現Apache Tika之前,我得要自己去判斷檔案類型,然後分別撰寫不同的程式碼,才有辦法讀取這些不同的檔案內容。而光是讀取Microsoft的Office文件就讓人傷透腦筋,因為.doc和.docx幾乎是完全不同的格式規範。這幾天試了Apache Tika後,果真覺得方便多了,可以把之前的程式碼都丟了。

public static void main(String[] args) throws Exception {
File file = new File("your/file");
String content = new Tika().parseToString(file);
System.out.println(content);
}

抽取檔案內容就是這麼簡單。然而,使用字串(String)在處理大檔案上有很大的缺點,因為它占用了太多的記憶體。Apache Tika提供了Reader的方式,傳回檔案內容的一個個字元,可以用BufferedReader接過來,一次處理一小段緩存。


public static void main(String[] args) throws Exception {
File file = new File("your/file");
Reader reader = new Tika().parse(file);
BufferedReader br = new BufferedReader(reader);
try {
String line;
while ( (line = br.readLine()) != null) {
System.out.println(line);
}
} finally {
br.close();
}
}

以上是Apache Tika最簡便的使用方式,但它也提供進階的方式,讓你能夠進一步篩選資料。一個方法是應用不同的Parser來處理特定文件,另一個方式則是選擇特定的ContentHandler來處理特定內容。當然,兩種方法都可以應用和延伸。

public static void main(String[] args) throws Exception {
InputStream input = new FileInputStream("your/html/file");
ContentHandler handler = new BodyContentHandler();
Parser parser = new AutoDetectParser();
parser.parse(input, handler, new Metadata(), new ParseContext());
String bodyContent = handler.toString();
System.out.println(bodyContent);
input.close();
}

最後,再來看一個自動抽取網頁主要內文的例子,這大概是進行網路內容研究最重要的部分。在這個例子裡面,你還必須囊括HttpClient的函式庫(包含在Apache HttpComponents專案裡頭),用來擷取網頁的主要內容。

public static void main(String[] args) throws Exception {
HttpGet httpget = new HttpGet("http://kuanming-style.blogspot.tw/");
HttpEntity entity = null;
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(httpget);
entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
BodyContentHandler handler = new BodyContentHandler();
BoilerpipeContentHandler boilerpipHandler =
new BoilerpipeContentHandler(handler);
Metadata metadata = new Metadata();
Parser parser = new AutoDetectParser();
parser.parse( instream, boilerpipHandler,
metadata, new ParseContext());
String content =
boilerpipHandler.toTextDocument().getContent();
System.out.println(content);
}
}

擷取網頁主要內容的函式庫來自boilerpipe,理論上在安裝Tika時也一併裝了。但是相關的API Javadocs,還是得回到boilerpipe的專案網頁。如果你覺得這個ContentHandler還不夠好,那麼你可能要寫一個自己的。

留言

熱門文章

OREO聖誕麋鹿 #差不多食譜

聖誕節就快到囉!今年我們用現成的材料,來做些簡單好玩的小東西。第一個登場的,就是有著紅鼻子的麋鹿。 3隻「OREO聖誕麋鹿」差不多需要這些材料: OREO餅乾 ...... 3片 蝴蝶餅 ...... 3-6片(掰斷有失敗的機會) 餅乾棒 ...... 3根(我用百力滋) 眼睛糖 ...... 6顆 紅色m&m's ...... 3顆(紅鼻子) 融化的巧克力 ...... 適量(黏著用) 「OREO聖誕麋鹿」差不多是這麼做的: Step 1. 準備好材料 計算一下自己想要做多少隻OREO聖誕麋鹿,按照材料表把需要的餅乾糖果給買回來。材料備齊之後,就把巧克力拿去用微波爐融化備用。沒有微波爐的也可以隔水加熱,想辦法把巧克力融化就可以。 Step 2. 製作麋鹿 再過來就要開始製作麋鹿了!先把OREO轉開,留下有奶油的那邊,待會方便把餅乾稍壓一下固定。 把蝴蝶餅掰斷成鹿角的樣子,沾上巧克力,擺到OREO上面。餅乾棒同樣沾上巧克力,一樣放上OREO。接著蓋上OREO,稍微壓一下。 這邊可以大膽去擺,在巧克力凝固前都可以調整。要是發現黏不太住,多沾點巧克力再試試。 Step 3. 擺出表情 接下來要用眼睛糖和紅色m&m's做出麋鹿的表情。用筷子將眼睛糖和m&m's沾上巧克力,黏到眼睛鼻子相應的位置就可以。 沒有辦法買到眼睛糖的,可以用白巧克力先畫出眼白,再用黑巧克力點出眼珠。紅鼻子也可以自己換成橘色、綠色、藍色等等不同的m&m's。 Step 4. 讓巧克力凝固 表情做好之後不要馬上移動,得要有點耐心讓巧克力凝固。要不然悲劇馬上就會發生,不是表情變扭曲,就是整支麋鹿散架。 等巧克力凝固後,就可以像棒棒糖那樣拿起來玩耍了。再來杯熱牛奶,整隻麋鹿給他泡下去也很有趣。 最後幫大家整理一下「OREO聖誕麋鹿」的做法: 巧克力用微波爐加熱融化備用。 轉開OREO。 蝴蝶餅掰成鹿角的形狀,沾巧克力後放上OREO餅乾。 餅乾棒同樣沾上巧克力,擺上OREO餅乾。 蓋上餅乾,在眼睛糖和紅色m&m’s背後沾上巧克力,黏到眼睛和鼻子相應的位置。 稍微等一下,讓巧克力凝固就好囉!

差不多食譜:手工巧克力餅乾 Chocolate Cookies

又是手工餅乾,最近一連出了兩份餅乾食譜,這個「手工巧克力餅乾」已經是第三份了。會不會有更多呢?我可以告訴大家,這是肯定的。 要怪就怪這個陰鬱的冬季雨天,哪裡都不方便去,也懶得出去。餅乾櫃空在那邊已經很久了,雖然有時候會嘴饞,但也沒有迫切去補貨的必要。反正經常開伙,平常該有的材料都會有,自己弄個成分完全透明的零食,也是個不錯的選擇。再說,用烤箱進行烘焙時,房間會變得比較乾燥,也比較溫暖。在夏天是個折磨,但到了冬天,這種感覺還滿不錯的。 話不多說,開始進行這一道「手工巧克力餅乾」的準備工作。

差不多食譜:檸檬餅乾 Lemon Biscuits

寒流來襲,氣象局持續發布低溫特報。在這冷颼颼的冬日,差不多食譜為您準備了一支有溫度的影片食譜「檸檬餅乾 Lemon Biscuits」。檸檬的酸味能夠讓您有清新的味覺,用檸檬做的餅乾則讓您解除冬日過份進補的油膩感,同時又滿足一直想吃東西的衝動。但我可沒說這種吃法的卡路里不高,對您的身材不會有影響。恐怕您還是得自己稍微節制些! 不過,說老實話,我單純是因為天氣太冷,所以把烤箱拿來當暖爐用。坐在烤箱後面等待餅乾完成,果真有暖呼呼的感覺。