最近研究Lucene搜索这一块,经过慎重考虑,最后选用了吕震宇吕大侠的SharpICTCLAS分词组件.这真是天降神器,在这里再次谢过张华平博士和吕大侠.
测试分词的过程中,发现分词器对有些特殊的汉字或者日文会抛出一些异常,跳到中断的代码位置,却也暂时没有时间去研究ICTCLAS本身的算法,为了应急,更改了一小部 分的代码,这部分修改当然不会改变算法流程了,因为这只是弥补了先前可能被作者无意忽略的语法层面的问题,为了谨慎起见,我也对大量的文档进行了分词测试,目前来看不但分词质量很不错,也很稳定.
1.在Tag/span.cs中719行中for循环的判断条件中加上了两个与判断: &&i<m_sWords.Length && i < m_nWordPosition.Length-1
2.屏蔽了SharpICTCLAS\Utility\WordDictionary.GetMaxMatch方法中indexTable索引小于0的异常,加上了如果索引为0则返回false的处理.
3.屏蔽了SharpICTCLAS\Utility\WordDictionary.FindInOriginalTable方法中indexTable索引小于0的异常,加上了如果索引为0则返回false的处理.
4.屏蔽了SharpICTCLAS\Utility\WordDictionary.FindFirstMatchItemInOrgTbl方法中indexTable索引小于0的异常,加上了如果索引为0则返回false的处理.
注:上述1的修改是语法层面的修改,而2,3,4处的修改目的在于屏蔽异常(至于有没有影响算法流程还待进一步研究,不过从目前测试结果来看,是没有影响的).