2011-05-15 96 views
5

我想找到一个库或算法(所以我自己编写代码)来识别网页的最近k个邻居,其中网页被定义为一组关键字。我已经完成了我提取关键字的部分。基于关键词的最近邻居算法或库

它不一定非常好,只是够好。

任何人都可以提出解决方案,或从哪里开始。我过去曾浏览过Yury Lifshits的讲座,但我希望尽可能做些现成的东西。

首选Java库。

+0

您是在映射位置吗?或者您是否需要一种仅基于关键字将不同页面关联的算法? – fasseg 2011-05-15 06:03:34

+0

您可以创建网站节点的加权无向图,并且边缘权重代表“接近度”。例如每个关键词有两个共同点,可能会增加其边缘权重。你可以使用java中的很多图库。 – fasseg 2011-05-15 06:07:00

+0

@smegbrains,是的,我认为这就是我所做的。我计算了两个关键字(我认为相当于你所说的'边缘宽度')的交集 – Ankur 2011-05-15 09:12:53

回答

2

正如你所说,你已经有了从页面中提取的关键字。我假设你用文字向量表示每个文档/页面。像一个document term-frequency矩阵。

我猜一个页面的最近邻居理想情况下是一个内容相似的页面。因此,您希望查找每个单词的相对频率与您正在搜索的单词相似的文档。所以首先规范文档项矩阵WRT的每一行;即通过%tage发生来替换发生次数。

接下来,您必须在由这些向量表示的2个文档之间分配一定的距离。您可以使用正常Euclidean distanceManhattan Distance。但是对于文本文档来说,通常效果最好的相似性度量是Cosine Similarity。使用任何距离或相似性函数适合您的问题(请记住最近的邻居,你想尽量减少距离,但最大的相似性)。

一旦你有了矢量和距离函数,运行Nearest neighbourK-Nearest neighbour算法。

+0

谢谢,你说得对,每个页面都有一个向量(为了方便起见,大小为6)的关键字。我会简单地将每对的关键字集合起来,这样就可以对相似性进行简单而又脏的衡量。 – Ankur 2011-05-15 07:42:36

+0

如果这是一项业余爱好/作业,那么这项措施将会很好。但是如果你正在做一些ML工作,你需要使用一些更严格和经过时间考验的方法。 – BiGYaN 2011-05-16 02:25:39