小编典典

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

sql

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

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


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


阅读 264

收藏
2021-04-28

共1个答案

小编典典

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

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

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

2021-04-28