Lucene筆記31-Lucene的擴充套件-Tika介紹
阿新 • • 發佈:2018-11-29
一、Tika介紹
Tika是2008年由Apache組織開發的專案,主要用於開啟不同的文件。Tika的下載請點選這裡。在處理文件索引的時候,有時候會碰到pdf,html,word這種非純文字的內容,這些內容怎麼來建立索引呢,這就要用到Tika了,Tika像一個橋樑一樣,連通了IndexWriter和上層的各種檔案型別。
二、Tika的使用
使用java -jar命令來開啟剛剛下載的jar包。開啟一個word文件,在View標籤下,點選Formatted Text,可以檢視純文字的資訊,點選其他的可以看到其他樣式的資訊,自行點開檢視即可。
三、專案中的使用
匯入上面下載的tika-app-1.19.1.jar,先來看一種不使用Tika情況下對文件的索引,索引之後,發現成功了,也沒有報錯,好吧,那我們通過Luke來看看它索引的什麼東西吧。我們可以發現,索引資訊並沒有什麼價值,因為我們看不懂。之後,我們寫一個Tika的測試例子,將一個pdf中的文字提取出來。
package com.wsy; import com.chenlb.mmseg4j.analysis.MMSegAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.sax.BodyContentHandler; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import java.io.*; import java.util.Date; public class TikaTest { private static File file = new File("C:\\Users\\Chris\\Desktop\\自如租房合同.pdf"); public void indexWithOutTika() { try { Directory directory = FSDirectory.open(new File("E:\\Lucene\\IndexLibrary")); IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new MMSegAnalyzer())); Document document = new Document(); document.add(new Field("content", new FileReader(file))); indexWriter.addDocument(document); indexWriter.close(); } catch (IOException e) { e.printStackTrace(); } } public String fileToText(File file) { Parser parser = new AutoDetectParser(); InputStream inputStream = null; try { inputStream = new FileInputStream(file); ContentHandler contentHandler = new BodyContentHandler(); Metadata metadata = new Metadata(); // 可以自定義metadata的值,同理,可以設定很多的值,這裡就不演示了 // 對於下面輸出時候已經有了的值,不能修改,對於沒有展示的值,可以自定義設定 metadata.set(Metadata.AUTHOR, "王劭陽"); ParseContext parseContext = new ParseContext(); parseContext.set(Parser.class, parser); parser.parse(inputStream, contentHandler, metadata, parseContext); for (String name : metadata.names()) { System.out.println(name + "-->" + metadata.get(name)); } return contentHandler.toString(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (TikaException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } public static void main(String[] args) { TikaTest tikaTest = new TikaTest(); tikaTest.indexWithOutTika(); String text = tikaTest.fileToText(file); System.out.println(text); } }