本文旨在给nutch添加二分法中文分词,可以预计的结果是汉字的索引不再是一个个字分开来的,从而会大大的增加搜索的准确率
修改的文件:NutchAnalysis.jj (在nutch的analysis包里面)
NutchAnalysis.jj
在TOKEN里面增加(前后有参照)
| <SIGRAM: <CJK> >
| <CHINAWORD: (<CHINESE><CHINESE>)>
{
//String newimage=new String();
//for (int i = 0; i < image.length()-1; i++){
// newimage += "" + image.charAt(i) + image.charAt(i + 1) + " ";
//}
//matchedToken.image += " ";
input_stream.backup(1);
}
// irregular words
| <#IRREGULAR_WORD: (<C_PLUS_PLUS>|<C_SHARP>)>
| <#C_PLUS_PLUS: ("C"|"c") "++" >
| <#C_SHARP: ("C"|"c") "#" >
修改
| <#CJK: // non-alphabets,but not chinese
[
"\u3040"-"\u318f",
"\u3300"-"\u337f",
"\u3400"-"\u3d2d",
"\uf900"-"\ufaff"
]
>
| <#CHINESE: // non-alphabets
[
"\u4e00"-"\u9fff"
]
>
| < #DIGIT: // unicode digits
[
"\u0030"-"\u0039",
...
修改
String term() :
{
Token token;
}
{
( token=<WORD> | token=<ACRONYM> | token=<SIGRAM> | token=<CHINAWORD>)
{ return token.image; }
}
然后javacc NutchAnalysis.jj
在nutch根目录下面运行ant进行编译,然后就可以测试抓去了,我们用luke来分析index所以,可以看到都是按照二分法进行索引的
但是现在localhost还不能搜索出来结果,是因为默认的搜索还是采用的单字分开的,下回将解释如何来修改以支持二分法分词