2

ですから、単純な文の配列があるとします。ユーザー入力に基づいて検索し、最も近いものを返す最良の方法は何でしょうか?

レーベンシュタイン関数は有望に思えますが、私はそれらを使いたいとは思いません。ユーザー入力は のように単純かもしれませんhighest mountain。その場合、配列内で を含む文を検索したいと思いますhighest mountainhighestその正確なフレーズが存在しない場合は、 ANDを含むが、連続していない文などを検索したいと思いmountainます。レーベンシュタイン関数は文字単位で機能しますが、本当に必要なのは単語単位です。

highest mountainsもちろん、文にフレーズ(S に注意してください) などを含む可能性も考慮したいので、ある程度、レーベンシュタイン関数は依然として有用である可能性があります。

何を指示してるんですか?すでに存在するこれを行う PHP 用のシステムはありますか? レーベンシュタイン関数だけで適切な解決策になるでしょうか? 私が知らない単語ベースのレーベンシュタイン関数はありますか?

ありがとう!

編集- MySQL 全文検索の両方を検討し、A) 入力と B) 各文の両方を単語の個別の配列に分割する可能性も検討し、レーベンシュタイン関数を使用して単語のバリエーションを考慮して比較しました。(色、色、色など)しかし、この方法は賢いかもしれませんが、計算量が多いのではないかと心配しています。

4

3 に答える 3

1

私はあなたのためにコードを書くのが好きではないので、通常はあなたが最初に何を試したかを尋ねます。しかし、私は現在何かに行き詰まっているので、これを書くために休憩を取った:

$results=array();
foreach($array as $sentence){
    if(stripos($sentence,$searchterm)!==false)
        $results[]=$sentence;
}
if(count($results)==0){
    $wordlist=explode(" ",$searchterm);
    foreach($wordlist as $word){
        foreach($array as $sentence){
            if(stripos($sentence,$word)!==false)
                $results[]=$sentence;
        }
    }
}
print_r($results);

これは、文の配列から用語を正確に検索します。「microsift」と入力し、文に「Microsoft」という単語が含まれている場合、結果は見つかりません。大文字と小文字が区別されないため、より適切に機能するはずです。完全な用語を使用して結果が見つからない場合は、分割され、単語ごとに検索されます。これが少なくとも出発点を示してくれることを願っています。

于 2012-08-02T17:36:57.757 に答える
0

これを確認してください:http://framework.zend.com/manual/en/zend.search.lucene.overview.html

Zend_Search_Lucene は HTML 解析機能を提供します。ドキュメントは、HTML ファイルまたは文字列から直接作成できます。

$doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
$index->addDocument($doc);
于 2012-08-02T17:46:04.060 に答える
0

これを行うための PHP の組み込み関数はありません。これは、検索の関連性、関連用語、反復検索、および検索で人間の論理を模倣する必要があるより多くの複雑な操作が求められているためです。PHP ベースの検索クラスを探すこともできますが、私が知っているのは配列検索クラスではなくデータベース検索エンジンです。自分で作るのは非常に複雑です。

于 2012-08-02T17:36:51.193 に答える