论坛首页 Java企业应用论坛

Lucene中文分词“庖丁解牛”

浏览 129964 次
该帖已经被评为精华帖
作者 正文
   发表时间:2007-03-11  
楼主,不知道你开发的KI_CAnalyzer 支持不支持highlighter(lucene contribution包里的)关键词加亮,为什么我的返回中搜索"人"这个关键词的话,会加亮诸如"高层人士","管理人员"...等等这些不太想要的词,是不是有点越俎代庖了!
0 请登录后投票
   发表时间:2007-03-22  
楼主,怎么不把整个分词系统的类图画下,好让我们这些菜鸟快速看明白这个结构。
0 请登录后投票
   发表时间:2007-03-23  
楼主,我看了下源码,有两个类:KnifeBox和Paoding在闲着,这个庖丁Paoding怎么背了一堆kinfe跑到一边儿玩去了呢?
0 请登录后投票
   发表时间:2007-03-23  
shaquan6776 写道
楼主,我看了下源码,有两个类:KnifeBox和Paoding在闲着,这个庖丁Paoding怎么背了一堆kinfe跑到一边儿玩去了呢?
Paoding末有闲着,背着刀的他不至于跑不见了,那他可真忽悠人了。

看看XTokenizer.java,Paoding在XTokenizer公司工作。

------------

偶最近一段来项目都比较紧 所以连paoding的hosting没做,也没有做其他的前进。sorry sorry!

--------------------------

有些问题没有进行反馈或解决 如果有出现问题 或提议, 哥们你自己动手改改代码然后提交上来 我来整合发布
0 请登录后投票
   发表时间:2007-03-26  
Qieqie 写道
shaquan6776 写道
楼主,我看了下源码,有两个类:KnifeBox和Paoding在闲着,这个庖丁Paoding怎么背了一堆kinfe跑到一边儿玩去了呢?
Paoding末有闲着,背着刀的他不至于跑不见了,那他可真忽悠人了。

看看XTokenizer.java,Paoding在XTokenizer公司工作。

------------

偶最近一段来项目都比较紧 所以连paoding的hosting没做,也没有做其他的前进。sorry sorry!

--------------------------

有些问题没有进行反馈或解决 如果有出现问题 或提议, 哥们你自己动手改改代码然后提交上来 我来整合发布
楼主:根据你的提示,我看仔细看了看XTokenizer.java,的确没有发现
Paoding!难道他矿工了不成!故,特帖源码以示证据。
public final class XTokenizer extends TokenStream implements Collector {

private final Reader input;

private static final int bufferLength = 128;

private final char[] buffer = new char[bufferLength];

private int offset;

private final Beef beef = new Beef(buffer, 0, 0);


private int dissected;


private Knife knife;

private TokenCollector tokenCollector;

private Iterator<Token> tokenIteractor;

public XTokenizer(Reader input, Knife knife, TokenCollector tokenCollector) {
this.input = input;
this.knife = knife;
this.tokenCollector = tokenCollector;
}

public TokenCollector getTokenCollector() {
return tokenCollector;
}

public void setTokenCollector(TokenCollector tokenCollector) {
this.tokenCollector = tokenCollector;
}

public void collect(String word, int offset, int end) {
tokenCollector.collect(word, this.offset + offset, this.offset + end);
}

// -------------------------------------------------
@Override
public Token next() throws IOException {
// 已经穷尽tokensIteractor的Token对象,则继续请求reader流入数据
while (tokenIteractor == null || !tokenIteractor.hasNext()) {
int read = 0;
int remainning = -1;//重新读入字符时,buffer中还剩下的字符数,-1表示当前暂不不需要从reader中读入字符
if (dissected >= beef.length()) {
remainning = 0;
}
else if (dissected < 0){
remainning = bufferLength + dissected;
}
if (remainning != -1) {
if (remainning > 0) {
System.arraycopy(buffer, -dissected, buffer, 0, remainning);
}
read = input.read(buffer, remainning, bufferLength - remainning);
int charCount = remainning + read;
if (charCount < 0) {
// reader已尽,按接口next()要求返回null.
return null;
}
if (charCount < bufferLength) {
buffer[charCount ++] = 0;
}
// 构造“牛”,并使用knife“解”之
beef.set(0, charCount);
offset -= remainning;
dissected = 0;
}
dissected = knife.dissect((Collector)this, beef, dissected);
offset += read;// !!!
tokenIteractor = tokenCollector.iterator();
}
// 返回tokensIteractor下一个Token对象
return tokenIteractor.next();
}

// -------------------------------------------------

@Override
public void close() throws IOException {
super.close();
input.close();
}

}(注:去掉了注释!)
0 请登录后投票
   发表时间:2007-03-26  
不好意思,原来是在XFactory里用到的!我用 Eclipse的Open Call
Hierarchy竟然没发现!郁闷
另外:我向base.dic文件里增加词语,测试的时候会打印出一句:“出现这个文字,表示输入的词语排序错误,请确保词典排序正确>>>>>>>>>”。我找到源码,
if (subs.containsKey(key)) {
System.out.println("出现这个文字,表示输入的词语排序错误,请确保词典排序正确>>>>>>>>>"
+ hashChar);

}

看的不甚明白,请问楼主,字典里的词语存放还有必须特定的顺序吗?
0 请登录后投票
   发表时间:2007-03-26  
对于这个全文检索我一直有一个疑惑,希望大家能解答。全文检索的索引是怎么做的?

因为分词以后,其实分出来的词加起来要比原先的内容还要多,对于如此大量的索引数据,lunce是怎么处理的? 索引是如何组织检索的?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics