程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP制作百度詞典查詞采集器

PHP制作百度詞典查詞采集器

編輯:關於PHP編程

     這篇文章主要介紹了PHP制作百度詞典查詞采集器的相關資料,需要的朋友可以參考下

       

    百度dict 采集樣本

    寫的采集百度dict詞典翻譯後的所有結果數據,當然附帶了13.5w單詞庫和采集簡單的案例,這裡我把寫出的主要類dict.class.php放出來,項目地址http://github.com/widuu/baidu_dict,有需要的直接fork就可以了~麼麼哒,這東西用的人很少,所以有用的兄弟拿走了哈~

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 <?php /** * dict.class.php 采集百度詞典翻譯內容 * * @copyright (C) 2014 widuu * @license http://www.widuu.com * @lastmodify 2014-2-15 */     header("content-type:text/html;charset=utf8"); class Dict{   private $word;   //顯示的條數 private static $num = 10;   public function __construct(){}     /** * 公用返回百度采集數據的方法 * @param string 英文單詞 * retun array( * symbol" => 音標 * "pro" => 發音 * "example"=> 例句 * "explain"=> 簡明釋義 * "synonym"=> 同反義詞 * "phrase" => 短語數組 * ) * */ public function content($word){ $this -> word = $word; $symbol = $this -> Pronounced(); $pro = $this->getSay(); $example = $this -> getExample(); $explain = $this -> getExplain(); $synonym = $this -> getSynonym(); $phrase = $this -> getPhrase(); $result = array( "symbol" => $symbol, //音標 "pro" => $pro, //發音 "example"=> $example, //例句 "explain"=> $explain, //簡明釋義 "synonym"=> $synonym, //同反義詞 "phrase" => $phrase //短語數組 ); return $result; }     /** * 遠程獲取百度翻譯內容 * get function curl * retun string * */   private function getContent(){ $useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0"; $ch = curl_init(); $url = "http://dict.baidu.com/s?wd=".$this->word; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT,$useragent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPGET, 1); curl_setopt($ch, CURLOPT_AUTOREFERER,1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $result = curl_exec($ch); if (curl_errno($curl)) { echo 'Errno'.curl_error($curl); } curl_close($ch); return $result; }     /** * 獲取百度翻譯發音 * retun array(英,美) * */   private function Pronounced(){ $data = $this -> getContent(); preg_match_all("/"EN-US">(.*)</b>/Ui",$data,$pronounced); return array( 'en' => $pronounced[1][0], 'us' => $pronounced[1][1] ); }   /** * 獲取百度翻譯發音 * return array(英,美) * */   private function getSay(){ $data = $this -> getContent(); preg_match_all("/url="(.*)"/Ui",$data,$pronounced); return array( 'en' => $pronounced[1][0], 'us' => $pronounced[1][1] ); }   /** * 獲取百度翻譯例句 * return array() 多維數組 例句 * */   private function getExample(){ $str = ""; $data = $this -> getContent(); preg_match_all("/var example_data = (.*)];/Us",$data,$example); $data1 = "[[[".ltrim($example[1][0],"["); $data2 = explode("[[[",$data1); $num = count(array_filter($data2)); foreach($data2 as $key => $value){ $data3 = explode("[[","[[".$value); foreach ($data3 as $k => $v) { preg_match_all("/["(.*)",/Us","[".$v, $match); if(!empty($match[1])){ $str .= implode($match[1]," ")."@"; } } } $data4 = trim($str,"@"); $data5 = explode("@", $data4); $result = array_chunk($data5, 2); return $result; }   /** * 獲取簡明釋義 * return array (x => "詞性",b => "附屬") * **/   private function getExplain(){ $data = $this -> getContent(); preg_match_all("/id="en-simple-means">(.*)<div(s+)class="source">/Us",$data,$explain); $r_data = $explain[1][0]; preg_match_all("/<p><strong>(?P<adj>.*)</strong><span>(?P<name>.*)</span></p>/Us", $r_data, $a_data); preg_match_all("/<span>(?P<tag>[^>]+):<a(s+)href="(.*)">(?P<word>.*)</a></span>/Us", $r_data, $b_data);   $result = array(); foreach ($a_data["adj"] as $key => $value) { $result[$value] = $a_data["name"][$key]; }   $word_b = array(); foreach ($b_data["tag"] as $key => $value) { $word_b[$value] = strip_tags($b_data["word"][$key]); }   $result_data = array("x" => $result,"b" => $word_b);   return $result_data; }     /** * 獲取同義詞 * return array(0 => "同義詞", 1 => "反義詞") 一般為多維數組 * */   private function getSynonym(){ $data = $this -> getContent(); preg_match_all("/id="en-syn-ant">(.*)<div(s+)class="source">/Us",$data,$synonym); $content = $synonym[1][0]; $data1 = explode("</dl>", $content); $result = array(); $data2 = array(); foreach ($data1 as $key => $value) { preg_match_all("/<strong>(?P<adj>.*) ;</strong></div><div(s+)class="syn-ant-list"><ul>(?<content>.*)</ul>/Us", $value, $r_data); $data2[$key]["adj"] = $r_data["adj"]; $data2[$key]["content"] = $r_data["content"]; }   foreach ($data2 as $key => $value) { foreach ($value["content"] as $k => $v) { if(!empty($v)){ preg_match_all("/<li><p>(?P<title>.*)</p>(?P<value>.*)</li>/Us", $v, $v_data); foreach ($v_data['title'] as $m => $d) { $data = strip_tags(preg_replace("<</a>>"," ", $v_data["value"][$m])); $result[$key][$value["adj"][$k]][$d] = $data; } } } } return $result; }   /** * 獲取短語詞組 * return array (key => value) 一維或者多維數組 * */   private function getPhrase(){ $num = self::$num; $data = $this -> getContent(); preg_match_all("/id="en-phrase">(.*)<div class="source">/Us",$data,$phrase); $data = explode("</dd>",$phrase[1][0]); $data1 = array_slice($data,0,$num); $result = array(); foreach ($data1 as $key => $value) { $data2 = explode("</p>", $value); $n = count($data2); if($n<=3){ $result[str_replace(" ","",strip_tags($data2[0]))] = strip_tags($data2[1]); }else{ $data3 = array_slice($data2,0,$n-1); $data4 = array_slice($data2,0,2); $res = array_diff($data3,$data4); $data5 = array_chunk($res,2); $key_value = trim(str_replace(" ","",strip_tags($data4[0]))); $result[$key_value] = strip_tags($data4[1]); foreach ($data5 as $key => $value) { foreach ($value as $k => $v) { $value[$k] = strip_tags($v); } $array = array($result[$key_value],$value); if (array_key_exists($key_value, $result)){ $result[$key_value] = $array; } }   } } return $result; }   /** * 將數組轉換為字符串 * * @param array $data 數組 * @param bool $isformdata 如果為0,則不使用new_stripslashes處理,可選參數,默認為1 * @return string 返回字符串,如果,data為空,則返回空 */ private function array2string($data, $isformdata = 1) { if($data == '') return ''; if($isformdata) $data = $this->new_stripslashes($data); return addslashes(var_export($data, TRUE)); }   /** * 返回經stripslashes處理過的字符串或數組 * @param $string 需要處理的字符串或數組 * @return mixed */ private function new_stripslashes($string) { if(!is_array($string)) return stripslashes($string); foreach($string as $key => $val) $string[$key] = $this->new_stripslashes($val); return $string; }   }   // $word = new dict("express"); // $word ->content();

    以上就是本文的全部內容了,非常實用的功能,希望小伙伴們能夠喜歡。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved