2014-11-25 42 views
2

我试图实现一个将维基百科映射到图形中的系统,其中节点是文章标题,链接和边是它们之间的关系。计算Wikification中的关键字性

这个过程被称为wikification,已经是implemented

我的方法到现在一直如下:

  • 地图的所有节点为主题/分类/ pageform/surfaceform到Neo4j的数据库。
  • 分配关系,为链接/重定向/ IS-一类

现在,我需要计算每一个环节的keyphraseness。该keyphraseness被定义为:

k(n) = no. of articles term appeared as alink/ no. of articles term appeared in 

我想对如何存储我的链接,这样我可以计算与最短的时间复杂度keyphraseness一些建议。

现在,对于图中的每个节点,我都必须解析4M条以计算它。

注意:维基百科中的表面形式是一个重定向到另一个页面的页面。

+0

为了快速做到这一点,您需要将单个节点的术语链接到表示文章的其他节点。这就要求你文字处理所有文章的所有内容。维基百科是巨大的。每篇文章中的术语数量可能很大。在你尝试这个之前,你应该仔细考虑,或者在一个小的子集上进行。像这样的图结构应该允许你写一个查询来计算k(n)。 '(t:Term) - [:in] - >(a:Article) - [:in] - >(c:Category)'假设术语节点上有一个“link”布尔属性,表明它是否属于链接与否。 – FrobberOfBits 2014-11-25 14:04:36

回答

0

我建议你使用维基百科mysql database dump。从该数据库中,您可以轻松找到包含短语作为链接的文章的数量。

对于您需要找到短语的不同频率和文档频率在维基百科的部分,你可以使用Lucene API索引Wikipedia和Lucene的,然后给你的功能范围很大,以获得不同的频率。

0

实际上我几年前做过类似的事情。 虽然我计算了keyphraseness稍微简化了一点:

k(n)=没有时间项显示为链接/否。的时间期限总计出现

但是,提取关键字的值非常有用。 我做的是我第一次迭代转储中的所有文章,解析它们并收集一个所谓的锚索引,其中包含维基百科中所有链接的所有锚文本,并为每个锚词增加一个计数器(您也可以只增加一次为每个页面获得你的价值)。然后,我将这个索引作为一个有序的String []数组存储在内存中,并重新遍历所有文章,并从锚索引中的文章文本中查找所有9-gram,如果它存在,则增加此术语的“总计”计数器(你可以为每篇文章增加一次)。

我没有这与Java和简单的for循环阵列上,这是可行的(少于2天计算时间上的机器的RAM 16GB和AMD的Phenom II X4 955处理器。)

这是一个2011年的英语维基百科,它提取了92,893,007个链接,导致术语词库的13,585,647个术语映射到3,428,014个文章/概念。如果你想使用它,我仍然有数据。