当前位置: 首页 > 面试题库 >

获取MySQL数据库中重复次数最多的相似字段

井轶
2023-03-14
问题内容

假设我们有一个类似的数据库:

Actions_tbl:

--------------------------------------------------------
id | Action_name                              | user_id|
--------------------------------------------------------
1  |  John reads one book                     | 1     
2  |  reading the book by john                | 1
3  |  Joe is jumping over fire                | 2
4  |  reading another book                    | 2
5  |  John reads the book in library          | 1
6  |  Joe read a    book                      | 2
7  |  read a book                             | 3
8  |  jumping with no reason is Ronald's habit| 3 

Users_tbl:

-----------------------
user_id |    user_name |
-----------------------
1       |     John
2       |     Joe
3       |     Ronald
4       |     Araz
-----------------------

想知道是否可以选择重复性最高的类似操作,而不管其用户是什么,然后用其当前用户替换我自己的user_name!

读一本书,读一本书,读另一本书,读图书馆中的书,读一本书和读一本书是最常见的单词,因此与阅读本书有关的工作人员重复了6次,我的系统应该显示随机选择这六个句子之一,并用user_name替换Araz

像:阿拉兹(Araz)读这本书

我的主意是

select replace(a.action_name , b.user_name) from actions_tbl a, user_tble b where a.user_id = b.user_id group_by

然后在php中使用逐一检查相似性

levenshtein()

但这根本没有性能!

假设我想对一个大数据库和几个不同的表执行相同的操作。这将破坏我的服务器!!!

有更好的IDEA吗?

在http://www.artfulsoftware.com/infotree/queries.php#552中,levenshtein()函数被实现为MySQL函数,但是首先,您认为它具有足够的性能吗?然后,如何在我的情况下使用它?也许自连接van可以解决此问题,但是我对sql不太满意!

* 类似动作,是指具有超过X%常用词的动作

_*_*更多信息和注意事项:

  1. 我仅限于PHP和MySQL。

  2. 这只是一个例子,在我的真实项目中,动作很长。这就是为什么性能是问题的原因。真实的情况是:用户输入了几个项目的项目描述,这些数据可能太相似了(用户的工作区域相同),我想自动填充(基于先前的填充)下一个项目的描述,为了省时间。

  3. 如果您有任何 实用的 解决方案,我将不胜感激。我检查了与NLP相关的解决方案,尽管它们很有趣,但是我认为其中许多解决方案都不准确,无法使用PHP来实现。

  4. 与所有其他项目一样,输出应该有意义并且应是适当的段落。这就是为什么我在考虑从以前的选择中进行选择。

感谢您的智力回答,如果您能对情况有所了解,我们将不胜感激


问题答案:

您正在谈论的是文本聚类过程。您正在尝试查找相似的文本,并随意选择其中之一。我不熟悉执行这种形式的文本挖掘的任何数据库。

对于您所描述的,很基本的文本挖掘技术可能会起作用。用除用户名之外的所有单词创建一个术语文档矩阵。然后使用奇异值分解获得最大的奇异值和向量(这是相关矩阵的第一个主成分)。类似的活动应沿着这条线聚集。

如果您的词汇量有限并且在表格中有术语,则可以通过重叠的单词比例来测量两个动作之间的距离。您是否有动作中所有单词的列表?



 类似资料:
  • 我正在寻找创建一个数据库搜索(MySQL),使用PHP来查找电气部件的零件号,但希望搜索也能找到类似的字符 例如,搜索6SE7O90也应搜索6SE7090,搜索4I737A也应搜索4L737A,因为在某些零件标签上打印的0/O和I/L可能看起来相似。 在PHP/MySQL中实现这一点的最佳方法是什么?

  • 我被问到一个面试问题,要求我返回数组中重复次数最多的数字,例如,{1,1,2,3,4}返回1。 我首先在hashtable中提出了一种方法,它要求空间复杂度O(n)。然后我说先对数组排序,然后遍历它,然后我们就可以找到数字了。 有什么优化吗? 谢了。

  • 我正在创建一个Laravel/最新版本的应用程序,它需要创建数百个sql表来服务于此项工作。还有数百个客户机的数据将被多次插入这些表中(每个客户机1000行或某些表中更多)。为了消除混淆,我需要一个通用/通用数据库来提供公共信息,并为每个客户机提供单独的数据库来提供特定信息,并且希望在添加客户机时创建新的数据库。这可以在Laravel(一次处理多个数据库)中实现,还是有其他PHP框架可以更好地实现

  • 问题内容: 例如,假设我有一个可能包含以下值: 现在我想要检索的数量和,我想能够区分什么我有,要么还是因为在现实中,我可以在ArrayList中的任何对象,我必须能够区分它们。 我当时想做的是先将转换为,以保持顺序并删除重复项,这样我就可以了,但是我如何获取每个的数量并将其与适当的元素相关联? 总的来说,我想做的是能够编写一个方法让我输出: 但是不知道和是元素,因为它们可能是其他类似或的东西。 问

  • 我正在尝试使用多个数据库使用laravel: Laravel版本:5.5.28 Php 7.2.0版 数据库驱动程序 定义连接: 定义模型: 定义控制器: 上面的代码工作正常,但如果我更改控制器中连接的名称,它将继续使用.env文件中配置的名称 请问,有人能帮我解决这个问题吗?