0

所以,我有 PHP+MySQL。我正在浏览该title列以查找最相似的字符串。

如何在数据库中找到最相似的字符串并按相似度排序?

4

4 回答 4

2

您可以使用 PHP 函数levenshtein来获取字符串之间的Levenshtein 距离

Levenshtein 距离是衡量字符串差异程度(反之亦然,相似程度)的量度。假设你有 3 个字符串:

  • 见现场跑
  • 观看现场跑
  • 你好,我的名字是约翰

使用 Levenshtein 距离,我们得到结果:

See spot run - See spot run: 0
See spot run - Watch spot run: 5
See spot run - Hello my name is John: 17

Watch spot run - See spot run: 5
Watch spot run - Watch spot run: 0
Watch spot run - Hello my name is John: 18

Hello my name is John - See spot run: 17
Hello my name is John - Watch spot run: 18
Hello my name is John - Hello my name is John: 0

如您所见,更相似的字符串具有更低的 Levenshtein 距离。这种解决方案并不总是实用的,因为您必须在要比较的每个字符串之间存储结果。因此,如果您已经有 1000 条记录,则在创建新记录时,您必须将新字符串的结果与其他字符串进行比较。然后,您可以在 SQL 查询中使用这些分数。

这对你来说可能不是最好的解决方案,但由于没有人提到它,我想我会的。

您还可以查看其他一些有趣的 PHP 函数来了解字符串相似性:

  • similar_text — 计算两个字符串之间的相似度
  • soundex — 计算字符串的 soundex 键
于 2013-01-26T23:54:44.220 回答
0

您应该使用 SELECT LIKE 查询,这里有一些文档。

于 2013-01-26T23:15:04.673 回答
0

最简单的方法是在 SQL 查询中使用 LIKE:

WHERE column_name LIKE '%string%'

您可以将空格替换为“%”以使其更有效。我不会把它称为正确的方式,但考虑到你的问题应该足够好。

于 2013-01-26T23:16:00.863 回答
0

我不确定您真正想要做什么,但我认为您正在寻找在标题列中找到最相似文本的查询。

如果是真的,它可以帮助:

SQL

SELECT * FROM yourTable where table LIKE '%searchedText%'

在这种情况下%,意味着您找到包含您的searchedText

于 2013-01-26T23:17:00.190 回答