Python 维基化中的计算关键词

Python 维基化中的计算关键词,python,neo4j,wikipedia,Python,Neo4j,Wikipedia,我试图实现一个系统,将维基百科映射成一个图,其中节点是文章标题,链接和边是它们之间的关系 这一过程被称为维基化,并且已经得到了验证 到目前为止,我的做法如下: 将所有节点作为主题/类别/pageform/surfaceform映射到Neo4j数据库中 将关系分配为链接/重定向/is-a-category 现在,我需要计算每个链接的关键词。关键词定义为: k(n) = no. of articles term appeared as alink/ no. of articles ter

我试图实现一个系统,将维基百科映射成一个图,其中节点是文章标题,链接和边是它们之间的关系

这一过程被称为维基化,并且已经得到了验证

到目前为止,我的做法如下:

  • 将所有节点作为主题/类别/pageform/surfaceform映射到Neo4j数据库中
  • 将关系分配为链接/重定向/is-a-category
现在,我需要计算每个链接的关键词。关键词定义为:

    k(n) = no. of articles term appeared as alink/ no. of articles term appeared in
我想就如何存储我的链接提出一些建议,这样我就可以以最小的时间复杂度计算关键词

现在,对于我的图中的每个节点,我必须解析400万篇文章来计算它


注意:wikipedia中的表面表单是重定向到另一个页面的页面。

我建议您使用wikipedia。从该数据库中,您可以轻松找到包含短语作为链接的文章的数量


对于需要在Wikipedia中查找不同频率和记录短语频率的部分,可以使用API对Wikipedia进行索引,然后Lucene为您提供了大量函数来获取不同频率。

几年前我确实做过类似的事情。 不过,我对关键词的计算有点简化:

k(n)=作为链接出现的次数/出现的次数总数

但是该值对于提取关键词非常有用。 我所做的是首先迭代转储中的所有文章,解析它们并收集所谓的锚定索引,其中包含wikipedia中所有链接的所有锚定文本,并为每个锚定术语增加一个计数器(您也可以为每个页面增加一次,以获得您的值)。然后,我将该索引存储为内存中的排序字符串[]数组,并再次迭代所有文章,并在锚定索引中查找文章文本中的所有9-gram,如果存在,我会增加该术语的“总计”计数器(您可以只为每篇文章增加一次)

我用java和simple for数组上的循环实现了这一点,这是可行的(在一台拥有16gb ram和AMD phenom ii x4 955.处理器的机器上,计算时间不到2天)


这是2011年的英文维基百科,它提取了92893007个链接,从而形成了13585647个术语的术语词典,映射到3428014篇文章/概念。如果您想使用,我仍然保留着数据。

为了快速执行此操作,您需要将术语作为单个节点,链接到表示文章的其他节点。这要求您对所有文章的所有内容进行文本处理。维基百科是巨大的。每篇文章中的术语数量可能很大。在尝试此操作之前,您应该仔细考虑,或者在一个小子集上执行此操作。这样的图形结构应该允许您编写查询来计算k(n)<代码>(t:Term)-[:in]->(a:Article)-[:in]->(c:Category)在术语节点上假设一个“link”布尔属性,指示它是否是链接的一部分。