300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 抓取百度搜狗相关搜索 筛选文本相似度最高的相关搜索(PHP)

抓取百度搜狗相关搜索 筛选文本相似度最高的相关搜索(PHP)

时间:2020-05-23 19:39:08

相关推荐

抓取百度搜狗相关搜索 筛选文本相似度最高的相关搜索(PHP)

<?phperror_reporting(E_ERROR);print_r(curl_get_max_similarity__keyword("世界最受欢迎的明星"));/*** 获取相似度最高的相关搜索* @param string $keyword 关键字* @return string 返回字符串*/function curl_get_max_similarity__keyword($keyword) {//获取相关搜索$relate_keyword_arr = curl_query_keywords($keyword);if (empty($relate_keyword_arr)) {return;}//遍历计算相似度$relate_keyword_similarity_arr = array();$keyword_frequency_arr = segmentate_word_frequency($keyword); //搜索关键字的分词频次foreach ($relate_keyword_arr as $key => $relate_keyword) {$relate_keyword_frequency_arr = segmentate_word_frequency($relate_keyword); //相关关键字的分频频次$relate_keyword_similarity_arr[$relate_keyword] = compute_text_similarity($keyword_frequency_arr, $relate_keyword_frequency_arr);}//查找相似度最高的相关搜索asort($relate_keyword_similarity_arr);end($relate_keyword_similarity_arr);return key($relate_keyword_similarity_arr);}/*** 获取百度+搜狗全部相关搜索* @param string $keyword 关键字* @return array 相关搜索*/function curl_query_keywords($keyword) {if (empty($keyword)) {return null;}return array_unique(array_merge(curl_get_baidu_keywords($keyword), curl_get_sogou_keywords($keyword)));}/*** 百度相关搜索* @param string $keyword 关键字* @return array 相关搜索数组*/function curl_get_baidu_keywords($keyword) {$ch = curl_init(); //初始化curlcurl_setopt($ch, CURLOPT_URL, '/s?ie=UTF-8&wd=' . urlencode($keyword)); //抓取指定网页curl_setopt($ch, CURLOPT_HEADER, false); //设置不需要头信息curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //只获取页面内容,但不输出curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器curl_setopt($ch, CURLOPT_ENCODING, 'gzip');curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*','Accept-Encoding: gzip, deflate, br','Accept-Language: zh-CN,zh;q=0.9,en;q=0.8','Connection: keep-alive','User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','X-Requested-With: XMLHttpRequest',));//请求协议httpscurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在$data = curl_exec($ch);curl_close($ch);$regex = '/<a class="c-font-medium new-inc-rs-item" href="\/s\?wd=.*?">(.*?)<\/a>/i';preg_match_all($regex, $data, $match);return $match[1];}/*** 搜狗相关搜索* @param string $keyword 关键字* @return array 相关搜索数组*/function curl_get_sogou_keywords($keyword) {$ch = curl_init(); //初始化curlcurl_setopt($ch, CURLOPT_URL, '/web?query=' . urlencode($keyword)); //抓取指定网页curl_setopt($ch, CURLOPT_HEADER, false); //设置不需要头信息curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //只获取页面内容,但不输出curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器curl_setopt($ch, CURLOPT_ENCODING, 'gzip');curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*','Accept-Encoding: gzip, deflate, br','Accept-Language: zh-CN,zh;q=0.9,en;q=0.8','Connection: keep-alive','User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','X-Requested-With: XMLHttpRequest',));//请求协议httpscurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在$data = curl_exec($ch);curl_close($ch);$regex = '/<td><p><a href=.+? id=.+?>(.+?)<\/a><\/p><\/td>/si';preg_match_all($regex, $data, $match);return $match[1];}/*** 计算两句文本相似度(欧几里得距离算法)* @param array $keyword_frequency_arr 关键字词频* @param array $relate_keyword_frequency_arr 相关搜索词频* @return number 相似度*/function compute_text_similarity($keyword_frequency_arr, $relate_keyword_frequency_arr) {//获取一组关键字词汇表:关键字+搜索关键字$word_table_arr = array_unique(array_keys($keyword_frequency_arr), array_keys($relate_keyword_frequency_arr));//欧几里得距离算法计算相似度$weight = 0;foreach ($word_table_arr as $key => $word) {$keyword_word_weight = array_key_exists($word, $keyword_frequency_arr) ? $keyword_frequency_arr[$word] : 0;$relate_keyword_word_weight = array_key_exists($word, $relate_keyword_frequency_arr) ? $relate_keyword_frequency_arr[$word] : 0;$weight = $weight + pow($keyword_word_weight - $relate_keyword_word_weight, 2);}return sqrt($weight);}/*** 获取分词词频* @param string $keyword 关键字* @return array 词频数组*/function segmentate_word_frequency($keyword) {//这个地方写上phpanalysis对应放置路径require_once './WordAnalysis/phpanalysis.class.php';PhpAnalysis::$loadInit = false; //初始化类时是否直接加载词典,选是载入速度较慢,但解析较快;选否载入较快,但解析较慢$pa = new PhpAnalysis('utf-8', 'utf-8', false);$pa->LoadDict(); //载入词典$pa->SetSource($keyword); //设置源字符串$pa->StartAnalysis(true); //是否对结果进行优化//$tags = $pa->GetFinallyKeywords(5); // 获取文章中的五个关键字return $pa->GetFinallyIndex();}?>

存在问题:文本相似度算法使用的是欧几里得距离算法,由于对比的文本较短,所以效果不好。

代码

链接: /s/1FNaSoAuQu0Si73TAQpB9Rg 提取码: vaer

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。