在数据库PHP/MySQL中找到类似的描述

在数据库PHP/MySQL中找到类似的描述,php,mysql,Php,Mysql,我们正在构建一个帮助台应用程序来运行我们的服务公司,我正试图找出如何帮助呼叫中心人员根据客户的问题描述分配一个类别 我的主要想法是将客户提供的描述与之前的描述进行比较,并根据分配的最常见类别使用之前服务呼叫中使用的类别 有什么办法吗 “我的描述”字段是一个blob字段,因为有些描述相当长。我更愿意找到一种需要最少系统资源的方法来实现这一点 感谢您的任何意见:) 迈克我是一个自定义代码的人;我觉得如果你使用大的、臃肿的系统,这项工作就做得不对,所以如果你不想自己编写代码的话,请对此持保留态度。然而

我们正在构建一个帮助台应用程序来运行我们的服务公司,我正试图找出如何帮助呼叫中心人员根据客户的问题描述分配一个类别

我的主要想法是将客户提供的描述与之前的描述进行比较,并根据分配的最常见类别使用之前服务呼叫中使用的类别

有什么办法吗

“我的描述”字段是一个blob字段,因为有些描述相当长。我更愿意找到一种需要最少系统资源的方法来实现这一点

感谢您的任何意见:)


迈克

我是一个自定义代码的人;我觉得如果你使用大的、臃肿的系统,这项工作就做得不对,所以如果你不想自己编写代码的话,请对此持保留态度。然而,这可能不像你做的那么难;是的,我肯定会使用标签系统。然而,它不必如此复杂

以下是我将如何处理它:

首先,建立一个包含3个表的数据库;一个用于类别、标记和“链接”(类别和标记之间的链接)

然后,创建一个PHP函数来初始化一个数组(空就可以了),如果不存在新的(小写的)单词,则推送它们。这方面的一个例子可能是:

<?php

// Pass the new description to this 
// function.
function getCategory($description)
{
    // Lowercase it all
    $description = strtolower($description);

    // Kill extra whitespace
    $description = trim($description);
    $description = preg_replace('~\s\s+~', ' ', $description);

    // Kill anything that isn't a number or a letter
    // NOTE: This is untested, so just edit this however you'd like to make it work. The
    // idea is to just eliminate everything that isn't a letter or number. Just don't take out
    // spaces; we need them!
    $descripton = trim($description, "!@#$%^&*()_+-=[]{};:'\"\\\n\r|<>?,./");

    // Now the description should just contain words with a single space in between them.
    // Let's break them up.
    $dict = explode(" ", $description);

    // And find the unique ones...
    $dict = array_unique($dict, SORT_STRING);

    // If you wanted to, you could trim either common words you specify,
    // or any words under, say, 4 characters. Up to you!

    return $dict;
}

?>
通过使用MySQL InnoDB关系,links表不会因为创建行而占用更多空间;这是因为它们在某种程度上是链接的,并且都是通过引用存储的。这将大大减少数据库的大小

现在,对于kicker来说,有一个聪明的mysql数据库查询,它遵循以下步骤:

  • 对于每个类别,汇总属于类别和描述字典(我们在前面的PHP函数中创建)的标记
  • 从最大到最小排序
  • 拔出前1或3个或任何你喜欢的建议类别 这将为您提供一个很好的类别列表,其中具有最高匹配标记数。如何创建MySQL查询取决于您自己

    虽然这看起来像是很多设置,但实际上并非如此。您最多有3个表,一个或两个PHP函数和一些MySQL查询。数据库将只与类别、标记和对它们的引用一样大(在links表中;引用不会占用太多空间!)

    要更新数据库,只需将不存在的标记放入标记数据库,并将它们链接到您决定分配给描述的类别。这将扩大数据库的标记范围,并随着时间的推移,使数据库更适合您的描述(即更准确)


    如果你想得到更详细的信息,你可以在分类和标签之间插入重复的链接来创建一种加权标签系统,这将使你的系统更加准确;我觉得如果你使用大的、臃肿的系统,这项工作就做得不对,所以如果你不想自己编写代码的话,请对此持保留态度。然而,这可能不像你做的那么难;是的,我肯定会使用标签系统。然而,它不必如此复杂

    以下是我将如何处理它:

    首先,建立一个包含3个表的数据库;一个用于类别、标记和“链接”(类别和标记之间的链接)

    然后,创建一个PHP函数来初始化一个数组(空就可以了),如果不存在新的(小写的)单词,则推送它们。这方面的一个例子可能是:

    <?php
    
    // Pass the new description to this 
    // function.
    function getCategory($description)
    {
        // Lowercase it all
        $description = strtolower($description);
    
        // Kill extra whitespace
        $description = trim($description);
        $description = preg_replace('~\s\s+~', ' ', $description);
    
        // Kill anything that isn't a number or a letter
        // NOTE: This is untested, so just edit this however you'd like to make it work. The
        // idea is to just eliminate everything that isn't a letter or number. Just don't take out
        // spaces; we need them!
        $descripton = trim($description, "!@#$%^&*()_+-=[]{};:'\"\\\n\r|<>?,./");
    
        // Now the description should just contain words with a single space in between them.
        // Let's break them up.
        $dict = explode(" ", $description);
    
        // And find the unique ones...
        $dict = array_unique($dict, SORT_STRING);
    
        // If you wanted to, you could trim either common words you specify,
        // or any words under, say, 4 characters. Up to you!
    
        return $dict;
    }
    
    ?>
    
    通过使用MySQL InnoDB关系,links表不会因为创建行而占用更多空间;这是因为它们在某种程度上是链接的,并且都是通过引用存储的。这将大大减少数据库的大小

    现在,对于kicker来说,有一个聪明的mysql数据库查询,它遵循以下步骤:

  • 对于每个类别,汇总属于类别和描述字典(我们在前面的PHP函数中创建)的标记
  • 从最大到最小排序
  • 拔出前1或3个或任何你喜欢的建议类别 这将为您提供一个很好的类别列表,其中具有最高匹配标记数。如何创建MySQL查询取决于您自己

    虽然这看起来像是很多设置,但实际上并非如此。您最多有3个表,一个或两个PHP函数和一些MySQL查询。数据库将只与类别、标记和对它们的引用一样大(在links表中;引用不会占用太多空间!)

    要更新数据库,只需将不存在的标记放入标记数据库,并将它们链接到您决定分配给描述的类别。这将扩大数据库的标记范围,并随着时间的推移,使数据库更适合您的描述(即更准确)


    如果你想得到更详细的信息,你可以在类别和标签之间插入重复链接,以创建一种加权标签系统,这将使你的系统更加准确。

    好,所以基本上只需将标签分配给类别,然后将描述中的标签计数与标签的类别计数进行比较。也就是说,如果描述中有标签(吃、肉、毛皮),那么最有可能的是(食物),因为它与这两个词“相关”,但可能与动物有第二次匹配。差不多。这就是我要做的!好的,基本上只需将标记分配给类别,然后将描述中的标记计数与标记的类别计数进行比较。也就是说,如果描述中有标签(吃、肉、毛皮),那么最有可能的是(食物),因为它与这两个词“相关”,但可能与动物有第二次匹配。差不多。这就是我要做的!