我目前通过将数据桶加载到PHP然后在那里进行所有计算来实现这一点。我希望(并且很可能需要)仅使用MySQL执行所有计算。我知道在MySQL中编写函数和程序是可能的,但我以前从未这样做过,每次我坐下来写这篇文章时,我都会陷入一种自我失望的混乱中。所以....
数据库说明: 让我们从数据库图开始: http://i.imgur.com/Th3NL.jpg
您可以立即忽略users表。我们在这个问题上不会那么烦。
因此,此数据库保存从网页中提取的信息。您可以看到链接表包含URL和标题,以及该文档中任何术语的最大术语频率。
对象表只是允许用户和链接成为occurences表中的外键。顺便说一句,我知道发生事件的错误拼写是偶然发生的! =)
occurences表包含大部分数据。该表具有linkoruser的主外键(尽管只是忽略了用户)。它有word_id引用字典表,tag_id引用标签表,最后得分是该文档中该标签类型的那个单词的出现次数。
标签表有标签ID,标签名称(例如标题或H1)及其重量,通常设置在1到10之间。
字典表具有单词id,实际单词和该单词的逆文档频率。如果您关心IDF是什么,那么它就是网页的数量,除以包含该特定单词的网页数量。
系统功能说明: 给定一个链接ID(我们称之为BaseID),比较所有其他链接的相似性(余弦相似度),并向用户显示所有链接的ID,url和标题,按大多数排序至最不相似。
每个单词的得分是: ((occurences.score * tags.weight)/ links.max_tf)* dictionary.word_idf 即单词在文档中出现的次数乘以该特定单词标签的标签权重,除以该文档的最大术语频率。然后乘以单词的逆文档频率,为您提供该单词的最终得分。
相似性通过余弦相似性完成,最佳显示在下图中。 http://i.imgur.com/n3Bp8.jpg
因此每个页面都与BaseID具有相似性,系统会向用户显示所有页面ID,URL和标题,按相似性排序,从最相似到最不相似。
问题解释: 目前,大量数据被拖出MySQL并移交给PHP,然后进行所有处理。
这是因为我只知道基本MySQL的方法。我知道可以使用函数和程序,但是我变得非常纠结。
我想要的是将BaseID传递给MySQL并返回页面ID,URL和标题,按相似性排序,从大多数到最不相似。
我知道这是一个很大的问题,没有人会因为坐在这里制造解决方案而获得报酬。所以我真的很感激你甚至读过这篇文章了!