gpt4 book ai didi

php - 如何找到 mySQL 行之间的相似性?

转载 作者:IT老高 更新时间:2023-10-28 23:49:10 24 4
gpt4 key购买 nike

我正在尝试创建一个脚本来找到我的表格行之间的匹配百分比。例如,我的 mySQL 数据库中的表 products 包含字段 name(索引,全文),其值如

LG 50PK350 PLASMA TV 50" Plasma TV Full HD 600Hz 
LG TV 50PK350 PLASMA 50"
LG S24AW 24000 BTU
Aircondition LG S24AW 24000 BTU Inverter

如您所见,它们都有一些相同的关键字。但是第一个名字和第二个名字更相似。此外,第 3 和第 4 之间的相似关键字比第 1 和第 2 多。

我的 mySQL 数据库有数千个产品名称。我想要的是找到那些相似度超过一定百分比(比如 60%)的名称。

例如,正如我所说,1st、2nd(和任何其他名称)在它们之间的匹配度超过 60%,将以组样式格式回显,让我知道这些产品是相似的。第 3 和第 4 以及匹配度超过 60% 的任何其他商品将在另一组之后回显,告诉我这些产品匹配。

如果可以的话,把满足所有分组匹配名称的关键词都回显出来就好了。例如,LG S24AW 24000 BTU 是包含在第 3 和第 4 个名称中的关键字。

最后,我将创建所有这些关键字的列表。

我现在有以下查询(正如 Jitamaro 所建议的)

Select t1.name, t2.name From products t1, products t2

在所有其他名称旁边创建一个新的名称字段。对不起,我不知道如何正确解释它,但这就是它的作用:(真正的值(value)是像上面的产品名称)

查询前

-name-
A
B
C
D
E

查询后

-name- -name-
A A
B A
C A
D A
E A
A B
B B
C B
D B
E B
.
.
.

有没有一种方法可以使用 mySQL 或 PHP 找到匹配的名称并提取关键字,如上所述?请分享代码示例。

感谢社区。

最佳答案

使用 LIKE OR REGEXP 查询数据库:

SELECT * FROM product WHERE product_name LIKE '%LG%';
SELECT * FROM product WHERE product_name REGEXP "LG";

循环结果并使用 similar_text():

$a = "LG 50PK350 PLASMA TV 50\" Plasma TV Full HD 600Hz"; // DB value
$b = "LG TV 50PK350 PLASMA 50\"" ; // USER QUERY

$i = similar_text($a, $b, $p);
echo("Matched: $i Percentage: $p%");

//outputs: Matched: 21 Percentage: 58.3333333333%

您的第二个示例匹配 62.0689655172%:

$a = "LG S24AW 24000 BTU"; // DB value
$b = "Aircondition LG S24AW 24000 BTU Inverter" ; // USER QUERY

$i = similar_text($a, $b, $p);
echo("Matched: $i Percentage: $p%");

您可以定义一个高于 40% 的百分比来匹配产品。
请注意 similar_text() 是大小写 SensItivE,因此您应该将字符串小写。

关于php - 如何找到 mySQL 行之间的相似性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com