【问题标题】:Matching similar strings in MySQL / PHP在 MySQL / PHP 中匹配相似的字符串
【发布时间】:2021-08-19 19:31:01
【问题描述】:

我正在开发一个允许用户创建媒体列表的系统。我正在尝试匹配名称并对重复项进行分组,但保留用户的原始名称。我的问题是如何准确匹配相似的名称。例如,如果我有:

“哈利波特与魔法石” 《点金石——哈利波特》 《哈利波特——贤者之石》

如何在 MySQL 数据库中匹配这 3 个?是否有任何查询可以用来执行此操作,或者可能需要结合其他技术来执行此操作?

【问题讨论】:

  • 这是一个有趣的问题......但想象一下结果会是什么:1)“哈利波特”,2)“哈利哲学家之石”,3)“哈利波特与石头”, 4) “迈克尔杰克逊和魔法石”,5) “波特魔法石和哈利哲学家” - 这些选项中的哪一个与“哈利波特和魔法石”匹配?
  • 您想自动比较还是手动创建不同命名选项之间的链接?
  • 我希望自动创建链接,但我知道可能需要一些手动确认,尤其是在“迈克尔杰克逊和哲学家之石”以及任何可能类似但不是相同的。我只需要找到一种方法来抓住大多数人,并可能提示用户确认。
  • 这被称为“模糊匹配”,是文本分析领域的一个重要话题。有许多不同的算法,具有不同程度的复杂性和不同的优点/缺点。一些更简单的(例如levenshtein distance)可以在mysql中实现,但更复杂的需要适当的编程语言。这些算法中的大多数是在 python 或 R 中实现的,而不是在 php 中实现的。您需要研究算法并选择最适合您的业务案例的算法。

标签: php mysql string string-matching


【解决方案1】:

首先,您需要定义如何理解 2 个字符串是否“相似”。 “相似度”的衡量标准是什么?

当你在思考这个问题时,我记得 PHP 中有一个内置函数:similar_text。以下是示例:click

代码:

$str = [
    "Harry Potter and the philosophers stone",
    "The philosophers stone - Harry Potter",
    "Harry Potter - the philosophers stone"
];

for ($i = 0; $i < count($str); $i++) {
    echo "[" . $i . "] " . $str[$i] . "\n";
}
for ($i = 0; $i < count($str); $i++) {
    for ($j = $i + 1; $j < count($str); $j++) {
        $value = similar_text($str[$i], $str[$j], $p);
        echo "[" . $i . "] VS [" . $j . "] = " . $value . " (" . $p . " %)\n";
    }
}

给我们这个结果:

[0] Harry Potter and the philosophers stone
[1] The philosophers stone - Harry Potter
[2] Harry Potter - the philosophers stone
[0] VS [1] = 21 (55.263157894737 %)
[0] VS [2] = 36 (94.736842105263 %)
[1] VS [2] = 21 (56.756756756757 %)

您可以看到“哈利波特与魔法石”和“哈利波特 - 魔法石”相似度高达 94%。

我只能推荐你阅读这本 PHP 手册:click 以及下面的所有 cmets。

附: PHP 中还有另外两个函数:levenshteinsoundex。您可以自己检查它们。 manual page 也提到了它们。

【讨论】:

    【解决方案2】:

    您的数据库中可能有三个不同的字段,每个字段的字符串名称如上,但给它们一个唯一的标识符作为数字。

    【讨论】:

    • 不确定我是否理解。这些只是示例,可以输入更多应该链接到同一事物的示例。我链接它们没有问题,这是关于首先匹配它们以创建链接。
    猜你喜欢
    • 2020-11-14
    • 2021-07-26
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多