这是我试图在没有运气的情况下找到我的问题的解决方案后的第一篇文章。
如果您能帮助我,我将不胜感激:)
我正在尝试开发一个解决方案,如果用户在 texbox 中输入他们早餐吃的东西,那么让我们说“带有烤面包和牛奶的橙子”,我的应用程序可以识别食物或识别它们以查看每种食物有多少卡路里下表之一:
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”的新行作为全文中的第一个解决方案,然后我删除了其余的“相同等级”解决方案(我不'没有来自用户的更多信息,所以我只是从不同种类的牛奶中平均卡路里)
但是,这仍然不是很准确,例如,对于橙子或其他人,全文给我一个错误的第一个选项,“橙子蛋糕 - 烤箱”,当我想要匹配更好的“橙子 - 果汁”时(至少它匹配一栏完美)。但是,结果仍然为我提供了相同输入的多个选项,并且进行分数区分还不足以让应用程序“理解”,如果输入一次,它不应该有两个具有相同输入的结果。
以防万一我解释错了,我想要的最终结果是:
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
我不想要代码(如果你有时间,非常欢迎),但我需要为此目的使用的功能,或者任何其他更好的方法来完成所有这些,我会用谷歌搜索来理解。
代码的第二部分是识别食物,即使它们有任何拼写错误,例如 oarnge。我认为这是通过 Levenshtein 距离完成的,不确定我是否可以针对整个需求应用相同的解决方案..
提前致谢!!