java 分析器解析

2021-05-17 12:50:59 字數 3809 閱讀 6179

1、語彙單元的組成:

1)經過分析產生的基本單元。在索引時,lucene使用特定的分析器來處理需要被語彙單元化的指定域,並將每個語彙單元以項的形式寫入索引。

2)起點偏移量是指語彙單元文字的起始字元在原廣西中的位置,而終點的偏移量則表示語彙單元終止字元的下乙個位置。

3)文字被語彙單元化後,相對於前一語彙單元的位置資訊被儲存為位置增量值。所有的內建語彙單元將位置增量的預設值設定為1,表示所有語彙單元是連續的,位置上是乙個緊接乙個的。

2、語彙單元轉換為項

1)當文字在索引過程中經過分析後,每個語彙單元做為乙個項被傳遞給索引。

2)位置增量是語彙單元攜帶到索引中的惟一的附加元資料。

3)起點和終點偏移量和語彙單元型別都被拋棄了-這些元資料僅在分析過程中使用。

4)位置增量使得當前語彙單元和前乙個語彙單元 聯絡起來。位置增量為1,表示每個單詞存於域中唯一且連線的位置。

5)位置增量大於1,允許單詞之間有空隙。比如說這些空隙上的被分析器刪除

6)位置增量為0的語彙單元,會將該語彙單元放置在前乙個語彙單元的位置上。通常用於表示單詞的同義詞。

3、tokenstream(基類包括next()和close()方法 )

1)2個不同的子類

a)tokenizer:將reader物件中的資料切分為語彙單元。將string物件包裝在stringreader中,進行語彙單元的切分。處理單個字元。

具體又有以下子類:

a)chartokenizer:其他基於字元的tokenizer類的父類,包含抽象方法istokenchar()。當istokenchar()==true時,輸出連續的語彙單元塊。該類能對字元規格化處理。token物件限制的最大字元個數為255個

b)whitespacetokenizer:istokenchar()值為true時的chartokenizer子類,用於處理所有非空格的字元

c)lettertokenizer:istokenchar()值為true並且character.isletter()值為true時的chartokenizer類

d)lowcasetokenizer:將所有字元小寫化的lettertokenizer

e)standardtokenier:複雜的基於語法的語彙單元切分器,用於輸出高階型別的語彙單元,如e-mail位址等。每個輸出的語彙單元標記為乙個特殊型別,這些型別中的一部分需要使用standardfilter類特殊處理。

b)tokenfilter:允許你將多個tokenstream物件連線在一起。乙個tokenstream物件被傳遞給tokenfilter時,由tokenfilter對其進行增加、刪除和更改等,用於處理單詞。

a)lowercasefilter:將語彙單元文字轉換為小寫形式

b)stopfilter:移除指定集合中的信用詞

c)porterstemfilter:利用poter詞幹提取演算法將語彙單元還原為其詞幹。

d)standardfilter:接收乙個standardtokenizer物件做為引數。

4、例子:關於tokenstream

public class ananlyzerdemo;

private static final analyzer analyzers=new analyzer{

newwhitespaceanalyzer(),

new******analyzer(),

new stopanalyzer(),

new standerdanalyzer()

public static void main(string args)throws ioexception{

stringstrings=examples;

if(args.length>0) strings=args;

for (inti=0;iprivate static void analze(string text) throws ioexception{

system.out.println("analyzing/""+text+"/"");

for (inti=0;ianalyzer analyzer=analyzers[i];

string name=analyzer.getclass().getname();

name=name.substring(name.lastindexof(".")+1);

system.out.println("  "+name+":");

system.out.print("   ");

anaylyzerutils.displaytokens(analyzer,text);

system.out.println("/n");

public class analyzerutils{

public class tokentokenfromanalysis(analyzer analyzer,string text ) throwsioexception{

tokenstream stream=analyzer.tokenstream("contents",newstringreader(text));

arraylist tokenlist=new arraylist();

while (true){

token token=stream.next();

if (token==null) break;

tokenlist.add(token);

return(token) tokenlist.toarray(new token[0]);

public static void displaytokens(analyzer analyzer,string text)throws ioexception{

token tokens=tokensfromanalysis(analyzerm,text);

for (int i=0;itoken token=tokens[i];

system.out.print("["+token.termtext()+"]");

//...............其他方法

深入分析token物件

public static void displaytokenswithfulldetails(analyzeranalyzer,string text) throws ioexception{

token tokens=tokensfromanalysis(analyzer,text);

int position =0;

for (int i=0;itoken token=tokens[i];

int increment=token.getpositionincrement();

if (increment>0){

position=position+increment;

system.out.println();

system.out.print(position+":");

system.out.print("["+token.termtext()+":"+token.startoffset()

+"- >"+token.endoffset()+":"+token.type()+"]");

publci static void main(string args) throws ioexception{

displaytokenswithfulldetails(new ******analyzer(),"the quick brownfox....");

下面是這段程式的輸出結果

1:[the:0->3:word]

2:[quick:4->9:word]

3:[brown:10-15:word]

4:[fox:16->19:word]

分析與分析器

分析 包含下面的過程 分析器執行上面的工作。分析器 實際上是將三個功能封裝到了乙個包裡 字元過濾器 首先,字串按順序通過每個 字元過濾器 他們的任務是在分詞前整理字串。乙個字元過濾器可以用來去掉html,或者將 轉化成 and 分詞器其次,字串被 分詞器分為單個的詞條。乙個簡單的分詞器遇到空格和標點...

詞法分析器

這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。本次實驗中我用mysql資料庫儲存自動機狀態表,這樣做的目的只是為了在後續的課設中可以繼續使用現在的 這一段 並不是太完善,發出來只是為了太完善。裡面還有很多問題,比如對字元和字串的識別,不知道為什麼資料庫無法將 和 轉換到我...

配置分析器

第三個重要的索引設定是analysis部分,用來配置已存在的分析器或針對你的索引建立新的自定義分析器。在 分析與分析器 我們介紹了一些內建的 分析器,用於將全文本串轉換為適合搜尋的倒排索引。standard分析器是用於全文本段的預設分析器,對於大部分西方語系來說是乙個不錯的選擇。它包括了以下幾點 預...