这个程序是我从4月28日开始写的,一共写了10天,目前已经写了大约有3000行代码。现在算是它的V0.7 Beta 测试版,再过几天等所有的功能(迷你背单词、文章阅读助手)全部完成并通过测试后后,我会发布它的V1.0正式版。把它作为一个开源作品向全地球公布,目的是为了给编程的新手们提供一个比较好的提高自己的机会。当然,我的作品肯定是和《金山词霸》不能相比的。金山公司对于其词霸项目的开发已经有了好几年的历史了,它所使用的文件结构必然比我的结构优化很多。但作为我的第一个有一些意义的作品,我不打算写的太难太好了(我已经对于它的文件结构有了更好的想法,但我不打算在把它砸了重新来过,因为我已经把它砸过好几次了,我已经厌倦重新开始了,而且这样做对于和我一样的编程新手来说阅读和理解的难度显然太大了,这样做没有太大的意义),毕竟只是第一个作品况且我现在还只是一个大学四年级的学生。我想在网络上发布一些自己写出来的完整一些具有一些意义的编程作品并公开其源代码,这对于民族软件业的发展来说是很好的。由于程序是用C#写的所以比较费内存,而且速度很慢(至少是VC++6.0的几百分之一),但作为学习用的东西已经足够。我做了一下测试:搜索一个拥有20000个词条的辅助词典(未读入内存的)的最后一个词条的解释大约要耗时2秒钟(赛扬300A+128MB内存,呵呵,全地球最垃圾的电脑),但对于现在的主流机型来说应该是很快的。如果慢的话请你忍一忍,我之所以没有把辅助词典读入内存纯粹是出于内存占用量的考虑。所有对它做过测试的人不管有没有帮我找出问题,都将获得它的源代码作为回报。请留下你的E-Mail地址以便于我赠送源代码。
谢谢!!!!我这里还有一些问题:
1.怎么把程序上传到这里,让大家分享、测试
2.第一次发帖,怎么结帖

解决方案 »

  1.   

    To hxuan:
    我已将C#程序发至你的邮箱,请查收
      

  2.   

    [email protected]
    学习学习呀!
      

  3.   

    开源学习,谢谢楼主了[email protected]
      

  4.   

    To swq19850114,dbspro(冷锋),cqvip(破裤子) ,[email protected],[email protected]我已经把程序发给你们了,注意查收。
    问个问题:我能把它上传到这里吗?不要让我每个人都发一次邮件
      

  5.   

    找个免费空间上传再把下载地址放到这个啊
    我给你推荐一个空间
    www.freewebs.com
    100m的[email protected]
      

  6.   

    To: tq010or(hamburger),yhmodem(潇洒的瓢儿白) 
    邮件已发送
      

  7.   

    To: iamgsyy(gsyy)
    谢谢,我去找。
    暂时停止发送邮件,大家忍一忍吧
      

  8.   

    To: iamgsyy(gsyy)
    邮件已发送
      

  9.   

    已收到
    建义把源码贴上去
    二进制的用Base64编码
      

  10.   

    [email protected]
       楼主虽说暂停发送邮件,但我还是把我的邮箱贴上了,我正在学习C#,谢谢楼主,再次感激
      

  11.   

    我学习.net有2年了,现在也算了是半个高手了!( 呵呵,自夸)
    把你的程序发过来, 做探讨与研究!!  [email protected]
      

  12.   

    让我学习学习吧!谢谢!
    [email protected]
      

  13.   

    Thank you
    [email protected]
      

  14.   

    [email protected]
    谢谢~!!!!
      

  15.   

    up to 里奥
    [email protected]
      

  16.   

    [email protected]
    也来一个?学习中
    介意:你把它放在开源社区里不就行了sourceforge.net(正好对应了你所说的:把它作为一个开源作品向全地球公布:)呵呵)
      

  17.   

    [email protected]  thank you!!!
      

  18.   

    愿意帮你测试,顺便学习一下
    [email protected]
      

  19.   

    sourcrforge需要申请项目的,现在就先放在某个地方吧。有多大?给我看看我能不能放在我的个人空间。
    [email protected]
      

  20.   

    [email protected]  thank you!!!
      

  21.   

    [email protected] thank you!
      

  22.   

    [email protected]
    向楼主学习,谢谢哦!
      

  23.   

    [email protected] 
    给一份,谢谢
      

  24.   

    [email protected]   .谢谢
      

  25.   

    up 一下
    [email protected]
    谢谢
      

  26.   

    楼主还是找一个地主,把源程贴上吧...hehe
      

  27.   

    来接分,学习,测试
    [email protected]
      

  28.   

    [email protected]
    给俺一份学习/
      

  29.   

    呵呵,本人不才。学习和使用C#语言还不到三周,程序写的自然是很差的。之所以搜索一个有20000个词条所组成的“辅助词典”文件需要大约两秒钟是有原因的:1.C#本身就很慢(和VC++6.0相比) 2.我的任何一本辅助词典都没有读入内存建表(连一个词条项都未读入),纯粹是从硬盘中一个个的搜索的。词典文件的是有格式的,由于当时考虑到词典文件可以不根据词条项来进行排序,所以对于文件的搜索只能是从第一行搜索到最后一行(词条格式:词条+'\t'+各种解释(解释中如游动词、名词等等的不同性质的解释则以'@'作为分隔标记)),不读入内存是考虑到内存占用率的问题的,主词典中的所有词条均读入到内存建表(使用2个ArrayList,一个放词条,一个放解释,但不排序。因为放词条的表可以排序,但存放解释的表不能排序,排序了则所有形容词的解释都放到了最前面(因为它以'a'打头),这样词条于解释便无法一一对应,从存放解释的那张表中就无法获得正确的解释了),对于主词典我全部读入,而辅助词典则一条都不读入,取了两个极端。这样做是考虑到主词典是一本词汇量较丰富且词条的解释又不很长的词典,而辅助词典则是词汇量很多而解释又超多的辞典,如:美国传统词典(把它读入内存足以使你的计算机崩溃,况且辅助词典还可以有几十本之多,我们使用的是个人计算机而不是银河III),而且如果只将辅助词典的一部分读入的话(为了查询一个词条而读入1000个词条项)我个人觉得这是一种浪费,况且很难保证第二词所要搜索的词条就在这已经读入的1000个词条之中(即无法保证第二次检索的也是'b‘打头的词条),这样又要读入内存并建表就可能不只是1000条了(如果要检索的词条在文件末尾的话)。我这几天已经想出来如何加快辅助词典的搜索:将每一个辅助词典都划分为26个部分(Section),并注明其所包含的词条的数量(或在每一个Section的最后设置一个结束标记,但表明单词的数量会更好一些),这样检索'b'打头的就可以直接定位到文件中以'b'打头的第一个词条,且只搜索固定的个数,这样就可以大大的加速从文件中取词的动作了,但我不打算将这种想法付诸于实践,因为一旦底层的数据结构发生改变则很多建立再它之上的东西都要被砸了重做,我已经从做过很多次了,不想再重新开始了,而且程序写的太难的话对于一个新手来说学习起来会很困难(我也是新手)。我觉得金山公司可能就是按照这样的想法设计词霸(或与此类似)的,当然它肯定比我高明许多,我在设计的工具上就不如它,人家用的是VC++6.0,速度快不说词霸2005启动后只有2~3MB的内存占用,而用C#随便写个窗口就花了15MB(我的程序用了17MB)。我现在就去申请免费空间,申请到后就把程序和源码都传上去,也不再要求大家测试完程序再提供源代码了,能有一部分人在这里提些好的建议我就知足了。
    谢谢!                                  
    Kevin.TurboMB & Autumn.Fall               敬上
      

  30.   

    好人啦,
    [email protected]
      

  31.   

    希望没来晚  [email protected]
      

  32.   

    希望 没来晚
    [email protected]
    发过来
    我帮你测试加以改进
    你要发布可以找一个免费的网站发布上去
    这儿是不提供上传文件的
      

  33.   

    [email protected]俺才知道慕名求一份多谢!
      

  34.   

    [email protected]  或者把下载地址 贴出来
      

  35.   

    发给我 [email protected]要结贴,看系统帮助,
    先发给我后再结哦!
      

  36.   

    发一份给我吧 [email protected]
      

  37.   

    [email protected]
    我也来看看
      

  38.   

    Ok!!!!!
    忙了一个早上,终于把文件传上去了,地址是:
    http://www.freewebs.com/turbomb/index.htm
    程序和源代码都在,大家可以从那里下载了,以后不再发送邮件了。
    用过之后有什么问题请给本人指出,或者有什么好的建议均可提出,我们可以一起讨论学习。
    谢谢!
      

  39.   

    To deyangwangyu(wangyu):
    那个用做测试的test.dic词库不是在什么地方找的,是我自己用VC++6.0写了一段程序:#include<iostream.h>
    #include<fstream.h>
    void main()
    {
    fstream file;
    file.open("test.dic",ios::out); for(int i=0;i<20002;i++)
    file<<i<<'\t'<<i<<endl;
    file.close();
    }
    生成了一个这样的文件:
    0 0
    1 1
    2 2
    3 3
    4 4
    5 5
    6 6
    7 7
    8 8
    9 9
    10 10
    11 11
    12 12
    13 13
    14 14
    15 15
    16 16
    17 17
    18 18
    19 19
    20 20
    ……………………
    把文件头和词典列表文件更改后进行测试的。
    本来打算直接使用金山词霸的词典文件,写一段程序把它按照它的格式读出再按照我的格式写入,但发现它们是经过加密的,真是太卑鄙了。害的我还得去自己编写词典,我写的这个程序是一个开放性地词典,我想尽可能多的表现我的内部数据结构和词典的工作原理,所以可以自己编辑词典文件和新建词典。新建的词典可以通过配置词典来加入,并可以选择主词典和各个词典的搜索顺序。由于没有写一个技术说明文档,所以读起来可能会比较麻烦。模糊搜索那一段写的比较难一些,失败了两次才完成的,我觉得以前的精确搜索太弱智了(3行代码就搞定了)。
      

  40.   

    给我发一份
    [email protected]
    谢谢
      

  41.   

    给我发一份
    [email protected]
    谢谢
      

  42.   

    谢谢了。给我也发一份。[email protected]
      

  43.   

    我已经说过了,我把它们传到网上了,地址是:
    http://www.freewebs.com/turbomb/index.htm
    程序和源代码都在,大家可以从那里下载了,以后不再发送邮件了。
      

  44.   

    我来帮你测试一下
    [email protected]
      

  45.   

    stardict也是开源的,可以插接词典。
    楼主可以参考他的做法。
    sourceforge上可以找到。
      

  46.   

    给我一份可以吗?
    [email protected]
      

  47.   

    楼主麻烦给我一份
    [email protected]
    多谢拉
      

  48.   

    请给我一份,谢谢楼主
    [email protected]
      

  49.   

    给我发一份 
    [email protected] you!
      

  50.   

    学习一下 
    Thank U               [email protected]