盘古分词是开源项目,核心技术基于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的文件。