欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天

程序员文章站 2024-02-06 09:34:52
...

手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天

最新面试经历:面试的感触(二)、面试的感触

最新的架构:高并发数据采集的架构应用(Redis的应用)

吐槽:今天也是刚把心态调整好,继续写以前没有完成的文章,最近几个月自己也是休整了一段时间,回家做苦力,也当作是锻炼锻炼自己的身体,毕竟任何东西都换不回你的健康,我也是建议做IT行业的帅哥们多活动活动你们其它的部位。

第二十二天

起点:手把手教你做关键词匹配项目(搜索引擎)---- 第一天

回顾:手把手教你做关键词匹配项目(搜索引擎)---- 第二十一天

小帅帅是乐于做总结的人,根据以前所学的知识他总结了如下:

1. 宝贝属性的扩展和类型的问题初步已经得到很好的控制了,不过要推广和运营维护还是遇到了很大的障碍。

2. 对关键词的拆分使用了scws扩展以及自己原生的业务拆词方案,拆词有效的解决了词组方面的匹配难度。

3. 所有的初始工作好像已经完成了,只需要最后的整理项目应该可以正式运行起来了。

小帅帅的主动意识比较强烈,他没有去问于老大,就自己动手写了份代码,该代码主要是为了把所有的步骤连接起来。

宝贝属性的扩展CharList的构建请参照:手把手教你做关键词匹配项目(搜索引擎)---- 第十二天 ~ 手把手教你做关键词匹配项目(搜索引擎)---- 第十八天

Selector主要步骤如下:

1. 获取宝贝属性。

2. 使用业务知识扩充宝贝属性,形成CharList

3. 从词库中获取关键词

4. 关键词拆分算法

5. 匹配度算法

6. 返回匹配上的关键词列表

代码如下:

 1 php
 2 #@Filename:selector/Selector.php
 3 #@Author:oshine
 4 
 5 require_once dirname(__FILE__) . '/SelectorItem.php';
 6 require_once dirname(__FILE__) . '/charlist/CharList.php';
 7 require_once dirname(__FILE__) . '/charlist/CharlistHandle.php';
 8 require_once dirname(dirname(__FILE__)) . '/lib/Logger.php';
 9 
10 class Selector
11 {
12 
13     private static $charListHandle = array(
14         "黑名单" => "BacklistCharListHandle",
15         "近义词" => "LinklistCharListHandle"
16     );
17 
18     public static function select($num_iid)
19     {
20         $selectorItem = SelectorItem::createFromApi($num_iid);
21 
22         Logger::trace($selectorItem->props_name);
23 
24         $charlist = new CharList();
25 
26         foreach (self::$charListHandle as $matchKey => $className) {
27 
28             $handle = self::createCharListHandle($className, $charlist, $selectorItem);
29             $handle->exec();
30 
31         }
32 
33         $selectWords = array();
34 
35         $keywords = DB::makeArray("select word from keywords");
36         foreach ($keywords as $val) {
37             # code...
38             $keywordEntity = SplitterApp::split($val["word"]);
39             
40                 # code...
41             if(MacthExector::macth($keywordEntity,$charlist)){
42                 $selectWords[] = $val["word"];
43             }           
44 
45         }
46 
47         return $selectWords;
48     }
49 
50     public static function createCharListHandle($className, $charlist, $selectorItem)
51     {
52         if (class_exists($className)) {
53             return new $className($charlist, $selectorItem);
54         }
55         throw new Exception("class not exists", 0);
56     }
57 }

测试驱动代码编程请参照:

也是使用一样的原理,先把测试代码写好,后续补全MatchExector代码。

MatchExector主要功能计算匹配度。

1. 如果只要有一个词在黑名单里面,匹配度肯定为零。

2. 如果是核心词,那么根据以前提到的算法来计算,请参照:手把手教你做关键词匹配项目(搜索引擎)---- 第十九天

 1 php
 2 #@Filename:mathes/MatchExector.php
 3 #@Author:oshine
 4 
 5 class MatchExector {
 6 
 7     public static function match(KeywordEntity $keywordEntity,CharList $charlist){
 8 
 9         $matchingDegree = 0;
10         $elementWords = $keywordEntity->getElementWords();
11         foreach ($elementWords as $word) {
12             # code...
13             if(in_array($word, $charlist->getBlacklist()))
14                 return false;
15             if(in_array($word, $charlist->getCore()))
16                 $matchingDegree+=$keywordEntity->calculateWeight($word);
17 
18         }
19 
20         if($matchingDegree>0.8)
21             return true;
22         return false;
23 
24     }
25     
26 }

整个代码相对来说实现了该有的功能,小帅帅非常的高兴,因为项目完成了肯定少不了项目奖金,说不定还有一餐丰富的晚餐,

想想都开始流口水了。

小帅帅把代码交给于老大,满怀期待的等候于老大的最后肯定。

于老大看了之后会有哪些反应呢?请关注第三章:关键词匹配项目深入研究(一)

第二章已完结,源代码地址:手把手教你做关键词匹配项目(二章完结篇)