中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路][批处理:轻松译单词]
« [1] [2] [3] [4] »
作者:
标题: [共同参与][挑战思路][批处理:轻松译单词] 取消高亮 | 上一主题 | 下一主题
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『楼 主』:  [共同参与][挑战思路][批处理:轻松译单词]

[共同参与][挑战传统][批处理:轻松译单词]

) 此贴为抛砖引玉,大家扩展思路,互动式共同参与批处理学习~:)

) [轻松译单词]
  例如: E.Bat   computer [回车]
  结果: Computer    计算机
  

  规则: 没有太多规则,
      主要体现在让DOS批处理以更快捷的方式帮助我们更好生活!
      让DOS批处理完成一些实用、且在命令行就能完成的查询工作--翻译不懂的单词。
      纯DOS批处理的单词翻译系统目前国际上还没有(别问为什么,嘻嘻……),
      纯DOS批处理的单词翻译来自于好玩、挑战、趣味、创新并最终落实为实用的想法,
      
      跟我一起想像:
        
        当我看到一些美丽的单词而我不懂它,于是我在DOS命令窗口中打个 e net回车,
        系统提示我: net  网络 ,"噢!,明白了"!

        2008奥运全民学英语,我们认为更要让单词翻译系统诞生在DOS批处理的脚本之下!
        这将是献给奥运和 cn-dos.net 与所有DOS爱好者的最纯的礼物!它完全用批处理实现!

        ……某某报纸刊载一条消息:
          某某某几位大侠,使用一种最原始的批处理开发了想都不敢想像的单词翻译系统……
          我们把它当做挑战吧~:)
          好的思路与优秀的算法只要实现了,用什么语言那都不是重要的事,它是一通百通的。

  思考: 这最终是一个实现方法和算法的问题,很多单词翻译软件都要求极高的效率来检索单词。
      如果拥有20万词汇,用 for /f ... 一条一条枚举可能出现的20万条记录这简直就是……

      但是,如果单词以 A-Z 来划分成26个首字母的区域,
      也就是将检索范围精确缩减到了一个较少的范围,在这个范围内还可以进行某种算法……

      纯批处理开发的英文单词翻译系统对于DOS批处理外行或批处理半懂不懂的网友来说:
      简直是不可能完成的任务!

      实际上,这看上去我们给 %1 一个参数:“ Internet”,然后批处理代码自动翻译成:互联网
      像是很简单的样子,实际上却一点也不简单:

        最快速度的检索算法
        要实现最快速度的检索算法是否还需要辅助标记?
        这个标记如编码?如何利用批处理的一些特殊的地方与辅助标记来达到尽可能方便的检索?
        几十万的词汇量的查找、定位、提取的挑战
      
      这些可行吗?可行,我是在思考了几天之后并做了6万行for以及for..skip等简单测试后得出可行

的结论。


  素材: 可以参考现成的词库等,一般均有以“单词  单词的翻译内容”等为基础的文本词库文件。
      因为算法不一样,词库的格式也不一样,早期的单词翻译软件甚至都用上了foxpro现在的数据库

做检索。
      (单词库我现在暂时没有,如有一定上传上来:)
      (如果你找到,请让大家分享下载地址)

  目的: 拓展思路、增加批处理兴趣、增加大家互动学习亲自动手玩、
      通过我们大家不断的交互让批处理的使用让每个人都能参与共同进步:)

  方向: 这只是其中一个内容,更多的内容需要网友们共同发现、版主支持:)
      大家可以用任何异想天开的任何想法实现上面问题~:)


  为什么要出现此贴: 只有互动每个人都参与,自己的水平才能提高更快。
            将遇到问题时才问、平时不主动学习批处理的方式变成大家主动一步一步共同提高

:)
            我们为创新!为创新这个新世界而活着!

  奖励: 优秀的解题与不同思路的观点解题,由版主象神一样的指导、示范,
      然后给大家加分奖励以示激励~:)

  其它: 等待大家有更好想法和非常实用的互动学习与应用的题目,大家一起参与:)


===================================
  上一期参考:[共同参与][挑战思路][批处理处理浮点运算]
         http://www.cn-dos.net/forum/viewthread.php?tid=23568&fpage=1
         希望我们每一天都为梦想而创新的生活!
     感动: 经过数位版主与大侠的精心创造与开发,批处理解决了浮点运算,
         并由版主与几位大侠创新的完成了理论上无限进位的算法机制,非常精彩!
     获得: 我们在没有更多的类库或函数库的最原始最基础的环境下,
         能够以算法和创新的想法来解决一些平时高级编程里只有函数才能完成的事!
         理论上说:这些用最简单指令完成复杂的操作过程,就是卓越!
         这种思路它可以应运到任何一种语言的开发上,并已经超越了那些普通程序员。
         通过底层进位的模拟与合并计算以及计算结果插入浮点标置的方式,
         早已超越了那些大多数离开了函数库或类库就活不下去的程序员们:)
         
===================================
  以上的想法仅为一个好玩的创新的建议,它献给酷爱批处理的每一位爱好者~:)
===================================

  词典转换工具 与 部分索引 的说明在 第 10楼 由 无奈何版主提供~:)

===================================

[ Last edited by redtek on 2006-10-10 at 23:56 ]

   此帖被 +4 点积分     点击查看详情   


2006-10-10 21:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

如果一个文本文件有6万行数据,通过Skip跳过5万9千9百97行,只列出最后几行,
它的速度测试如下:
C:\TEMP>copy con t.bat
@echo off
echo %time%
for /f "skip=59997" %%i in (a.txt) do echo %%i
echo %time%
^Z
已复制         1 个文件。

C:\TEMP>t
9:51:09.64
59998
59999
60000
9:51:09.65
提示: for ... Skip 跳过n行的参数也可以变通为一种快速索引方式:)

具体的开发思路希望更酷的看到大家各显神通,
活越 cn-dos.net!
我们永远要越超的是我们自己!



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-10 21:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 3 楼』:  

它还可以引发为好玩的 “轻松背单词” 的纯批处理:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-10 22:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 4 楼』:  

可以发个词汇表看看吗

2006-10-10 22:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 5 楼』:  

觉得还是用vbs+bat直接读取 百度 的翻译最爽

   此帖被 +2 点积分      点击查看详情   





C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-10 22:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  

一个构思:

单词以 A-Z 来划分成26个首字母的字典文件 A.txt-Z.txt

C.txt
Computer=计算机
bat
set "name$=Computer"
for /f "tokens=1* delims==" %%i in (%name$:~0,1%.txt) do if "%%i"=="%name$%" echo %%i:&echo   %%j
这样的字典文件分类、增加方便,只是数量稍多

修改一下,可以有包含空格的短句

[ Last edited by zxcv on 2006-10-10 at 11:14 ]

   此帖被 +2 点积分      点击查看详情   


2006-10-10 22:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 7 楼』:  

精彩~~给 zxcv +2分~:)

单词的长度、单词首字母、偏移量索引表……都是要考虑的内容~:)
希望有更多的网友有更多的想法~:)

可惜没找到词典文件:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-10 23:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 8 楼』:  

直接取百度的,我觉得这主意很好。

2006-10-10 23:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by electronixtar at 2006-10-10 22:54:
觉得还是用vbs+bat直接读取 百度 的翻译最爽

这个原理上是可以实现的~是最佳选择

   此帖被 +1 点积分    点击查看详情   
评分人:【 ygxcxy 分数: +1  时间:2007-12-20 08:43


2006-10-10 23:24
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 10 楼』:  

这个议题是很有新意并极具挑战性,个人觉得如果查询时间大于 5 秒就不具有应用性。好像一般的翻译软件词典都定义二进制索引位,而批处理读取二进制文件几乎不太现实。
        关于词典可以参考一下“星际译王”的词典,一下链接为词典格式及创建说明:
http://stardict.sourceforge.net/DICTFILE_FORMAT
http://stardict.sourceforge.net/HowToCreateDictionary

还有可以提取金山词霸的词典,可以用 dwing 大侠制作的转换软件。见附件:

   此帖被 +6 点积分          点击查看详情   
评分人:【 ygxcxy 分数: +1  时间:2007-12-20 08:41


附件 1: KSDrip.zip (2006-10-10 23:40, 10.46 K, 下载附件所需积分 1 点 ,下载次数: 70)


  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-10-10 23:40
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 11 楼』:  

这里我有一个思路, 没有经过测试:

搜索代码:
@echo off
:: 标签的使用是提高数据检索的关键.
:: 一:
:: 条件是字典文件中已经对26个字母开始的单词开始的位置做了准确的记录.
:: 如A开头的单词在第一行, B开关的单词从1000行开始, N开头的单词从80000行开始...
:: 二:
:: 对标签做进一步的化分, 如所有以A开头的单词, 我们再将他们第二个字母进行标记. 如Ak中的K::记录了第二个字母k到第一个字母A的行数
:: 还可以对标签做进一步的细分.
:: 这样输入单词, 批处理自动分析他的前几个字母, 再准确地计算出他们的开始位置, 跳过前面的行再执行搜索.

:: 标签的使用: 第一个字母开头的行数为标签名A:(起始行数跟在标签的后面,以空格作为分隔符), Ac开头的单词第二个字母的标签为c::(他后面记录了从A: 起始行数到ac开始的单词的行数值).
:: 如果需要第三个字母就以a::: b:::作为标签.

set name=auto
for /f "tokens=1,2 delims= " %%i in (data.txt) do (
    if /i "%%i"=="%name:~0,1%:" set one=%%j
    if /i "%%i"=="%name:~1,1%::" set two=%%j
)
set /a result=%one%+%two%
echo %name%单词搜索的起始行为:%result%
pause

for /f "skip=%result% tokens=1* delims= " %%c in (English.txt) do (
    if "%%i"=="%name%" (
        echo %%i:
        echo %%j
        goto fulfill
    )
)
:fulfill
echo.
pause >nul
date.txt(记录字典中字母的行数的资料):
A: 8
a:: 1
b:: 221
c:: 653
d:: 982
e:: 1203
f:: 1543
g:: 1828
h:: 2356
i:: 2820
j:: 3321
k:: 3925
l:: 4428
m:: 5243
n:: 5892
o:: 6024
p:: 6231
q:: 7120
r:: 8418
s:: 8942
t:: 9531
u:: 9942
v:: 12358
w:: 12903
x:: 13615
y:: 14032
z:: 15482
[ Last edited by pengfei on 2006-10-11 at 00:12 ]

   此帖被 +3 点积分     点击查看详情   
评分人:【 redtek 分数: +3  时间:2006-11-23 07:03


附件 1: 单词检索.rar (2006-10-11 00:11, 987 bytes, 下载附件所需积分 1 点 ,下载次数: 45)
2006-10-11 00:05
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 12 楼』:  

wget.exe  down_url:http://www.xfocus.net/tools/200305/403.html
mplayer.exe  down_url:http://www1.mplayerhq.hu/MPlayer ... mingw32-1.0pre8.zip


思路:下载www.iciba.com上查询单词的源代码,for /f实现
@echo off
:: 需要wget支持(也可以用vbs来实现),还需要mplayer支持
ping -n 1 www.iciba.com>nul &&goto start ||echo www.iciba.com网站不能连接&pause>nul&goto :eof
:start
set search=
set /p search=请输入要翻译的单词:
set search_x=%search:~0,1%
if not exist d:\wget_temp md d:\wget_temp
wget.exe --output-document=d:\wget_temp\%search%.txt --append-output=d:\wget_temp\down_temp.txt "http://www.iciba.com/search?s=%search%" &&goto d_txt_ok ||echo 文件没有下载成功&pause>nul&goto :eof
:d_txt_ok
wget.exe --output-document=d:\wget_temp\%search%.swf --append-output=d:\wget_temp\down_temp.txt "http://www.iciba.com/resource/a/en/%search_x%/%search%.swf" &&goto d_swf_ok ||echo 文件没有下载成功&pause>nul&goto :eof
:d_swf_ok
echo.
echo 读音 and 释义
mplayer.exe D:\wget_temp\%search%.swf>nul
set var=</div>
for /f "skip=? tokens=? delims=!var!" %%a in ("d:\wget_temp\%search%.txt") do echo %search%释义为%%a
pause>nul

[ Last edited by he200377 on 2006-10-11 at 03:08 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-11-23 07:04


2006-10-11 01:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 13 楼』:  

用vbs的话有两种,一种是 InternetExplorer.Application 获得 document(DOM)然后直接输出 InnerText,第二种是用 xmlhttp + htmlfile ,需要产生零时文件,不爽




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-11 01:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 14 楼』:  

   redtek的点子一个接一个,想法非常不错,很能促进本论坛的繁荣,个人给他+4分。希望各位能多出好点子,多写好代码。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-11 01:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 15 楼』:  

纯粹地用批处理来处理本主题的要求的话,搞定了效率就难以搞定词库格式,如果降低词库的要求那么效率又不堪入目。在二者不可得兼的情况下,一般我都会把这个包袱丢给cmd去做:
@echo off
    echo @echo off >x.bat
    echo :start >>x.bat
    echo     set /p xxx=输入单词: >>x.bat
    echo     call :%%xxx%%  >>x.bat
    echo     pause  >>x.bat
    echo goto :eof >>x.bat
    for /l %%i in (1,1,100000) do (
        echo :%%i >>x.bat
        echo echo %%i >>x.bat
        echo goto :eof >>x.bat
    )
上面十万条记录,我的电脑上搜索到结尾需要大概3秒,不过和findstr比起来却又低了不少:
findstr /nirc:"^:9399 .*" x.bat


  Quote:
C:\Documents and Settings\%username%\桌面>findstr /nirc:"^:9399 .*" x.bat
28201::9399

结果包含行号,搜索也用了不到1秒。而有了行号对于处理起词库来说就比较简单了。
所以,个人认为在不使用其他工具的情况下,用findstr无疑是最好的选择。

   此帖被 +3 点积分       点击查看详情   


2006-10-12 07:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: