[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 21# flashercs

完全符合要求,很好用。

TOP

回复 20# qixiaobin0715


    已修改代码,请测试,支持win7和win10
微信:flashercs
QQ:49908356

TOP

回复 18# terse
因为有些单词不存在分布图信息,可能会产生错误。
你的代码测试后发现,遇到不含分布图的单词会闪退。比如单词railway就没有分布图信息。单词列表:
good
railway
big
闪退后,只有good的信息能够提取出来。

TOP

回复 17# flashercs

单位的电脑是Windows7,家里的是Windows10.最好能在单位用,家里用也可。

TOP

本帖最后由 terse 于 2019-8-29 22:53 编辑

这样可以吗
  1. @set @i=0 /* & @echo off & >提取结果.txt cscript.exe -NoLogo -E:JScript %0 <单词列表.txt & pause exit  */
  2. var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  3. function GetContent(url) {
  4.         xmlhttp.open("GET", url ,false);
  5.         xmlhttp.send();
  6.         return(xmlhttp.responseText);
  7. };
  8. while (!WSH.StdIn.AtEndOfStream) {
  9.       var str = WSH.StdIn.ReadLine();
  10.       if (str) {
  11.            var url = "http://dict.cn/" + str;
  12.            var html = new ActiveXObject("htmlfile");
  13.            html.write(GetContent(url));
  14.            var t = html.getElementsByTagName("ul")[0];
  15.            if (t) {
  16.                str += "\t" + t.innerText.replace(/[\r\n]/gm,'') + "。\t";
  17.                if (html.getElementById("dict-chart-basic")) {
  18.                    var obj = new Function("return" + unescape(html.getElementById("dict-chart-basic").data))();
  19.                    for(var key in obj ){  str += obj[key].percent > 5 ? obj[key].sense + ":"+ obj[key].percent + "%, " : ""};
  20.                }
  21.            };
  22.            else { str += "\t" + "错误" };
  23.            WSH.Echo(str);
  24.      };
  25. };
复制代码

TOP

回复 16# qixiaobin0715


    你什么Windows系统?不太敢用htmldom,win7与win10对html兼容性差别很大
微信:flashercs
QQ:49908356

TOP

回复 15# flashercs
测试成功!但存在一些小问题,有些单词未提取出来。分三种情况:
1.大多数属于单词本身在词典中不存在“分布图”,并且提示错误,结果中忽略。如fines、cavalry、GDP等
2.不存在分布图,运行未提示错误,直接忽略。如baseman。是释义中的括号造成的吗?
3.有“分布图”,直接忽略。不知什么情况。有这样几个单词:
  1. in-depth
  2. storytelling
  3. same-sex
  4. high-end
  5. sweaty
  6. first-time
  7. president-elect
复制代码
请帮忙给看看。能否这样解决:
1.释义和分布图内容之间用制表符分隔。
2.对于第1、2条的问题,在提取结果中条目只列出单词和释义。
3.第3条出了什么问题,能否解决。

TOP

本帖最后由 flashercs 于 2019-9-3 19:46 编辑
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. Powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. $VerbosePreference = "Continue"
  10. $inputFile = "单词列表.txt"
  11. $outputFile = "结果.txt"
  12. Get-Content -LiteralPath $inputFile -OutBuffer 10 | ForEach-Object -Begin {
  13.   $sw = New-Object -TypeName System.IO.StreamWriter -ArgumentList ("$pwd\$outputFile"), $false, ([System.Text.Encoding]::Default)
  14.   # webclient settings
  15.   $webclient = New-Object -TypeName System.Net.WebClient
  16.   $webclient.BaseAddress = 'http://dict.cn/'
  17.   $webclient.Encoding = [System.Text.Encoding]::UTF8
  18.   $webclient.Headers.Add("Accept", "text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8")
  19.   $webclient.Headers.Add("Accept-Encoding", "gzip")
  20.   $webclient.Headers.Add("Accept-Language", "en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3")
  21.   # xml parser
  22.   $xmldoc = New-Object -TypeName System.Xml.XmlDocument
  23.   # re
  24.   $recontent = [regex]'(?si)<div\s+class="word"[^>]*>.*?(?=<div\s+class="section[^"]*"[^>]*>)'
  25.   $rejs = [regex]'(?si)<script[^>]*>.*?</script>'
  26.   # stringbuilder
  27.   $strbuilder = New-Object -TypeName System.Text.StringBuilder
  28.   Add-Type -AssemblyName Microsoft.Jscript
  29.   $vsaengine = [Microsoft.JScript.Vsa.VsaEngine]::CreateEngine()
  30.   Add-Type -AssemblyName System.Web
  31. } -Process {
  32.   Write-Verbose "Fetching $_ ..."
  33.   for ($i = 2; $i -ge 0; $i--) {
  34.     try {
  35.       $readstream = $webclient.OpenRead($_)
  36.       Write-Verbose "Fetch $_ success"
  37.       break
  38.     }
  39.     catch {
  40.       $_ | Out-String | Write-Host -ForegroundColor Red
  41.     }
  42.   }
  43.   if ($readstream) {
  44.     try {
  45.       $gzipstream = New-Object -TypeName System.IO.Compression.GZipStream -ArgumentList $readstream, ([System.IO.Compression.CompressionMode]::Decompress)
  46.       $sr = New-Object -TypeName System.IO.StreamReader -ArgumentList $gzipstream, ([System.Text.Encoding]::UTF8)
  47.    
  48.       $match = $recontent.Match($sr.ReadToEnd())
  49.       if ($match.Success) {
  50.         Write-Verbose "Match $_ success"
  51.         $xmldoc.LoadXml(($rejs.Replace($match.Value, '') -replace '<([^\x00-\x7e]+)>', '&lt;$1&gt;'))
  52.         $strbuilder.Length = 0
  53.         # word-cont
  54.         [void]$strbuilder.Append($xmldoc.SelectSingleNode('//h1[@class="keyword"]/text()').Value).Append("`t")
  55.         # dict-translation
  56.         [void]$strbuilder.Append( ($xmldoc.SelectNodes('//ul/li[position()<last()]') | ForEach-Object { $_.innerText }) -join " " ).Append("`t")
  57.         try {
  58.           # dict-chart
  59.           $strjson = [System.Web.HttpUtility]::UrlDecode($xmldoc.SelectSingleNode('//div[@id="dict-chart-basic"]/@data').Value)
  60.           $jsobj = [Microsoft.JScript.Eval]::JScriptEvaluate("($strjson)", $vsaengine )
  61.           foreach ($field in $jsobj) {
  62.             [void]$strbuilder.Append($jsobj.Item($field).Item('sense')).Append(':').Append($jsobj.Item($field).Item('percent')).Append(',')
  63.           }
  64.           [void]$strbuilder.Remove($strbuilder.Length - 1, 1)
  65.         }
  66.         catch {
  67.           # $_ | Out-String | Write-Host -ForegroundColor Red
  68.         }
  69.         # output result string
  70.         $sw.WriteLine(($strbuilder.ToString() -replace "[\r\n]"))
  71.         # $strbuilder.ToString()|Out-Host
  72.       }
  73.       else {
  74.         Write-Verbose "Match $_ failed"
  75.       }
  76.     }
  77.     catch {
  78.       $_ | Out-String | Write-Host -ForegroundColor Red  
  79.     }
  80.     finally {
  81.       $readstream.Close()
  82.       Remove-Variable readstream
  83.       if ($gzipstream) {
  84.         $gzipstream.Dispose()
  85.       }
  86.       if ($sr) {
  87.         $sr.Dispose()
  88.       }
  89.     }
  90.   }
  91.   else {
  92.     $sw.WriteLine($_)
  93.   }
  94. } -End {
  95.   $sw.Dispose()
  96.   $webclient.Dispose()
  97. }
复制代码
微信:flashercs
QQ:49908356

TOP

回复 6# zaqmlp
有空的话,还能给完善完善吗。这里先再次感谢了。

TOP

回复 12# zaqmlp

基本达到要求,我是说如果结果是这样就完美了:
  1. good adj. 好的;上等的;优秀的 ; n. 好处;善行 ;(复)goods:商品;货物. 好的:78,好处:11,优秀的:7
复制代码

TOP

回复 7# qixiaobin0715


    已修改
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 10# zaqmlp

方便的话把前面的简明释义也加上吧。理解理解,现在社会的诚信有问题。已扫码。

TOP

回复 9# qixiaobin0715

那就扫码吧
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 8# zaqmlp
尊重别人的劳动,都是在圈里混的,不会吃霸王餐的。

TOP

回复 7# qixiaobin0715


    没赞助没动力
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

返回列表