Carrot2 in action 初步印象

2022-08-05 17:54:13 字數 3694 閱讀 4134

rawcluster

:聚類中的類別單位

rawcluster.getdocuments()

:獲得該類的文件列表

rawdocument

:每個類的文件單位

stc:字尾樹表示法

2008-11-13

carrot2的組建(components)的介紹:

1. 輸入(

input

):產生聚類文字的組建。

carrot2

針對目前的幾個主要搜尋引擎

(yahoo:

carrot2-input-yahooapi.jar, google, msn search)

和開源搜尋引擎(

lucene:

carrot2-input-lucene.jar

)以及xmls

介面(such as rss or opensearch:

carrot2-input-xml.jar).

,提供了幾個預設的

輸入組建。除此之外,你也可以自己重寫自己的輸入組建。

localcomponentfactory

lucenelocalinputcomponentconfig

lucenelocalinputcomponentfactoryconfig

// create lucene input component factory.

//finallocalcomponentfactory input =newlocalcomponentfactory()

};// add lucene input as 'lucene-myindex'

controller.addlocalcomponentfactory(

"lucene-myindex"

, input);

2. 過濾器(

filters):

carrot2

中的過濾器其實就是聚類組建和一些過濾操作的集合。

carrot2

自帶有一定數量的過濾器,每一個過濾器都

執行一個不同的演算法(如

lingo,k-mean and so on

),並且根據處理鏈中

,在它之前的過濾器的不同和以及自身配置的不同,每個過濾器會有一些不同的要求設定。

eg:carrot2-filter-lingo.jar,

carrot2-filter-haog.jar,

carrot2-filter-stc.jar

finallocalcomponentfactory lingo =newlocalcomponentfactory()

// for more verbose configuration.

returnnewchineselingolocalfiltercomponent();}};

// add the clustering component as "lingo-classic"

controller.addlocalcomponentfactory(

"lingo-classic"

, lingo);

3. 輸出(

output

):當從聚類器獲得結果的時候,

carrot2

用輸出元件去對這些結果進行一些處理操作。實際上輸出元件處理的是介面“

rawcluster

”的例項。最簡單的處理方式就是把哲學聚類結果儲存沒在一個陣列中,直到所有的聚類操作完成;一個更高階一點的方式就是,聚類結果出來一個馬上進行輸出處理,而不是放在一個陣列中最後統一處理,這種凡是的實質就是一個與聚類操作(

filter

)的同步。

finallocalcomponentfactory output =newlocalcomponentfactory()

};// add the output component as "buffer"

controller.addlocalcomponentfactory(

"buffer"

, output);

話外話:

carrot2

中之所以很多地方都用到

”local”

來命名,這其實是由於歷史原因:在

carrot2

中曾經設計過一個用於遠端通訊的並行組建,雖然現在棄用了,但是與之相對的本地組建用“

local

”命名的方式一直沿用著。

2008-11-14

設計概要

1. carrot2

中localcomponent

是一下三種本地組建的超級幾口:

localinputcomponent

:用於接受使用者的查詢和處理初始資料

localfiltercomponent

:用於改變或者豐富資料

localoutputcomponent

:收集聚類結果或者對結果做一些處理,如用視覺化組建顯示這些結果等等

2. 組建初始化

在任何處理操作之前,元件和處理器(

processes

:localprocessbase

)被新增到一個組建容器,同時它們也會被一個控制(

controller

)元件所引用。這個控制元件不會再核心框架中被明確指定,因為它更有可能是應用相關的,即屬於應用層,已經超出了限定的範圍。然而,在框架中卻指定了一個

localcontrollercontext

介面,並且它會傳遞給每一個例項化的組建。其實

localcontrollercontext

主要是用來證實每個組建和處理器之間的相容性的,同時也為實現一些別的元件型別提供了可能性。

3. 處理器

一個本地處理器包含了處理查詢和在處理鏈中裝配元件的邏輯過程。這個介面(

localprocess

)的例項必須由框架的使用者來定義(也就是應用相關),因為他要決定哪些組建要被用於處理查詢而他們之間又是如何聯絡的。

localprocess

的行為規範是十分複雜的,一般鼓勵開發者去使用它的子類

localprocessbase

,可以過載它裡面的鉤子(

hook

)函式。

//// in the final step, assemble a process from the above.

//try));

}catch(initializationexception e)catch(missingcomponentexception e)

4. 查詢執行

當所有的處理器和組建都新增到控制器之後。控制器就會用一個

query

()(舊版如下)將一個查詢請求傳遞給本地處理例項。

public void object query(requestcontext context, string query) throws exception