中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 10:20
48,037 主题排行 / 350,122 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路][批处理:轻松译单词]
可打印版本  23,602 / 55
第16楼 namejm 发表于 2006-10-12 08:02
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  正如3742668所说的那样,词库的格式是非常重要的,要用CMD查找词库的匹配内容,非findstr莫属。初步写了一段代码,要求词库的格式是:单词独占一行(不区分大小写);翻译的内容另起一行(不允许出现纯字母行),可以有多行。

  代码:


测试内容格式举例:


  有兴趣的请用更多的内容来进行测试。

[ Last edited by namejm on 2006-10-12 at 08:19 ]
第17楼 3742668 发表于 2006-10-12 08:38
荣誉版主 发帖 718 积分 2,013
Re namejm:
记得上次在某个帖子里就提到过,把findstr防止循环外面和防在循环里面两种方法的效率会大不一样。 用你上面的方法在处理起数万行记录的时候效率就非常低下了,所以最好是先findstr,再for。时间关系,写个流程:

上面的方法效率应该会高很多,兄弟买了新手机,我去帮下音乐去了,闪了。
第18楼 namejm 发表于 2006-10-12 08:56
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  呵呵,是的,放在for内部和外部的效率差别是很大的,因为杀软刚换成卡巴,更新频繁,一更新CPU占用往往达到100%,卡得很,那个代码我只测试了一小段内容,看来我得把卡巴禁用一下再测试。
第19楼 lxmxn 发表于 2006-10-12 09:12
版主 发帖 4,938 积分 11,386

namejm兄的代码不错,顶一个先.......
第20楼 namejm 发表于 2006-10-12 09:52
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  修改了16楼的代码如下,在本机上测试3W行内容,结果转瞬间就出来了。请各位测试更多更复杂的内容,看看效率和准确性如何:
第21楼 redtek 发表于 2006-10-12 09:53
金牌会员 发帖 1,147 积分 2,902
Originally posted by 3742668 at 2006-10-12 07:25:
纯粹地用批处理来处理本主题的要求的话,搞定了效率就难以搞定词库格式,如果降低词库的要求那么效率又不堪入目。在二者不可得兼的情况下,一 ...


『第 15 楼』这个真有意思~:)
连未来的词库录入原理都做出来了,哈哈……

[ Last edited by redtek on 2006-10-12 at 09:54 ]
第22楼 3742668 发表于 2006-10-12 11:44
荣誉版主 发帖 718 积分 2,013
建议做成双向翻译的。不光阴译汉,还能汉译阴。
另外关于20F的代码觉得似乎存在一些瑕疵:
第一个for语句中,建议在%input%后面加上$,否则可能导致搜索结果出错。

纸上谈兵而已,均未实践。
第23楼 namejm 发表于 2006-10-12 12:16
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by 3742668 at 2006-10-12 11:44:
建议做成双向翻译的。不光阴译汉,还能汉译阴。
另外关于20F的代码觉得似乎存在一些瑕疵:
第一个for语句中,建议在%input%后面加上$,否则可能导致搜索结果出错。

  应该不会出错的,因为我在do后用if /i "%%j"=="%input%"来完全匹配了。之所以不采用加$的格式,是因为最开始测试的时候加了却没有成功,后来发现,如果最后一行的内容为要查找的%input%的话,则不会检测到单词,应该是findstr正则表达式在匹配最后一行的时候有bug,所以换成了if的格式——虽然加$的方法在这个具体的应用中没什么问题。

  至于做成汉译英,这个就有点超高难度了,我甚至有点怀疑CMD能否完成这个任务。如果可以的话,那还得在词库的格式上找到突破点。
第24楼 redtek 发表于 2006-10-12 13:12
金牌会员 发帖 1,147 积分 2,902
如果在词库格式上找突破,
就越来越像是在寻找并重新研究突破一个最适合批处理使用的 纯文本数据库系统 了~:)
第25楼 redtek 发表于 2006-10-12 13:26
金牌会员 发帖 1,147 积分 2,902
如果做成汉译英功能,
那么同一文件内的英文单词所对应的中文解释里可能会含有任何中文词汇,
如:“是”、“代表”、“含意”等这些中文词或小到中文的单字,
它们几乎遍及了每一个英文单词的中文翻译内,
findstr整个文件查找一个中文词或中文字所对应的英文,
很可能会找到一大堆不相关的别的单词解释内所含有的相混的内容:)


除非,让英文单词与它的中文解释各占一个文件,
即英文单词库存一个文件,每个单词占一行。
英文单词的中文解释也存一个文件,中文解释必须也仅占一行。

然后,这个英文单词与它的中文解释虽不在同一文件内,但它们必须是相同的行号。

这样,在找到任何一个行号内的中文解释时,或找到任何一个英文词,
只要知道它的行号,就可以 for /f "skip=来直接跳过多少行在另一个文件中直接提取内容。


但是,一个英文可能有多个中文解释,
而这多个中文解释的词汇很可能在多达十万条英文单词的中文解释的内容中产生极大雷同,Findstr很可能一查某个中文词就会找到非常多……
第26楼 redtek 发表于 2006-10-12 13:58
金牌会员 发帖 1,147 积分 2,902
做一个小实验:)


============ 实验版中译英/英译中互译 ===============
e.bat




执行过程:



批处理支持中文标签goto(好奇,正好瞎试出来的),
反正:computer标签执行完它后面也没GOTO,
:计算机的标签也会跟着执行,干脆把多个标签放一块!
不管输入的是中文还是英文什么的,
怎么都能让它指正确了:)
这一堆相关连的标签只有遇到goto的时候才能出去,哈哈:)


(权当玩笑,哈哈……)

[ Last edited by redtek on 2006-10-12 at 14:04 ]
第27楼 pengfei 发表于 2006-10-13 01:04
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
各位的讨论很精彩, 如果进行单词检索, 现实生活中翻字典就是一个非常好的算法.

中文字典就有拼音和笔画查找等.

而英语字典就是按开始的字母一个个的查找其对应的页码. 这样的算法人工查找都非常地快, 如果计算机来完成相信速度一定不错.
第28楼 redtek 发表于 2006-10-13 01:08
金牌会员 发帖 1,147 积分 2,902
于是诞生了DOS版新华字典,哈哈……
第29楼 pengfei 发表于 2006-10-13 01:13
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
呵呵~ 这里如果把所有的英文单词都做为标签, 速度也不可能太快, 原因搜索这么多的标签也是要一定时间的.

而给单词分类跳过前面的数据从匹配行开始查找, 这样计算前几个字母的相应位置后再搜索, 可能只需要搜索几十几百个单词就会出现你要查找的结果.
第30楼 namejm 发表于 2006-10-13 01:39
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  终于找到了一个适合汉译英的词库格式,请看下面的初步代码及格式举例。测试3W行数据依然只是转瞬间的工夫,目前只做出了精确查询模式。因时间关系,来不及仔细测试,各位有时间有兴趣的可以拿来折磨一下自己的机器^_^。


代码:

格式举例:


  优化了代码的算法,使得词库内容的英文单词行不用重复标记,可以使词库的体积得到减少。

[ Last edited by namejm on 2006-10-13 at 06:31 ]
上一页  1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023