2006年10月23日 星期一

WordPress Plugin:Related Posts中文問題的部份解法

中文問題

參照這裡的說法,在WordPress裡,$post->post_name是$post->post_title經sanitize_title()處理的結果,目的是轉換網址使用,但plugin: Related Post的做法是把post_name和post_content做FULLTEXT索引,用本篇post_name對其它篇的post_name + post_content做匹配,結果是用形同亂碼的標題去找文字關聯度。而原本的post_title的type為mediumtext,不能和content合為FULLTEXT,只好對post_name下手。

嘗試解法

這裡下載改過的code。

修改plugins/related-posts.php,補上urldecode(),將那堆%ab%cd%ef換回中文,也就是將這行

$terms = str_replace(’-', ‘ ‘, $post->post_name);

改為這行

$terms = str_replace(’-', ‘ ‘, urldecode($post->post_name));

這行之後再補上一些斷句的詞,讓標題的單詞會依標點符號拆開

$terms = str_replace(’:’, ‘ ‘, $terms);
$terms = str_replace(’,’, ‘ ‘, $terms);
$terms = str_replace(’.’, ‘ ‘, $terms);
$terms = str_replace(’、’, ‘ ‘, $terms);

如此一來,至少能將標題的單詞對內文做匹配,只是標題對標題就不行了,而且內文的標點符號也不會被MySQL拿來分隔單詞。如果想提高內文單詞匹對的成功率,要嘛不用全形標點符號(很醜),不然就在必要的時候先打個空白字元,再打全形標點符號,比方像這樣:” 好書推薦 ”。上句的” 好書推薦 ”前後有個’ ‘,應該會讓這篇匹對到標題有” 好書推薦 ”的文章,比方這篇,很鳥的做法。

另一個做法是硬改sql schema,把post_title的type mediumtext改成varchar(255),加入post_title和post_content的FULLTEXT,再把code改成用post_title去匹配而不是post_name,這樣可以多做到標題和標題匹配,誠徵勇者嘗試後分享。

沒有留言:

張貼留言