求最高效(如果有的话)的文本查找替换算法?

有哥 2004-12-24 08:31:20
前几天散分想翻译Boost文档,得到了不少朋友的鼓励,但文档实在太多了,我想做个文本翻译工具来完成。
现在替换词库、搜索目标文件、开多替换线程等都写好了,就是还没想好一个高效的查找替换算法,来放到线程里面。我把思路理一下,各位帮忙想个高效的算法。

替换词条结构:
struct etoc
{
char en[254];
char chn[254];
}
有许多条,或许上百万,现在列在一个Listview2中,供用户查看修改。各位可以根据算法的需要自行决定组织的方式(数组、列表、队列或其它)。

目标函数接收要分析替换的一个文件名,读入内容,对照上面的结构,逐个分析是否有与en一致的,有就换为chn,替换完后写入磁盘。
注:须优先替换最长的字符串,以尽量保证译意准确,如Borland c++ 与 Borland C++ Builder,只有在Borland C++ Builder不成立的情况下,才能考虑替换掉Borland c++。

这里只能给100分,解决后到BCB区领分。
CB茶馆群(4491288)的朋友可以在群共享里下载文本翻译工具的半成品。
...全文
340 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
user_ABCDEF 2010-06-12
  • 打赏
  • 举报
回复
XXXXXXXXXXXXXXXXXXXXX
这样翻译不好。

楼主看看 < <The Art of Programming> > 吧,上面的算法确实很多的。
loven2008 2004-12-28
  • 打赏
  • 举报
回复
这样翻译不好。

楼主看看<<The Art of Programming>>吧,上面的算法确实很多的。

fct0906 2004-12-28
  • 打赏
  • 举报
回复
楼主有兴趣的话看看那三本大部头吧:

<<The Art of Programming>> 卷I, 卷II, 卷III,上面N多算法.
FireEmissary 2004-12-24
  • 打赏
  • 举报
回复
就用spirit或boost的正则库
输入一个网页,如果是<tag>就原始输出,对<tag></tag>中间的文本就可以进行
普通替换了.当然这是思路,实际上我也不会作:)
liwashington 2004-12-24
  • 打赏
  • 举报
回复
boost里不是提供了模式匹配算法吗,正好用一用!
不过我要说,英文的翻译应该不是替换那么简单的事吧,好多的都要有上下文环境的支持才有意义,不然的话即使替换成功也未必能看。
还有就是这种英文替换的软件好像已经有了吧?
有哥 2004-12-24
  • 打赏
  • 举报
回复
我不想它智能化,只要按要求进行替换就行了。各位不要局限于“翻译”两字,关键是高速的替换,或许我应该把它的名字中的“翻译”改为“替换”。
这里我采用了多线程来同时进行替换,替换算法很重要啊。
whoho 2004-12-24
  • 打赏
  • 举报
回复
自己编程序翻译作的吃力不讨好
除非你愿意等你自己实现一遍自然语言的人工智能,成就大师的事业

不过作为尝试,倒是可以看看能得到什么样的结果
有时间的话,这样未尝不是件好事

如果哪天不小心得到什么诺贝尔奖,记得通知一声:)
fct0906 2004-12-24
  • 打赏
  • 举报
回复
楼主做程序员是不错,但这样翻译就免了,
用金山快译得了,这样翻出来得东西还能看吗.
beyondtkl 2004-12-24
  • 打赏
  • 举报
回复
GZ
有哥 2004-12-24
  • 打赏
  • 举报
回复
一次要处理上百个文件,分析上万个对照词条
有哥 2004-12-24
  • 打赏
  • 举报
回复
现在我的思路是:
设原文件读入char数组enstr,替换后暂放在chnstr中。
1、读取起始位置为n的enstr,m=n,k=1,tempstr=""; //记录当前分析的开始位置
2、tempstr=tempstr+enstr[m]
3、在词条中搜索开头字符与tempstr匹配的,
3.1、如果与一个词条完全匹配,Last=完全匹配词条的ID,k=m,Goto 第2步 //记录最近完全匹配的词条及替换位置,继续向后推
3.2、如果开头匹配就m++,Goto 第2步 //继续向后推
3.3、如果不匹配
3.3.1、有一个Last值:把词条[ID]添加到chnstr,n+=k,Last=-1; Goto 第1步 //分析下一段
3.3.2、没有的Last值:将enstr[n]添加到chnstr尾,n++;Goto 第1步 //分析下一段

当然这样分析可能需要词条排好序,词条过多时,如何组织词条的结构,以便可以在较短的时间内,快速得出是否有与正在分析的字符串一致的词条呢?采用索引表或是多级索引表,还是其它的方案较好?各位讨论讨论嘛,或许有什么更好的办法。

注:每个线程负责分析一个文件,词条资源是由多个线程共用的。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧