假设我们有一个类似的数据库:
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%常用词的动作
_*_*更多信息和注意事项:
我仅限于PHP和MySQL。
这只是一个例子,在我的真实项目中,动作很长。这就是为什么性能是问题的原因。真实的情况是:用户输入了几个项目的项目描述,这些数据可能太相似了(用户的工作区域相同),我想自动填充(基于先前的填充)下一个项目的描述,为了省时间。
如果您有任何 实用的 解决方案,我将不胜感激。我检查了与NLP相关的解决方案,尽管它们很有趣,但是我认为其中许多解决方案都不准确,无法使用PHP来实现。
与所有其他项目一样,输出应该有意义并且应是适当的段落。这就是为什么我在考虑从以前的选择中进行选择。
感谢您的智力回答,如果您能对情况有所了解,我们将不胜感激
您正在谈论的是文本聚类过程。您正在尝试查找相似的文本,并随意选择其中之一。我不熟悉执行这种形式的文本挖掘的任何数据库。
对于您所描述的,很基本的文本挖掘技术可能会起作用。用除用户名之外的所有单词创建一个术语文档矩阵。然后使用奇异值分解获得最大的奇异值和向量(这是相关矩阵的第一个主成分)。类似的活动应沿着这条线聚集。
如果您的词汇量有限并且在表格中有术语,则可以通过重叠的单词比例来测量两个动作之间的距离。您是否有动作中所有单词的列表?