最新面試經歷:面試的感觸(二)、面試的感觸
最新的架構:高并發數據采集的架構應用(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 Selector11 {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 }整個代碼相對來說實現了該有的功能,小帥帥非常的高興,因為項目完成了肯定少不了項目獎金,說不定還有一餐豐富的晚餐,
想想都開始流口水了。
小帥帥把代碼交給于老大,滿懷期待的等候于老大的最后肯定。
于老大看了之后會有哪些反應呢?請關注第三章:關鍵詞匹配項目深入研究(一)
第二章已完結,源代碼地址:手把手教你做關鍵詞匹配項目(二章完結篇)
新聞熱點
疑難解答