0

私は、ユーザーが対応する材料を使用して独自の個人レシピを作成し、それらを(mysqlで)保存できるシステムを開発しています。

問題は、材料が保存されるたびに、材料の名前を比較する材料テーブルに材料がすでに存在するかどうかを確認することです。

レシピから適切にショッピングリストを作成できるようにする必要がある場合は、たとえば次のことを確認したいと思います。

りんご-りんご-新鮮なりんごカントアピア

したがって、最初に「リンゴ」が作成され、「リンゴ」を保存しようとしている場合は、類似したものがすでに存在することを確認したいと思います。

私が説明しようとしているようなアルゴリズムはすでに存在しますか?

あなたがいくつかの入力を持っていることを願っています!

4

3 に答える 3

0

SOUNDEX()単語が十分に類似しており、おそらく十分に単純であると仮定すると、MySQL の機能に多少の運があるかもしれません。

ドキュメントはこちらにあります: https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

基本的には、与えられた単語をそれを表す 4 文字の文字列に減らします。文字列は、ほとんど同じように聞こえる2 つの単語に対して同じである必要があります。

于 2013-02-27T10:35:39.923 に答える
0

soundexまたはLevenshtein distanceを使用することは可能ですが、フレーズ内のキーワードを見つける必要があります。'apple' と 'apples' ではおそらく機能しますが、'dozen of fresh apples' ではおそらく機能しません。

私の経験から、そのアプリケーションでは、より手動のアルゴリズムに勝るものはありません。

  • 材料の基本リストを作成する (「小麦粉」、「りんご」、「ハム」)
  • 新しいレシピを追加するときは、成分リストをリストと照合します。レーベンシュタインまたは正規表現を使用してあいまいになる可能性があります
  • 「オリジナル」と「一致」のリストを含むバックエンド ページを作成し、ワンクリックで間違った一致をマークする可能性があります
  • 悪いヒットを手動で照合するためのシンプルなインターフェースを作成する
于 2013-02-27T10:41:19.183 に答える
0

SOUNDEX()mySql では、関数soundexを使用できます。

PHPで実装したい場合は、levenshteinsimilar_text関数があります

于 2013-02-27T10:41:27.290 に答える