Lucene.net和盘古分词使用小结

盘古分词是开源项目,核心技术基于Lucene.net。虽然有点旧(2010年),但是还是可以用的。案例、应用程序、以及源码可以详见以下链接。

http://pangusegment.codeplex.com/

1.分词过程

Analyzer——>PanGuTokenizer——>Segment().DoSegment()——>Segment().PreSegment()

2.修改dll

2.1 变成小写的原因

dll文件:PanGu.Lucene.Analyzer.dll

语句:return new LowerCaseFilter(new PanGuTokenizer(reader, this._OriginalResult));

修改:return  new PanGuTokenizer(reader, this._OriginalResult);

2.2 遇到符号自动分词的原因和修改

dll文件:PanGu.dll

目的:事实上,关闭了多元分词功能

函数:Regex.GetMatchStrings()

语句:private const string PATTERNS = @"([0-9\d]+)|([a-zA-Za-zA-Z_]+)";
修改:private const string PATTERNS = @"([\S]+)";

目的:切分点不后移,即没有cur = cur.Next

函数:MergeEnglishSpecialWord()

语句:if (cur.Value.WordType == WordType.Symbol || cur.Value.WordType == WordType.English)

修改:if (cur.Value.WordType == WordType.Symbol || cur.Value.WordType == WordType.English || cur.Value.WordType == WordType.Numeric)

3.分词注意事项

假设一个词有3部分组成:字母、数字、符号。符号放在词的第一位,会被自动切分。最后一位是符号时,需要续接空格或中文,否则,无法识别分词而被切分。

 4.词典导入

词典的导入有点慢,70万多条的词汇(10M左右),需要约45分钟,生成约20M的文件。

猜你喜欢

转载自blog.csdn.net/xianjuke008/article/details/84190757