手把手教你作關鍵詞匹配項目(搜索引擎)---- 第二十二天 手把手教你作關鍵詞匹配項目(搜索引擎)---- 第十二天 手把手教你作關鍵詞匹配項目(搜索引擎)---- 第十八天 手把手教你作關鍵詞匹配項

最新面試經歷:面試的感觸(二)面試的感觸php

最新的架構:高併發數據採集的架構應用(Redis的應用)html

吐槽:今天也是剛把心態調整好,繼續寫之前沒有完成的文章,最近幾個月本身也是休整了一段時間,回家作苦力,也看成是鍛鍊鍛鍊本身的身體,畢竟任何東西都換不回你的健康,我也是建議作IT行業的帥哥們多活動活動大家其它的部位。面試

 

第二十二天算法

起點:手把手教你作關鍵詞匹配項目(搜索引擎)---- 第一天編程

回顧:手把手教你作關鍵詞匹配項目(搜索引擎)---- 第二十一天架構

 

小帥帥是樂於作總結的人,根據之前所學的知識他總結了以下:併發

1. 寶貝屬性的擴展和類型的問題初步已經獲得很好的控制了,不過要推廣和運營維護仍是遇到了很大的障礙。高併發

2. 對關鍵詞的拆分使用了scws擴展以及本身原生的業務拆詞方案,拆詞有效的解決了詞組方面的匹配難度。post

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 }

 

整個代碼相對來講實現了該有的功能,小帥帥很是的高興,由於項目完成了確定少不了項目獎金,說不定還有一餐豐富的晚餐,

想一想都開始流口水了。

 

小帥帥把代碼交給於老大,滿懷期待的等候於老大的最後確定。

於老大看了以後會有哪些反應呢?請關注第三章:關鍵詞匹配項目深刻研究(一)

 

第二章已完結,源代碼地址:手把手教你作關鍵詞匹配項目(二章完結篇)

相關文章
相關標籤/搜索