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分析器是用於全文本段的預設分析器,對於大部分西方語系來說是乙個不錯的選擇。它包括了以下幾點 預...