使用Tika進行非結構化內容的讀寫 1

2021-06-09 22:21:44 字數 1366 閱讀 5348

資料結構

lucene

全文檢索

工作xml

字首時間在使用jackrabbit作非結構化內容的訪問,當問到當訪問乙個word文件時,jackrabbit能不能對word文件裡面的內容作全文檢索呢。回去查了一下相關的文件,是可以的,而且用的是乙個叫tika的工具。

tika原先是乙個lucene的子專案,即對內容作元資料抽取用。更多的時候,是對乙個平時所用的文件類資料作資訊的進一步讀取,這些資訊是隱藏在文件本身的。這就要求有乙個統一的工具來做這些事情,而tika就提供了乙個統一的呼叫介面來完成這些工作。

tika通過乙個parser和乙個contenthandler來進行文件分析和處理,其中parser負責解析具體的文件,當解析到需要進行處理的時候,呼叫contenthandler進行解析內容的處理。contenthandler(org.xml.sax)是乙個用於處理sax解析的程式介面,當parser解析到某些內容時(如節點之間的資訊,以及節點本身的資訊)時,便會根據需要去呼叫contenthandler的相關處理方法。即乙個負責解析,乙個負責處理,兩者相互協作,最終將資訊通過一定的手段返回回來。

parser是乙個介面,對不同的文件進行處理時,需要尋找具體的解析器來實現具體的解析工作。tika通過mimetype來實現對乙個文件的具體識別工作,即識別出乙個文件是什麼樣的型別,然後再根據型別尋找相應的parser。最後呼叫具體實現的parser來完成parse工作。

contenthandler也是乙個介面,對不同的資訊進行處理時,需要自己呼叫具體的資訊處理類。一般來說,如果只關心文件內的內容(即有資訊的地方),可以使用writeoutcontenthandler。這個handler將所以被解析到的資訊通過乙個output或write輸出到呼叫者提供的輸出流中,這樣最終可以讀取這個writer中的資料。例如,parseutils中的getstringcontent(工具方法),即通過writeroutcontenthandler進行資訊的讀取,最終返回這些資訊。

除這些資訊之外,還有一些資訊需要在處理的過程中被解析和儲存,比如乙個文件的標題,作者以及contenttype等。在tika中,這些資訊被儲存在乙個叫metadata的物件中。metadata儲存了很多與具體文件相關的值,它以乙個map的形式,儲存相應的元資料資訊值。如對於word,它會儲存其中的author,keywords這些資訊。這些資訊對於用一些關鍵資訊進行文件檢索非常有用。

看整個處理流程,可以用下面的圖來表示:

在具體實現中,用到了大量的裝飾器,將乙個parser包裝在另乙個parser中,同時也是將乙個contenthandler包裝在另乙個handler中,所以在進行程式定位時很麻煩。但簡單點來說,還是將底層進行的parser進行上層包裝來進行高階的資訊解析,最後返回相應的資訊。具體的**邏輯實現,參考使用tika進行非結構化內容的讀寫-2.

使用Tika進行非結構化內容的讀寫 1

字首時間在使用jackrabbit作非結構化內容的訪問,當問到當訪問乙個word文件時,jackrabbit能不能對word文件裡面的內容作全文檢索呢。回去查了一下相關的文件,是可以的,而且用的是乙個叫tika的工具。tika原先是乙個lucene的子專案,即對內容作元資料抽取用。更多的時候,是對乙...

結構化資料和非結構化資料的區別 非結構化資料

據 idc 2018 年到 2025 年之間,全球產生的資料量將會從 33 zb 增長到 175 zb,復合增長率達到 27 其中超過 80 的資料都會是處理難度較大的非結構化資料。預計到 2030年全球資料總量將達到 3,5000eb。由於非結構化資料的資訊量和資訊的重要程度很難被界定,如何對其進...

結構化 半結構化和非結構化資料

在實際應用中,我們會遇到各式各樣的資料庫如nosql非關聯式資料庫 memcached,redis,mangodb rdbms關聯式資料庫 oracle,mysql等 還有一些其它的資料庫如hbase,在這些資料庫中,又會出現結構化資料,非結構化資料,半結構化資料,下面列出各種資料型別 結構化資料 ...