re: 窗体间传递复杂数据 吕震宇 2008-02-20 17:15
@goldant
如果真是这样的话,我觉得就需要一个自建的MessageService来协调多个窗体间的通讯了。毕竟传递消息与交换数据并不完全一样。
@过客1
最近一直很忙,科研和教学活动太多,所以实在没有时间将文章完整写出来,对不住大家了.
@一叶之秋
目前没有新版本,就像上面我说的,只是科研用途而已,将来可能将文本分类代码放上来。
re: 第1章 数据库基础 吕震宇 2007-10-11 21:58
@独闯天涯
是的。
@阿不
@坯子
SPAN类中的东西我几乎没做任何调整,仅仅简单的转换为C#代码而已,所以错误和效率问题肯定不少。
@拜博主
非常抱歉,效率确实是个问题,我一直没有时间对代码再做什么优化,因为这只是目前我在做的"文本自动分类"项目的一个组成部分而已,而且并没打算把它作成专门分词的组件。最近正准备将“文本自动分类”代码开放用于科研目的,目前基本完成了70%左右的代码工作,待全部完成后再放上来。
在这里还有望各研究ICTCLAS的网友能指出SharpICTCLAS中的效率瓶颈所在,日后有时间再做优化。
不错!支持一下!学习...
不过看起来Extension Method是无法访问到被Extent类的私有成员的。所以不当的使用是不是会导致数据过分暴露?
@张华平
如果因为这篇文章伤害了您的话,实在是抱歉。其实感觉FreeICTCLAS确实有不少地方可以改进,尤其是代码方面。相信几年的光景,ICTCLAS3.0的改进不小,只可惜没有开源:-)
re: C#中的接口 吕震宇 2007-05-23 21:39
@Oriesmap
我想除了你说的方法外,只能使用反射技术才能实现了,至少我是这么认为的。
@朱小牛、@jlike
代码确实存在问题,而且我认为jlike的修改方案更好一些。不过我在分词时还没有遇到类似情况。在提供新版本之前,建议使用jlike的修改方法先“补”一下。
SharpICTCLAS基于FreeICTCLAS,目前除实现N最短路外,还实现了人名、地名识别,但不支持机构名称识别。并且训练用的语料库比较小,好像只使用了1998年1月份的人民日报语料库。ICTCLAS 3.0应当有了很大改观,虽然不提供源码,但相信在效率方面、训练样本集、以及机构名称识别等方面都下了不少功夫。
我手头找到了一份1998年1月份的人民日报语料库,如果按照论文提供的方法,应当可以为SharpICTCLAS也增加机构名称识别功能,不过这需要下很多功夫,最近很忙,暂时没有这方面打算,况且目前SharpICTCLAS中仍有不少代码有待重构。
@leo
不知道你遇到的问题是不是就是上面讨论的问题,可以将出问题的句子贴出来,我好测试一下。
@工控网
问题出现在CCStringCompare方法中,现在已经解决,请重新下载测试一下。谢谢提出的问题。
@zitiger
我用Zip格式压缩后文件有2.5M,用Rar格式压缩后文件只有1.9M,所以还是选择使用了Rar格式,如果你需要Zip格式的SharpICTCLAS的话,请告诉我你的邮箱,我给你发一个过去。
@zitiger
目前发现一个问题正在修正,修改好后我会用zip格式发布的。
@Jeffrey Zhao
因为SharpICTCLAS是基于ICTCLAS的,所以根据《自然语言处理开放资源许可证1.0》是不允许商用的。
@工控网
感谢你发现的这个问题,问题出在字符串比较上。为了和ICTCLAS词库兼容,所以不得不在SharpICTCLAS中设计了CCStringCompare方法,但对于汉字与半角字符混排的情况下,比较出了点问题。主要表现在:二元词库检索时词与词之间加了@号,出现了全半角混合,而在词库中“公里/小时”也是全半角混合,程序在对这两种问题的处理上似乎存在问题,我正在做进一步调整。
@jory
我会尽快再出一个比较稳定的版本。
目前经过调整后的SharpICTCLAS运行效果还算不错。在对博客园1万五千篇文章进行分词测试过程中,效果还不错,总共出现15处分词异常错误,其中有9处是因为存在大量日文字符,另外6处是一句话中单词过多,超出了软件限制(200词)。效率也比较令人满意(尽管总体还是比较慢),15000篇文章总用时2.5小时,但这不只是分词的时间,还包括了繁体转简体、利用正则表达式去掉HTML符号,统计词频(这需要进行重复词的判别,我使用了AVL树)、将分词结果写入SQL Server 2005数据库。如果不考虑这些因素的话,感觉应当和C++程序效率差不多,当然这是没有经过严格测试的结论。
另外,我对词库做了扩充测试,效果一般,因为在扩充基本词库时,很难同时扩充二元词库,所以为了使得扩充词汇发挥作用,就不得不提高平滑值,原有系统默认值为0.1,需要提高到0.8以上才可以。
@工控网
最好等下一版本出来后再应用,这个版本仍然存在问题。
@王琳
您过奖了。
re: 稍微思考了一下…… 吕震宇 2007-04-16 20:35
不错!“人在江湖,身不由己”,市场的残酷以及企业现状往往让高深的技术难以施展。但人总是要有目标、有希望的,对技术的突破与渴求总能成为让人追求的目标,“匠艺”的修炼或许能成为身不由己时的一盏指路灯,给“悲哀”带来一线光明。
感谢博客园追求技术的环境给我们提供了进行自我修炼的环境。
胡言乱语一番,和楼主的文章实在扯不上什么关系,一时感慨罢了...
@Lucie
1、"我们可以通过控制WHERE短语中的字段实现不同的更新策略",是我在上一篇文章中所谓的“关键字”、“关键字和已修改字段”、“关键字和可更新字段”、“关键字和时间戳”以及其它的Where短语生成策略,是解决丢失的修改的手段之一。
2、你提到的问题太复杂了,我手边也没有测试数据库,而且你的查询中似乎还用到了用户自定义函数。所以我很难给出答案。只能猜测一下,我想子查询会被加Range锁,否则将无法保证Serializable的事务隔离级别。但仅仅是猜测而已,你可以参考本文的代码,自己设计一段程序,并在企业管理器中查看一下究竟是什么锁。
re: 《软件设计精要与模式》出版 吕震宇 2007-04-11 21:04
好!出来后一定买一本!
@jory
目前这应当算是小问题,因为完全可以在一篇文章预处理时去掉这些回车符号。
我还发现了一些更麻烦的问题,主要因为词性标注部分的代码存在问题(应当是从ICTCLAS)就存在的问题,我没经修改就直接拿过来了,主要表现在如果某个汉字没有词性,则在词性标注时会出现异常。例如:“这些是永远也没有现成的答桉的”其中“答案”写错了,当对这个有错别字的句子分词时将出现错误。
另外,ICTCLAS在对地名识别时也存在问题,在Span类的PlaceRecognize方法中,nStart与nEnd在某些时候会计算错误,测试版的SharpICTCLAS也存在这个问题。例如“明定陵是明十三陵中第十座陵墓”在分词时会因为这个问题导致触发异常。
我现在对测试版的代码做了些调整,暂时解决了这些问题,但日后仍然有必要对Span类的代码进行大幅度重构。
@jory
目前这应当算是小问题,因为完全可以在一篇文章预处理时去掉这些回车符号。
我还发现了一些更麻烦的问题,主要因为词性标注部分的代码存在问题(应当是从ICTCLAS)就存在的问题,我没经修改就直接拿过来了,主要表现在如果某个汉字没有词性,则在词性标注时会出现异常。例如:“这些是永远也没有现成的答桉的”其中“答案”写错了,当对这个有错别字的句子分词时将出现错误。
另外,ICTCLAS在对地名识别时也存在问题,在Span类的PlaceRecognize方法中,nStart与nEnd在某些时候会计算错误,测试版的SharpICTCLAS也存在这个问题。例如“明定陵是明十三陵中第十座陵墓”在分词时会因为这个问题导致触发异常。
我现在对测试版的代码做了些调整,暂时解决了这些问题,但日后仍然有必要对Span类的代码进行大幅度重构。
@winjer
“一篇文章大概10秒左右”恐怕不现实吧,在我的机器上虽然速度也慢,但一篇文章也用不了1秒的时间,核心算法用时不过200~300ms左右,你是不是将初始化词库等时间也算在内了?
@jory
真巧,我正在做的一件事情就是扩充词库,现在和同事从博客园遴选了1300多个与计算机相关的关键词,正准备加入词库,只是词频不好定,所以正准备实验一番看看效果。我可能在下周将扩充词库的代码放上来。
如果你着急的话,可以查看WordDictionary类,里面有相关代码,只是尚未经过测试,不知道是不是有问题。
@winjer
我也发现效率问题了,需要一段时间研究一下...
@U2U
即使有了足够的理论知识,我想也读不懂经过代码混淆器处理过的代码吧。况且消化吸收别人的技术不仅仅是学习理论这么简单吧,要不然我国干吗还买回国外的机器拆开来消化吸收一番呢,光学理论不就行了吗。
re: 你真的了解Ioc与AOP吗?(2) 吕震宇 2007-03-20 13:41
@David
那些都是代码中自己定义的类,你可以下载本系列的源代码,里面这些东西都有。
@学习和开发分词系统的朋友们
走自己的路,让别人说去吧...
re: 我开发的中文分词程序,开源发布 吕震宇 2007-03-19 09:43
不错,有很多地方值得借鉴。
我现在也正准备对SharpICTCLAS做大幅度改动(测试版多少是原有版本的一个翻版而已),尤其是对原子分词部分,另外人名、地名识别代码也需要大幅度改进。对全角字符处理成半角后再处理的方法也是目前我准备使用的。
re: 我开发的中文分词程序,开源发布 吕震宇 2007-03-19 09:24
下载看看先:-)
re: 华容道与数据结构 (12) 吕震宇 2007-03-18 22:09
@devhotmail
当时做这个程序的时候是在.net 1.1环境下,我不知道你现在是不是在.net 2.0环境下运行?我这个程序确实在这里存在问题:
现在对Windows界面控件内容的修改命令只能执行在应用程序线程内,而为了提高运行效率,我使用了多线程,在一个新线程中是不能对当前窗体元素进行操作的,因此就出现了你看到的问题。
解决办法就是使用委派机制,你可以从网上查找到相关资料自己改动一下,应当很简单。
@lulu_7777@sina.com
我仅仅是为了完成我的毕业论文研究了一下Gabor变换,学得也不是很深,至于MatLab编程我实在是没有精力研究它了,不过相信和我的C#代码差不多,你可以参考一下我提供的C#代码然后改编一下。
@cw
我对Lucene不太了解,不知道它需要什么样子格式的分词结果,博客园中肯定有其他高手明白,你请教一下他们吧。另外词性是为了进行句法分析用的,相信在Lucene中不会用到,仅仅分词的结果就够使了。
@sinboy
ICTCLAS中有UnknowWord类,里面有Recognition方法,但我现在还没有完全读懂,正在消化中...
@陈招展
系统不支持繁体,里面用的编码方式是bg2312。
@kwklover
Free版的ICTCLAS中我没有看到未登录词识别算法,SharpICTCLAS是基于这个版本的ICTCLAS改编的,所以对于“微软”这样的词无法正确识别。我想ICTCLAS 3.0应当支持这个功能。
另外zitiger提供的搜狗语料到是可以整合到SharpICTCLAS的词库中的,也许这样会提高识别率。但搜狗识别的某些未登录词其实也不算词:-)
另外我还想征集一下博客园的关键词,这些词在一般词库中比较少见,比如设计模式、依赖注入、控制反转等...
@sinboy
看到sinboy来捧场,真是荣幸之至,我写SharpICTCLAS,最重要的就是参考了你关于ICTCLAS代码分析的那几篇文章,在这里先谢谢了!欢迎批评指正!
@kwklover
谢谢提出这些测试结果:
1、全角SUN无法识别的问题我可以通过修改原子分词代码解决。
2、“各界政要共聚一堂商讨国是”写错了,应当是“国事”,这样最后一个词就可以正确识别了。
3、其它问题我认为是词库的问题,因为ICTCLAS分词仍然需要基于词库。Free版的ICTCLAS词库仅仅是1个月的语料训练结果(可以参考ICTCLAS网站上的资料),所以很多词缺乏,包括“微软”、“共居共聚一堂”等。
4、关于“奥力斯是菲律宾的一家赌场”的问题我想与NShortPath有关,代码中如果将nKind值设置为1,如下:
WordSegmentSample sample = new WordSegmentSample(DictPath, 1);
则分词结果完全正确。至于nKind究竟取什么合适,我心里面也没有谱。
5、关于统计分词,其实NShortPath理论依据,其实路径的长短是根据词频统计计算而来的。
至于论文,在google中输入“基于N-最短路径方法的中文词语粗分模型”,检索到的第一个doc文件结果便是论文。
@kwklover
测试有什么结果记得贴出来呀!我想随后学习一下dotLucence呢:-)
@玉开
.net 2.0与.net 1.1的数据库访问有了些变化,而且最近一直很忙,所以顾及不上写数据库设计系列了,日后有时间再补吧:-(
ICTCLAS在最早是开源版并可从其网站上下载源代码(这里称做Free版的ICTCLAS),后来有人将这个版本的ICTCLAS移植到了Linux平台上,这就是“FreeICTCLASLinux”,可以从
http://sewm.pku.edu.cn/QA/下载。
我改写的SharpICTCLAS是基于FreeICTCLAS版的代码,除了参考并使用了原有代码外,也重写了部分代码。应当说不算侵权。但为了稳妥起见,我还是给原作者写了邮件,但还没有得到回复。
现在ICTCLAS好像已经到了3.0版本,并且没有开源,理论应当也先进了不少。SharpICTCLAS应当无法与最新的ICTCLAS比,它仅仅是由FreeICTCLAS改造而来,不过分词效果已经不错了。
@杨发达
SharpICTCLAS是本人将ICTCLAS移植到.net平台上的一个分词软件,目前代码我还没有放上来,正在等ICTCLAS的作者的一个授权。
@neoragex2002
其实到目前为止SharpICTCLAS基本完工,也可以完成词性标注等工作,迟迟没有将完成代码放上来的一个原因就是希望能得到张华平、刘群的授权。我已经发了Mail,正在等待回信。
re: 实现ICTCLAS到C#平台的移植 吕震宇 2007-03-08 14:07
C#与C++的程序之间没有性能可比性。就象比较一段完全相同的Java与C++代码谁性能更高一样。
re: 男人眼泪中的 Ruby (一) 吕震宇 2007-03-08 12:55
不错!对于我这个一窍不通ruby的来说简单、明了、易懂。:-)
re: 实现ICTCLAS到C#平台的移植 吕震宇 2007-03-08 08:53
@Jeffrey Zhao
似乎博客园最早时Article可以自己定义分类,方便管理,可是Post不可以(现在都可以了),所以当时不得已发一篇Post一篇Article,这个习惯一直沿用到现在。
@Kestin
@dy
我将ICTCLAS移植到了.NET平台上,对上面的代码进行了重写,分离出了几个不同功能的类。我会在随后的文章中介绍我的新设计的。
re: 正在改写C#版的ICTCLAS 吕震宇 2007-03-02 18:36
我也在做这方面的工作,现在除了词性标注,其它快完工了。
SharpDevelop的插件结构设计非常值得学习,我最近也打算写一篇关于对象创建的文章,其中就包含了一个基于SharpDevelop技术(经过很多简化)的插件程序。
re: 天书般的ICTCLAS分词系统代码 吕震宇 2007-02-22 22:06
@gqh
希望不会造就出一个“驴粪蛋”式的系统来(转引“驴粪蛋,外面光”),哈哈。