deerchao的blog

Be and aware who you are.

正在改写C#版的ICTCLAS

断断续续干了快半个月了。
由于中科院的网站上已经下不到源码了,所这这个版本基于有云的地方的C++/CLI版。
原作是比较典型的C式编程方法,常常一个函数上百句。
翻译过程中比较郁闷的地方有以下几点:
1, 原作里处理的字符串都是GBK/GB2312编码的,而C#里字符串都是Unicode格式的,今天为了改编一个函数查了半天的资料,写了个小工具,对着方正GBK字库内码表里的字符,一个个地测试其Unicode码。
原作里字符(逻辑上的)
长度可能为1或2(sizeof(char)),而C#里字符长度永远为1.这样在一些判断条件,循环步长等地方,直能整得人死去活来。
2,不得不说C语言里的指针(比起C#语言里的各种构造)太灵活了,翻译到C#里,可能是数组,可能是ref/out; C语言里的字符串是可变的,C#里的字符串是只读的;这样一来,原文件里某个函数有个char*参数或者局部变量,我就要在接下来的一大串代码中查看这个参数到底是怎么使用的,还要看这个函数的客户在调用完函数之后还有没有使用这个参数,以确定是改成string, ref string, out string还是直接使用char[]. C里的char* + int与C#里的string + int都是合法的操作,但意义完全不同,一不小心没改过来,三两个小时也不一定能找出错在哪里。
3,C的库函数在C#中没有(当然也不可能有)完全对应的实现。比如strlen,要想在各种情况下得到与原作相同的结果,肯定不能改写成*.Length,只能参考C标准库函数的说明用C#重新实现一遍。
4,C语言的多维数组与C#里的多维数组(非锯齿型)基本上是相同的,但是在C里你可以轻松地取出一行数据(比如:int aaa[10][10]; 你可以用 aaa[3]来取得10行里的一行),在C#里,我还真不知道怎么实现。最后我使用了一个二维数组加第一维的索引两个参数来取代。
5,C++里有那么多的构造函数,什么拷贝构造函数,什么赋值构造函数,还能重载操作符=,C#里边完全没有对应的东西,而且VS2005对C++代码也不能查找Operator=的引用,只能靠眼睛去一个个找。
6,VS2005太不稳定了,动不动就死,现在每次调试,执行到某个代码行,必死无疑。
这样每次搞到快吐血,赶紧扔下不管,玩几局魔兽,看看电影,总算坚持下来了。

目前进度:所有CPP代码都已经有了对应的CS代码(可编译通过)。
Dictionary类和ContextStat类的Load,Save等功能已经测试通过。

尚未完成:调试代码使之能正常工作。

此版本完成后将免费开源发放,有愿意帮我减轻点负担的可以联系我(deerchao at gmail dot com)。

另,如果以后有时间,我还准备把HtmlTidy完全使用C#改写,有兴趣一起做的也请联系我。

posted on 2006-11-16 02:57 deerchao 阅读(227) 评论(3)  编辑 收藏

评论

#1楼  2007-03-02 18:36 吕震宇      

我也在做这方面的工作,现在除了词性标注,其它快完工了。   回复  引用  查看    

#2楼  2007-03-24 15:23 蛙蛙 [未注册用户]

尽研究些高深的呀,呵呵,想过创业吗?   回复  引用    

#3楼 [楼主] 2007-03-24 17:27 deerchao      

@蛙蛙
说得我都不好意思了,这个项目最终我还是放弃了,因为我对原作的算法什么的不清楚,很多地方不能理解作者的原意,逐句翻译到C#后根本运行不了。有空的话我看看楼上吕兄的作品吧。

至于创业,感觉目前技术积累还不够。   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接:
 




<2006年11月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(64)

我管理的小组

我的标签

随笔档案(125)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论

评论排行榜