【问题标题】:Creating a similarity matrix based on data stored in a table in mysql根据存储在mysql表中的数据创建相似度矩阵
【发布时间】:2014-07-30 03:45:38
【问题描述】:

我在mysql中有下表:

Page; keywordId  
page1; 1  
page1; 3  
page1; 4  
page2; 4  
page3; 1  
page3; 3  
page3; 4  
page3; 5 

我想创建一个相似度矩阵,其中包含基于每个页面的关键字的值,如下所示。页面之间共享的关键字越多,矩阵中的数字就越高。

      page1   page2   page3  
page1   -       1       3  
page2   1       -       1  
page3   3       1       -  

在寻找答案时,我发现这个entry on stackoverflow 处理几乎相同的问题。但是,代码非常密集,我无法重现它以解决我的问题。

任何帮助将不胜感激。

【问题讨论】:

  • 你只有三页,还是数量可变?
  • 感谢您的快速回复。我现在有大约 300 页,但将来会改变。所以,我猜这个数字是可变的。
  • 那么你真的很想像我的回答那样得到成对的结果。

标签: mysql sql matrix similarity


【解决方案1】:

您想要的“类似 SQL”的解决方案将查看对,并为每对设置一个单独的行:

select ft1.page as page1, ft2.page as page2, count(*) as similarity
from followingtable ft1 join
     followingtable ft2
     on ft1.keywordid = ft2.keywordid and ft1.page <> ft2.page
group by ft1.page, ft2.page;

如果您知道确切的页面,则将其转置并不难。在 SQL 中将其旋转到可变数量的页面是很棘手的,并且需要使用准备好的语句。

【讨论】:

  • 我不确定我是否理解正确,但代码看起来好像我必须为每个组合创建一对。那么对于 300 页来说,就是 9000 对?
  • 如果不仅有 300 页,还有 ~40,000 页,怎么样?因为我正在处理如此大的相似性矩阵。你有什么想法?如果我使用“对每个组合”的方法,搜索真的很慢。
  • @joko 。 . .如果搜索太慢,您可能只需要索引。
  • @GordonLinoff:谢谢,成功了。有时解决起来很容易:)
猜你喜欢
  • 2022-01-12
  • 2011-05-09
  • 1970-01-01
  • 2021-01-09
  • 2017-06-13
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
相关资源
最近更新 更多