注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Koala++'s blog

计算广告学 RTB

 
 
 

日志

 
 

Lucene源代码分析[3]  

2009-07-02 16:16:30|  分类: Lucene |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关于TokenFilter我们先看一个最简单的LowerCaseFilter,它的next函数如下:

public final Token next() throws IOException {

    Token t = input.next();

 

    if (t == null)

       return null;

 

    t.termText = t.termText.toLowerCase();

 

    return t;

}

    没什么意思,就是把Token对象中的字符串换成了小写,你想看有意思的可以看PortStemFilter,剑桥大学出的那本Introduction to information retrieval中也提到过这种方法,34页。

    再看一个稍有一点意义的TokenFilterStopFilter,我们看一下

public static final Set makeStopSet(String[] stopWords) {

    return makeStopSet(stopWords, false);

}

 

public static final Set makeStopSet(String[] stopWords, boolean ignoreCase) {

    HashSet stopTable = new HashSet(stopWords.length);

    for (int i = 0; i < stopWords.length; i++)

       stopTable.add(ignoreCase ? stopWords[i].toLowerCase()

              : stopWords[i]);

    return stopTable;

}

 

public final Token next() throws IOException {

    // return the first non-stop word found

    for (Token token = input.next(); token != null; token = input.next())

{

       String termText = ignoreCase ? token.termText.toLowerCase()

              : token.termText;

       if (!stopWords.contains(termText))

           return token;

    }

    // reached EOS -- return null

    return null;

}

    makeStopSet是把所有要过滤的词加到stopTable中去(不清楚为什么不用HashSet),在next函数中,它过滤掉stopTable有的字符串。

    再来看一个简单的AnalyzerStopAnalyzernext函数:

public TokenStream tokenStream(String fieldName, Reader reader) {

    return new StopFilter(new LowerCaseTokenizer(reader), stopWords);

}

    记得这句话吗?Lucene中一个Analyzer通常由TokenizerTokenFilter组成,这里就是这句话的证据,我们先对reader传进来的字符串进行分词,再对它进行过滤。而其中的tokenStream当然就是我们在分词时要调用的那个函数了。

 

 

 

 

  评论这张
 
阅读(1092)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017