これが最善の方法であるかどうかはわかりませんが、過去に検索を設定した方法は、検索には何が含まれていても、データベースに「茎」フィールドを格納することです。私はその後、
<?php
class Cleaner {
var $stopwords = array(" find ", " about ", " me ", " ever ", " each ", " update ", " delete ", " add ", " insert ", " where ", " i ", " a ", " my ");//you need to extend this big time.
var $symbols = array('/','\\','\'','"',',','.','<','>','?',';',':','[',']','{','}','|','=','+','-','_',')','(','*','&','^','%','$','#','@','!','~','`');
function parseString($string) {
$string = ' '.$string.' ';
$string = $this->removeStopwords($string);
$string = $this->removeSymbols($string);
return $string;
}
function removeStopwords($string) {
for ($i = 0; $i < sizeof($this->stopwords); $i++) {
$string = str_replace($this->stopwords[$i],' ',$string);
}
//$string = str_replace(' ',' ',$string);
return trim($string);
}
function removeSymbols($string) {
for ($i = 0; $i < sizeof($this->symbols); $i++) {
$string = str_replace($this->symbols[$i],' ',$string);
}
return trim($string);
}
}
:私はそれがないすべての特殊文字を取り除くで、このクラスを介してデータを渡す、と私は検索に含めたくない特定の単語のリストをきれいにするには
an implementation of the porter stemmer algorithmを使用して単語を分岐させます。
検索する際に、検索語を絞り込み、データベース内のクリーン/ステミングされた単語のリストと比較する必要があります。おそらく、SELECT * FROM search WHERE keyword LIKE '%$stem%'
のような単純なもので十分でしょう。
これは、たとえば「大胆」を検索した場合は「dar」になり、「あえて」と「あえて」と同じ結果が得られることを意味します。
は=もそれにすべてのことを説明するが、あなたが始めるためにうまくいけばthatsの十分な情報ではないかもしれません)
をよく読んで、MySQLを想定すると
は、PHPの文字列で同様のデータについては、この探索している、または中データベース?前者の場合、levenshtein() - http://uk.php.net/manual/en/function.levenshtein.php - またはmetaphone() - http://uk.php.net/manual/ja/を使用することを検討してください。 function.metaphone.php - functions –
データベースにあります。ありがとうございます。 – cabita