2

私は大規模な文章のデータベースを持っていますが、「私はいいです」のような文章が「私はいいです」と一致しない、またはその逆、または「それは私のものですか?」という問題があります。「is that mine」と一致しない、またはその逆で、それらを一致として検出したい場合。

私は複雑で面倒な関数を作成して、ワイルドカードを使用してこれを実行しようとしましたが、それはただの混乱です。そして、この1文字リーの方法で検索する方法があるに違いないと確信しています。私の例のように、主な問題の原因は疑問符と半引用符です。(? ')。

現在、php と mysql で平面選択クエリを使用して、一致するクエリを実行しています。

これを理解するための助けが欲しいので、現在一貫性のない仕事をしているコードの大きな混乱を片付けることができます。

一致をチェックするコードクエリを誰かが見たい場合は、次のようになります。

$checkqwry = "select * from `eng-jap` where (eng = '$eng' or english = '$oldeng' or english = '$oldeng2') and (jap = '$jap' or japanese = '$oldjap' or japanese = '$oldjap2');";

クエリの目的は、DB に $eng と $jap を含む翻訳が既に存在するかどうかを確認することです。$oldeng $oldeng2 や $oldeng3 などが表示される理由は、私が言ったとおりです。$oldeng 変数のいくつかには疑問符や半引用符などがあり、他の変数にはありません。疑問符などを追加して削除する上記のコードがあります。はい、大混乱です。

4

4 に答える 4

1

文字列を比較する前に、英数字以外の文字を単に取り除く方がおそらく良いでしょう。

于 2012-10-29T00:15:48.623 に答える
1

上記のように String Metric アルゴリズムを使用したい場合、PHP にはこの関数がhttp://php.net/manual/en/function.levenshtein.phphttp://www.php.net/manual/に組み込まれています。 en/function.similar-text.php .

MySQL はこれ (特定のアルゴリズム) をネイティブに実装していませんが、同じことを達成するためにストアド プロシージャを作成した人もいます: http://www.artfulsoftware.com/infotree/queries.php#552

私の意見では、任意の変更を処理できる文字列メトリックを使用することは、句読点を削除するよりも優れており、省略や転置なども検出できます...

于 2012-10-29T00:43:01.030 に答える
0

SQL の replace 関数を使用して、"'" を "" および "?" に置き換えることができます。と ""。

于 2012-10-29T00:16:44.473 に答える
0

MySQLでの自然言語の全文検索を確認することをお勧めします。eng 列に FULLTEXT インデックスを追加します。

 ALTER TABLE `eng-jap` ADD FULLTEXT INDEX `full` (`eng`) ;

次に、一致関数を使用します。

 select * from `eng-jap` where match(eng)  against ('Im happy');

これはI'm happyIm happyの両方を返します

次のような関連性スコアを選択した場合:

  select id, match(eng)  against ('Im happy') from `eng-jap` where match(eng)  against ('Im happy');

これを使用して、PHP とフィルターで一致をさらに処理できます。

[編集]:昨日と昨日の関連性スコアを確認しましたか? も同じです:

 select *, match(eng)  against ('yesterday') as mc from `eng-jap`

結果は次のとおりです。

  6, yesterday?, 0.9058732390403748
  7, yesterday, 0.9058732390403748

注: フルテキスト インデックスを適用するには、mysql エンジンが MyISAM である必要があります。また、文は 3 文字以上である必要があります。インデックスは「はい」などの単語と一致しないようです。

于 2012-10-29T00:43:32.687 に答える