lucene 同義詞分析器

2021-08-30 09:33:08 字數 1480 閱讀 7590

這個分析器用synonymfilter過濾器對standardanalyzer類進行封裝,當向這個過濾器輸入各個項時,會對這些項進行緩衝,並使用棧儲存這些項的同義詞

public class synonymfilter extends tokenfilter{

publicstatic final string token_type_synonym="synonym";

privatestack synonymstack;

privatesynonynengine engine;

publicsynonymfilter(tokenstream in,synonymengine engine){

super(in);

synonymstack=new stack();//快取同義詞

this.engine=engine;

publictoken next() throws ioexception{

if (synonymstack.size()>0){//如何還有當前詞的同義詞沒有輸出,則輸出

return (token) synonymstack.pop();

token token=input.next();//讀取新詞

if (token==null) {

return null;

addaliasestostack(token);//儲存新詞的同義詞

returntoken;

private voidaddaliasestostack(token token) throws ioexception{

string synonyms=engine.getsynonyms(token.termtext());

if (synonyms==mull) return;

for (int i=0;itoken syntoken=newtoken(synonyms[i],token.startoffset(),token.endoffset(),token_type_synonym);

syntoken.setpositionincrement(0);

synonymstack.push(syntoken);

以下這個介面是關鍵,可以自由實現,目的是返回s的同義詞陣列

public inte***ce synonymengine{

string getsynonyms(string s) throws ioexception;

對於這個介面要小心使用,在查詢時不必列出所有的同義詞,如下例

query query=queryparser.parse("\"foxjumps\"","content",synonymanalyzer);

hits hits=searcher.search(query);

是會出錯的,找不到任何結果,因為queryparser不會區別位置增量,所以位置增量為0這乙個表明同義的特徵無法體現,會將"foxjumps"直接加上同義詞解釋為"fox jumps hops leaps"

Lucene中的同義詞

lucene的tokenfilter中,有synonymfilter和synonymgraphfilter兩種來處理同義詞。synonymfilter不能很好的處理多詞同義詞,已經被棄用,建議使用synonymgraphfilter 假設有如下文字 fast wi fi network is dow...

常見同義詞

目錄originate from derive from stem from spring from giant n.故事中常為殘酷而愚蠢的 巨人 巨人 巨獸 巨型植物 大公司 強大的組織 adj.巨大的 特大的 偉大的 vast adj.遼闊的 巨大的 龐大的 大量的 tremendous adj...

同義詞(別名)

同義詞 別名 注意 如果檢視其他使用者的表,報錯表或檢視不存在 可能是許可權不足 需要授權 conn as sysdba grant select on hr.employees to scott conn scott tiger select count from hr.employees con...