程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 手把手教你做關鍵詞匹配項目(搜索引擎)---- 第二十二天,教你做第二十二天

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

編輯:關於PHP編程

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


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

最新的架構:高並發數據采集的架構應用(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 }

 

整個代碼相對來說實現了該有的功能,小帥帥非常的高興,因為項目完成了肯定少不了項目獎金,說不定還有一餐豐富的晚餐,

想想都開始流口水了。

 

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

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

 

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved