当前位置:秋叶网络博客 前端设计 ◊ 智取百度、谷歌分词技术实现智能模糊搜索

智取百度、谷歌分词技术实现智能模糊搜索

作者:秋叶 发表时间:2017年8月27日

众所周知,wordpress的搜索相当糟糕,它是硬性(完全)匹配,为了实现博客智能模糊搜索功能,为了尽可能达到百度等各大搜索引擎的搜索效果,就要分词准确与分词扩展。用户输入一段话,如何将这句话根据词组切割成一段一段,通过这一段一段再去数据库匹配内容就是搜索技术的核心所在。

所谓智取就是爬虫技术,通过服务端发请求到第三方网站(跨域只在浏览器上独有的特性,在服务端发请求就不受任何限制了),我这里以百度为例子,通过nodejs爬取内容,然后提取搜索出来的前十条里面的加红关键词。代码样例:

var http = require("http");
var express = require('express');
var app = express();
app.get('/search', index);
function index(req, res, next) {
    let keyword = req.query.keywords;
    if(keyword){
        var search_url = 'http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=';
        http.get(search_url+encodeURI(keyword),function(_res){
            let _data = '';
            _res.on('data',(chunk) => _data += chunk.toString());
            _res.on('end', () => {
                let content = fn.getNode("#content_left",_data);//限定获取范围,减轻计算压力fn.getNode是封装的一个字符串里面取节点的函数,具体看http://www.mizuiren.com/477.html
                let baiduKeywords = content.match(/<em>([^<]+)<\/em>/g);//在容器内匹配红色字关键词,其实就是<em>*</em>
                let fanalKeywords = [];
                if(baiduKeywords){
                    baiduKeywords.forEach(function(item){
                        let text = item.split("<em>")[1].split("</em>")[0];
                        fanalKeywords.indexOf(text) > -1 || fanalKeywords.push(text);//把关键词都放到fanalKeywords数组里,可用这个数组去数据库查数据了,这里省略
                    });
                    res.end('<!DOCTYPE html><meta http-equiv="content-type" content="text/html;charset=utf-8"><html>'+fanalKeywords.join(",")+'</html>');//为了演示,直接把关键词输送到前端页面上
                }else{
                    return next();
                }
            });
        });
    }else{
        return next();
    }
}

前端请求:/search?keywords=汶川大地震
分词结果:汶川大地震,汶川,地震,汶川地震,汶川县,大地震

前端请求:/search?keywords=我爱深圳
分词结果:我爱深圳,我爱深圳我爱深圳,深圳,我爱,深圳市,深圳市爱

前端请求:/search?keywords=秋叶网络博客
分词结果:秋叶网络博客,博客,秋叶,网络,秋叶博客

前端请求:/search?keywords=生活 志趣 爱
分词结果:志趣,生活,爱上,爱,爱生活爱

前端请求:/search?keywords=技术是对生活最完美的诠释
分词结果:对生活最好的诠释,对生活的诠释,完美诠释,生活,是对,生活最完美的诠释,技术,是最好的诠释,生活好,对生活,最完美的诠释,完美,是对生活最好的诠释,为,完美的,最好的生活,生活的,生活的最完美的诠释,对于,完美生活的诠释

目录: 前端设计 | 标签: , | 3627次阅读