これは、私の質問に対する解決策を見つけようとして運が悪かった後の最初の投稿です。
あなたが私を助けることができれば、私は感謝します:)
ユーザーがテキストボックスで朝食に食べたものを入力した場合の解決策を開発しようとしているので、「トーストパンと牛乳を入れたオレンジ」と言うと、アプリは食べ物を認識するか、それらを識別してそれぞれのカロリー数を確認します次の表から 1 つ:
Food - cooked - Calories
Orange cake - oven - 200
Cow Milk - raw - 50
Sheep Milk - raw - 40
Orange - juice - 15
cereal bread - toast - 10
bread - toast - 5
bacon - toast - 10
私が行った解決策は、爆発/内破機能を実行せずに文字列全体を全文検索することです。したがって、私が得た結果は次のとおりです(メモリによるため、正確ではありません):
Fulltext rank - Food - cooked - Cal
10,523634 - bacon - toast - 10
5,2342342 - sheep milk - raw - 40
5,2342342 - cow milk - raw - 50
4,2342345 - cereal bread- toast - 10
3,2342344 - orange cake - oven - 200
2,2342342 - orange - juice - 15
$query="
SELECT Food, cooked,
MATCH ( Food, cooked)
AGAINST ( '$search' ) AS score
FROM food_table
WHERE
MATCH ( Food, cooked)
AGAINST ( '$search' )
ORDER BY Score
DESC LIMIT 50";
いくつかのスコアが羊乳と牛乳で同じであることを発見したので、MySQL に "milk - average" という新しい行を追加して、全文の最初のソリューションにし、残りの "同じランク" のソリューションを削除しました (私はユーザーからこれ以上の情報はないので、さまざまな種類の牛乳の平均カロリーを計算しています)
しかし、それでも、これはあまり正確ではありません。たとえば、オレンジなどでは、「オレンジ - ジュース」だけがより適切に一致するようにしたいときに、「オレンジ ケーキ - オーブン」という間違った最初のオプションがフルテキストで表示されます (少なくとも一致します)。完全に 1 つの列)。それでも、結果は同じ入力に対して複数のオプションを提供しており、スコア弁別を行うだけでは、アプリが一度入力された場合、同じ入力で2つの結果が得られないことを「理解」するのに十分ではありません.
念のため、私が自分自身を間違って説明した場合、私が望む最終的な結果は次のとおりです。
input:
an orange with toast bread and milk
Solution:
orange - juice - 15
bread - toast - 5
milk - average - 45 (this one, as said, is adding a new mysql row with the data)
Total: 65 calories
コードは必要ありませんが (時間がある場合は大歓迎です)、この目的のために使用する必要がある機能、またはこれらすべてを行うための他のより良い方法を理解するためにグーグルで調べます。
コードの 2 番目の部分は、食品にタイプミス (oarge など) がある場合でも食品を識別することです。これは、レーベンシュタイン距離で行われたと思いますが、必要性全体に同じソリューションを適用できるかどうかはわかりません..
前もって感謝します!!