【发布时间】:2012-07-18 09:35:50
【问题描述】:
假设我们有一个类似的数据库:
Actions_tbl:
-------------------------------------------------- ------ 编号 |动作名称 |用户ID| -------------------------------------------------- ------ 1 |约翰读一本书 | 1 2 |阅读约翰的书| 高分辨率照片| CLIPARTO 1 3 |乔跳过火| 2 4 |读另一本书| 2 5 |约翰在图书馆看书 | 1 6 |乔读了一本书 | 2 7 |读一本书| 3 8 |无缘无故跳是罗纳德的习惯| 3Users_tbl:
---------------------- 用户 ID |用户名 | ---------------------- 1 |约翰 2 |乔 3 |罗纳德 4 |阿拉兹 ----------------------想知道我是否可以选择重复次数最多的类似操作,而不管它的用户是谁,并将我自己的 user_name 替换为其当前用户!
读一本书,读一本书,再读一本书,在图书馆读一本书,读一本书和读一本书是最常见的单词,所以与读书相关的工作人员重复了6次,我的系统应该随机显示这六个句子之一,并将 Araz 替换为 user_name
赞:阿拉兹看书
我的想法是
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()
但是这个根本没有性能!
假设我想为一个大数据库和几个不同的表做同样的事情。 这会破坏我的服务器!!!
还有更好的想法吗?
在http://www.artfulsoftware.com/infotree/queries.php#552 levenshtein() 函数是作为 MySQL 函数实现的,但首先,你认为它有足够的性能吗?然后,如何在我的情况下使用它? 也许一个自加入面包车解决了这个问题,但我对 sql 不是很好!
* 相似动作,是有超过 X% 常用词的动作
**更多信息和说明:**
我仅限于 PHP 和 MySQL。
这只是一个例子,在我的实际项目中,动作是长段落。这就是为什么性能是一个问题。真实场景是:用户为多个项目输入了其项目的描述,这些数据可能过于相似(用户将有相同的工作领域),我想自动填写(基于之前的填写)下一个项目的描述,以节省时间。
如果您能提供任何实用解决方案,我将不胜感激。我查了 NLP 相关的解决方案,虽然很有趣,但我觉得很多都不是很准确,可以用 PHP 实现。
输出应该像所有其他项目一样有意义并且是适当的段落。这就是为什么我想从以前的选择中选择。
感谢您的智慧回答,如果您能对情况有所了解,我们将不胜感激
【问题讨论】:
-
检查 mysql 中的
soundex函数。这可以帮助你 imo。 -
-
@Pushpesh ,我不知道如何实现它,以检查我的表的所有行
标签: php mysql sql levenshtein-distance