[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 30# flashercs
有提示错误信息,列出来查不到的单词,完美。谢谢了,下次合作愉快!

TOP

回复 15# flashercs
提取时有发现两个问题。
1.下面的单词提取不到内容:
  1. do
  2. one
  3. order
  4. mine
  5. communicate
  6. guarantee
  7. operator
  8. steep
  9. abstract
  10. diabetes
复制代码
2.下面单词提取内容占据两行或三行:
  1. than
  2. steady
  3. psychologist
  4. export
  5. Korean
复制代码
请给看看是哪里的问题!

TOP

回复 32# qixiaobin0715


    修复了第一个问题。
第二个问题是你记事本打开了自动换行。。。。。
微信:flashercs
QQ:49908356

TOP

回复 33# flashercs
win7
不是自动换行,而是存在换行符。

TOP

回复 34# qixiaobin0715


   已修改
微信:flashercs
QQ:49908356

TOP

回复 35# flashercs

辛苦了,谢谢!!!

TOP

回复 35# flashercs

在前面的基础上增加提取例句内容:
1.例句放在最后,与前面内容用制表符隔开;
2.只需提取各个词性的前两个例句,若只有一个例句就提取一个,“查看更多”中的例句不需提取;
3.换行用<br>表示。
4.比如提取单词big,网页中例句形式显示如图,提取格式如下
  1. big adj.大的;重要的;有雄心的;受欢迎的;adv.宏大地;夸大地;成功地;n.杰出的组织和个人 大的:71,重要的:11,夸大地:5,成功地:5,受欢迎的:4,杰出的组织和个人:2,宏大地:1,有雄心的:1 用作形容词 (adj.)<br>1.New York is a big commercial city.<br>纽约是一座大的商业城市。<br>2.His business yields big profits.<br>他的生意带来巨大的利润。<br>3.Don't cry, you are a big boy now.<br>别哭,你现在已经是大男孩了。<br>4.The big moment has come at last!<br>重要的时刻终于到来了!<br>5.The big thing is that you know what you want.<br>重要的是你必须知道自己想要什么。<br>6.He's got a lot of big ideas about how to change the system.<br>就如何改变体制,他有一些远大的想法。<br>7.That rock and roll band is very big in Chicago.<br>那个摇滚乐团在芝加哥很受欢迎。<br> 用作副词 (adv.)<br>1.You need to think big(= aim to achieve a lot).<br>你要敢想。<br>2.As for us, we mustn't talk big in our external propaganda.<br>在我们自己方面,对外宣传不要夸大。<br>3.The band comes over big with pop fans.<br>该乐队受流行音乐歌迷欢迎大为成功。<br> 用作名词 (n.)  <br>1.With that new promotion he's now one of the bigs in the company.<br>通过那次得晋升,他现在是公司的杰出员工之一。
复制代码
也即是按下面格式提取:
前面提取内容        用作形容词(adj.)<br>1.第一个例句<br>译文<br>2.第二个例句<br>译文<br>用作副词(adv.)<br>...<br>用作名词(n.)<br>1.第一个例句<br>译文
希望您给予帮助,另有酬谢。

TOP

回复 38# flashercs

挺棒的!
经过测试,还有点小问题及要求:
1.下列单词提取时,有错误提示,例句未能提取:
  1. African-American
  2. CEO
  3. ie
  4. allegation
  5. annually
  6. anyone
  7. boyfriend
  8. businessman
  9. celebration
  10. Christianity
  11. courtroom
  12. educator
  13. girlfriend
  14. Hispanic
  15. incredibly
  16. initially
  17. Iraqi
  18. Israeli
  19. Jewish
  20. juror
  21. longtime
  22. mainstream
  23. obviously
  24. originally
  25. oversee
  26. Palestinian
  27. pastor
  28. playoff
  29. PM
  30. precisely
  31. publisher
  32. rebuild
  33. regularly
  34. reportedly
  35. significantly
  36. tablespoon
  37. teammate
  38. typically
  39. ultimately
  40. workplace
  41. yeah
复制代码
2.网页上本身没有释义度分布图的单词,释义和例句之间直接用制表符分隔,能否增加一个制表符,后续处理需要相同的部分对齐。
现在提取出来的形式是:
  1. PC abbr.个人计算机(=personal computer) <br>1.Maintenance of PC is in my element.<br>我对电脑的维修保养很在行。
复制代码
需要的格式是:
  1. PC abbr.个人计算机(=personal computer) <br>1.Maintenance of PC is in my element.<br>我对电脑的维修保养很在行。
复制代码

TOP

本帖最后由 flashercs 于 2019-11-9 11:08 编辑
  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 100 | ForEach-Object -Begin {
  13.   $sw = New-Object -TypeName System.IO.StreamWriter -ArgumentList $outputFile, $false, ([System.Text.Encoding]::Default), 65536
  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.   $remain = [regex]'(?si)<div\s+class="main"[^>]*>.*?(?=<div\s+class="righter")'
  25.   # $recontent = [regex]'(?si)<div\s+class="word"[^>]*>.*?(?=<div\s+class="section[^"]*"[^>]*>)'
  26.   $rejs = [regex]'(?si)<script[^>]*>.*?</script>'
  27.   # $resent = [regex]'(?si)(?<=<h3[^>]*>例句</h3>).*?(?=<h3)'
  28.   $reXMLEntities = [regex]'(?si)&[^;<]*(;|(?=<|$))'
  29.   $evaluator = {
  30.     param($m)
  31.     $s = $m.Value;
  32.     if ($m.Groups[1].Value -eq '') {
  33.       $s += ';'
  34.     }
  35.     [System.Web.HttpUtility]::HtmlEncode([System.Web.HttpUtility]::HtmlDecode($s))
  36.   } -as [System.Text.RegularExpressions.MatchEvaluator]
  37.   # stringbuilder
  38.   $strbuilder = New-Object -TypeName System.Text.StringBuilder
  39.   Add-Type -AssemblyName System.Web.Extensions
  40.   $JSON = New-Object -TypeName System.Web.Script.Serialization.JavascriptSerializer -ErrorAction Stop
  41.   # $vsaengine = [Microsoft.JScript.Vsa.VsaEngine]::CreateEngine()
  42.   Add-Type -AssemblyName System.Web
  43. } -Process {
  44.   Write-Verbose "Fetching $_ ..."
  45.   for ($i = 2; $i -ge 0; $i--) {
  46.     try {
  47.       $readstream = $webclient.OpenRead($_)
  48.       Write-Verbose "Fetch $_ success"
  49.       break
  50.     } catch {
  51.       $_ | Out-String | Write-Host -ForegroundColor Red
  52.     }
  53.   }
  54.   if ($readstream) {
  55.     try {
  56.       $gzipstream = New-Object -TypeName System.IO.Compression.GZipStream -ArgumentList $readstream, ([System.IO.Compression.CompressionMode]::Decompress)
  57.       $sr = New-Object -TypeName System.IO.StreamReader -ArgumentList $gzipstream, ([System.Text.Encoding]::UTF8)
  58.       $strhtml = $sr.ReadToEnd()
  59.       $match = $remain.Match($strhtml)
  60.       # div.main matched
  61.       if ($match.Success) {
  62.         Write-Verbose "Match $_ success"
  63.         # convert html to xml
  64.         $strxml = $rejs.Replace($match.Value, '') -replace '(?s)<!--.*?-->' -replace '<([^\x00-\x7e]+)>', '&lt;$1&gt;' -replace '<br>', '<br/>'
  65.         $strxml = $reXMLEntities.Replace($strxml, $evaluator)
  66.         $xmldoc.LoadXml($strxml)
  67.         $strbuilder.Length = 0
  68.         $nodeWord = $xmldoc.DocumentElement.SelectSingleNode('div[@class="word"]')
  69.         # word-cont
  70.         [void]$strbuilder.Append($nodeWord.SelectSingleNode('.//h1[@class="keyword"]/text()').Value).Append("`t")
  71.         # dict-translation
  72.         [void]$strbuilder.Append( ($nodeWord.SelectNodes('.//ul/li[position()<last()]') | ForEach-Object { $_.innerText }) -join " " ).Append("`t")
  73.         # dict-chart
  74.         $nodeChartBasic = $nodeWord.SelectSingleNode('.//div[@id="dict-chart-basic"]/@data')
  75.         # chart basic exist
  76.         if ($nodeChartBasic) {
  77.           $strjson = [System.Uri]::UnescapeDataString($nodeChartBasic.Value)
  78.           $jsobj = $JSON.DeserializeObject($strjson)
  79.           foreach ($field in $jsobj.Keys) {
  80.             [void]$strbuilder.Append($jsobj.Item($field).Item('sense')).Append(':').Append($jsobj.Item($field).Item('percent')).Append(',')
  81.           }
  82.           [void]$strbuilder.Remove($strbuilder.Length - 1, 1)
  83.         }
  84.         [void]$strbuilder.Append("`t")
  85.         
  86.         # 例句
  87.         # $match1 = $resent.Match($strhtml)
  88.         $nodeSent = $xmldoc.DocumentElement.SelectSingleNode('div[@class="section sent"]/h3[text()="例句"]/following-sibling::div')
  89.         if ($nodeSent) {
  90.           try {
  91.             # $xmldoc.LoadXml(($match1.Value -replace '<br>', '<br/>' -replace '<([^\x00-\x7e]+)>', '&lt;$1&gt;'))
  92.             $nodeSent.SelectNodes('ol') | ForEach-Object {
  93.               # 用作形容词 (.adj)
  94.               [void]$strbuilder.Append(($_.PreviousSibling.InnerText -replace '\s+' -replace '\(', ' $&')).Append('<br>')
  95.               $_.SelectNodes('li[position()<3]') | ForEach-Object -Begin { $index = 0 } -Process {
  96.                 $index++;
  97.                 [void]$strbuilder.Append("$index.$(($_.SelectNodes('text()')|ForEach-Object {$_.Value}) -join '<br>')").Append('<br>')
  98.               }
  99.             }
  100.             [void]$strbuilder.Remove($strbuilder.Length - 4, 4)
  101.           } catch {
  102.             $_ | Out-String | Write-Host -ForegroundColor Red
  103.           }
  104.         } else {
  105.           Write-Verbose "没有例句."
  106.         }
  107.         # output result string
  108.         $sw.WriteLine(($strbuilder.ToString() -replace "[\r\n]+"))
  109.       } else {
  110.         Write-Verbose "Match $_ failed"
  111.       }
  112.     } catch {
  113.       $_ | out-string | Write-Host -ForegroundColor Red
  114.     } finally {
  115.       $readstream.Close()
  116.       Remove-Variable readstream
  117.       if ($gzipstream) {
  118.         $gzipstream.Dispose()
  119.       }
  120.       if ($sr) {
  121.         $sr.Dispose()
  122.       }
  123.     }
  124.   } else {
  125.     $sw.WriteLine($_)
  126.   }
  127. } -End {
  128.   $sw.Dispose()
  129.   $webclient.Dispose()
  130. }
复制代码
微信:flashercs
QQ:49908356

TOP

回复 39# flashercs

已扫码。
极少部分单词出现问题,显示源页面,并且提取不到。比如:face,contact,confront,encounter等。

TOP

回复 40# qixiaobin0715


    改
微信:flashercs
QQ:49908356

TOP

怎么这么复杂呢 混编的也行吧
  1. @set @i=0 /* & @echo off & cscript.exe -NoLogo -E:JScript %0 <单词列表.txt >结果.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. function getByClass(tag,Classname){
  9.         if(html.getElementsByClassName){
  10.                 return html.getElementsByClassName(Classname);
  11.         }
  12.         var tags = html.getElementsByTagName(tag);
  13.         for(var i = 0,len = tags.length; i < len; i++){
  14.                 if( tags[i].className ==Classname){
  15.                          return(tags[i]);
  16.                 }
  17.         }
  18. }
  19. while (!WSH.StdIn.AtEndOfStream) {
  20.         var s = WSH.StdIn.ReadLine();
  21.         var str = s;
  22.         var url = "http://dict.cn/" + str;
  23.         var html = new ActiveXObject("htmlfile");
  24.         html.write(GetContent(url));
  25.         var ul = getByClass("ul","dict-basic-ul");
  26.         if (ul) {
  27.                 str += "\t" + ul.innerText.replace(/[\r\n]/gm,'') + "。\t"
  28.                 if (html.getElementById("dict-chart-basic")) {
  29.                         var obj = new Function("return" + unescape(html.getElementById("dict-chart-basic").data))();
  30.                         for(var key in obj ) { str += obj[key].percent > 5 ? obj[key].sense + ":"+ obj[key].percent + "%, " : ""};
  31.                 };
  32.                 var div = getByClass("div","layout sort");
  33.                 if (div) {
  34.                         str+= '\t'
  35.                         var b = div.getElementsByTagName("b");
  36.                         var ol = div.getElementsByTagName("ol");
  37.                         for (var i=0; i<ol.length; i++) {
  38.                                 var s =b[i];
  39.                                 if (s) { str+= s.innerText + '<br>' };
  40.                                 var li= ol[i].getElementsByTagName("li");
  41.                                 for (var j=0, len = li.length; j<len; j++) {
  42.                                         if (j < 2) {str+= j+1 + '. ' + li[j].innerText + '<br>' };
  43.                                 };
  44.                         };
  45.                         WSH.Echo(str.replace(/\r?\n/g,'<br>'));
  46.                 };
  47.        };
  48.        else { str += "\t" + "错误" };
  49. };
复制代码

TOP

回复 41# flashercs

完美!!!

TOP

回复 42# terse

不错。就是速度稍慢,少部分单词漏提。

TOP

回复 38# qixiaobin0715

提取的文件增加制表符对齐相同内容问题,用文本编辑器打开,用正则表达式替换已解决。

TOP

返回列表