搜索引擎-一种提示词推荐算法

      搜索引擎能够说目前全部互联网应用里技术含量最高的一种。尽管应用形式比较简单:用户输入查询词,搜索引擎返回搜索结果。可是,搜索引擎须要达到的目标:更全、更快、更准。如何让搜索结果更准确始终是搜索引擎的一大难题。算法

  公司最近在开发某行业的垂直搜索引擎,我做为该项目组的核心成员主要是负责核心算法的研究工做。我也是刚开始接触这个行业,目前还处于摸索阶段,还有很长的路要走。网络

言归正传,先谈一下这个项目的背景。这个项目是一个行业性质的垂直搜索引擎。用户分为两大类:普通用户、专业用户。整个项目分为:爬虫技术组,引擎组,大数据分析组和算法组。引擎的爬虫、词库的创建和引擎的选型都不是本文的重点,就一笔带过,重点在于推荐算法的设计。框架

1、网络爬虫工具

  系统的数据,须要从几个专业网站进行抓取。尝试了几个爬虫,最后选取heritrix最为咱们的爬虫框架,选取它的缘由主要是感受配置项虽然多,可是比较灵活,特别适合咱们的要求。固然,爬从技术组也本身尝试实现了一个爬虫,主要是爬取地址比较固定几种数据。大数据

2、词库的创建网站

  词库初步分为专业主题词、行业普通词库、通常通用词库、废词库、还有用于感情分析的词库。搜索引擎

专业词库的实现前期是采起人工的方式来处理的,并制做了若干的辅助工具,供专业人员来挑选、合并、删除主题词的操做。spa

后面几种词库的实现,是先选用了搜狗等几种输入法的词库库为基础,在这些词库的基础上对爬虫爬出来的文档进行向量化。设计

3、引擎的搭建3d

  经过对采集的数据进行去噪、分段、特征提取,而后把相应的数据导入到solr里。

4、推荐算法

  当用户输入关键词查询的时候,如何让用户查询更准确呢?咱们设想,针对用户的输入,咱们若是能给出若干个和用户输入的关键词类似度很近的词,以这些做为查询条件,若是咱们的算法足够好,搜索出来的结果会大大增长检索的准确度。下面给出具体的算法思路:

从向量化的角度来看,每一篇文档都对应一个向量,其中表示特征项i.

是一个向量由词、词的位置、TF等义项来肯定的。对于版本1,咱们只取了词、词的位置。咱们先用分类规则,把文档分红若干类,基于每一类进行以下计算:

表示两个特征项的类似度。

咱们定义一下距离公式

 

咱们对于每一个文档的特征项,两两求出特征项的类似度。经过这个距离公式

咱们能够得出,对于每个分类,以这些特征项为顶点,以类似度距离为边,就构

成了以下的无向图。

     (lawnet

  类比于wordnet和知网的hownet咱们称这个无向图,为lawnet

  那咱们的设想问题就转化为:选取任意一个顶点,找出若干个(譬如10个)由这些顶点组成的最小生成树或者边权之和最小的最小子图。这是一个局部最优的随机问题。也就是说,咱们只须要知足用户承认的体验程度便可,若是几率为90%,也就是说,当用户输入10000次,咱们能成功给出9000次的提示词就好了。

目前的解法我尝试了两种:

  一种PRIM算法。

  第二种算法:先经过floyd算法,算出任意两点的最短距离,做为一个边;这些边就组合成一个集合。而后给任意的顶点,从这个边集合里找出包含这个顶点的前N个最小边。

相关文章
相关标签/搜索