C# 一个简单分词程序的思路和代码(七) 后记
2007-10-29 19:43
681 查看
这个分词程序在六的时候已经结束我,原来不怎么想写后记的,因为看的人也不是很多,不过竟然放出来共享了,也希望给大家一些提示去优化他,也希望有优化好的朋友可以公开他的优化代码。
分词系统网上有几个小例子,一种是使用hashtable来保存字典,一种是使用数组来保存字典。
首先使用hashtable来保存字典的话,确实查询,插入都比较方便,全部工作都交给语言做了,技术上没什么难度,速度也很快,代码也很少。不过缺点也是很明显的,hashtable来保存字典的话,字典的词越多,hashtable内部导致的冲突越多,速度也就越慢
其二使用 数组来保存字典的话,保存起来很方便,查询需要自己写,相对来说可能还不如hashtable,缺点是也是当字典的词达到几十万的级别的时候,内存就出现问题了,你不可能分配几十万个数组去保存字典内容
以上两个思路最致命的问题在于,如果你使用了上述的两种方法来实现你的分词系统,你将没办法对他进行优化,这一点也就是说是不可以延续开发的,相当于一次性就没办法再进步了。反过来看现在这个简单分词系统,是有很多方面可以优化的,我的10w字/秒也是通过这个基础的东西优化出来的。首先可以优化的是加载,原来我的代码是已经优化了字典加载的,不过我估计把这个优化去掉,目的希望大家可以自己去实践和思考,毕竟抄来的东西最好还是自己消化掉的好。
如果您将开始优化,想想您的老师在数据结构中告诉你的一件事情,搜寻前需要对结构做什么。。。
思路我已经提示了,后面的就靠大家了
分词系统网上有几个小例子,一种是使用hashtable来保存字典,一种是使用数组来保存字典。
首先使用hashtable来保存字典的话,确实查询,插入都比较方便,全部工作都交给语言做了,技术上没什么难度,速度也很快,代码也很少。不过缺点也是很明显的,hashtable来保存字典的话,字典的词越多,hashtable内部导致的冲突越多,速度也就越慢
其二使用 数组来保存字典的话,保存起来很方便,查询需要自己写,相对来说可能还不如hashtable,缺点是也是当字典的词达到几十万的级别的时候,内存就出现问题了,你不可能分配几十万个数组去保存字典内容
以上两个思路最致命的问题在于,如果你使用了上述的两种方法来实现你的分词系统,你将没办法对他进行优化,这一点也就是说是不可以延续开发的,相当于一次性就没办法再进步了。反过来看现在这个简单分词系统,是有很多方面可以优化的,我的10w字/秒也是通过这个基础的东西优化出来的。首先可以优化的是加载,原来我的代码是已经优化了字典加载的,不过我估计把这个优化去掉,目的希望大家可以自己去实践和思考,毕竟抄来的东西最好还是自己消化掉的好。
如果您将开始优化,想想您的老师在数据结构中告诉你的一件事情,搜寻前需要对结构做什么。。。
思路我已经提示了,后面的就靠大家了
相关文章推荐
- C# 一个简单分词程序的思路和代码(六) 源代码 ,测试程序,词库下载地址
- C# 一个简单分词程序的思路和代码(二) 键树
- C# 一个简单分词程序的思路和代码(四) 键树 查询记录
- C# 一个简单分词程序的思路和代码(五) 使用代码
- C# 一个简单分词程序的思路和代码(一)
- C# 一个简单分词程序的思路和代码(三) 键树 插入记录
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
- 简单代码实现C#中运行另外一个程序
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- Beginning C# Objects从概念到代码——1.4 解析一个简单的C#程序
- C#一个简单的定时小程序实现代码
- 推荐一个用C#代码生成JavsScript的简单程序集
- 收了100元辛苦费,写了一个最简单的C#ASP.NET的3层架构例子代码,源码是通过代码生成器生成的【写程序的效率神奇的高】
- 把C#程序(含多个Dll)合并成一个Exe的超简单方法
- 一个简单的统计C源程序代码行数的小程序
- linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码
- 完成一个简单的时间片轮转多道程序内核代码
- 一个简单的时间片轮转多道程序内核代码的分析
- Linux内核分析课程--完成一个简单的时间片轮转多道程序内核代码,理解操作系统是如何工作的