第一次使用PHPCMS V9的時候就感覺這個東西在輸入完標題后就直接生成關鍵詞挺有意思的,后來發現他的搜索也很有意思,將每一篇文章都自動生成一串的關鍵詞然后存放到一個數據表中,再作全文索引搜索,原來一直沒有研究過,也不知道他是怎么實現的,感覺挺神密,近來想把他的這個功能單獨抽出來用,于是就拿來研究了一下.
先說主交對他的基本原理的分析,不對話請指正.
首先:使用空格分隔需要生成關鍵詞的字符串,如果分出來的字數小于min_len 則不于處理,大于max_len會進行繼續分隔.
第二:判斷分出來的是否為詞組,這里就用到了dict.csv 在這個文件中有很多詞組,他們的格式就是“少年 333”類似這樣的,在該類初始化的時候已經把這個文件讀完并放入內存,使用的變量為$this->rank_dic 二維數組 數組的格式是 $this->rank_dic[關鍵詞的長度][關鍵詞] = csv文件中每行后面的數字,注,該數字沒有實際意義,為什么這么說,大家可以看看這一句:
- function is_word($okWord){
- $slen = strlen($okWord);
- if($slen > $this->max_len){
- return false;
- }else{
- return isset($this->rank_dic[$slen][$okWord]);
- } //Vevb.com
- }
該方法的意思是判斷循環的分隔字符是否為詞組,判斷是依據就是 $this->rand_dic[$slen][$okWord]是否定義,所以說他這個值是沒有意義的,只是為了說明他有一個值就可以了.
但也有一個問題,這個詞庫不能更新,是一個很嚴重的問題,而且也不能自定義.
第三:如果第二步判斷的是一個詞組就加上一個空格把原有的關鍵詞連在一起。
第四:處理完后就可以返回一個處理完的關鍵詞了,你怎么處理這個關鍵詞就是你自己的事了.
新聞熱點
疑難解答