最新的架构:高并发数据采集的架构应用(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 }