工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2994|回复: 3

应用设计一:如何实现文章的自动关联?

[复制链接]
发表于 2006-7-16 01:13 | 显示全部楼层 |阅读模式
一,何谓自动关联?

     如新浪的每一个具体的新闻页面后面总是附带了一个相关文章列表。这样的文章与文章的相关关系叫做关联。如果希望一篇新的文章被添加后,能不经人工干预自动与以前的文章相关联,谓之自动关联。

二,自动关联有什么作用?

     自动关联首先在以文字内容为主的应用中有相当大的用途。文章的关联,从垂直上提供了深入探讨主题的途径,另外从广度上通过关联达到了跨时、域的网状交互。这特别适合以博客、新闻、论坛、文学、论文等为内容的应用。

三,自动关联的人工替代。

     为了实现自动关联的过程,我们首先要了解其人工的过程。
     通常我们接触到一篇文章,讲述了一个主题,例如一篇介绍网络美女“天仙妹妹”的新闻,这使得我这样的工大色狼如痴如狂。但是,该网站提供的内容有限,于是,我打开google,输入关键词“天仙妹妹”,搜索,然后逐个链接去寻找感兴趣的内容。如果找不到几个链接,我会试着把“天仙妹妹”改成“天仙mm”,或者把其真名打进去搜一下。但经过这样的搜索产生的链接有可能找到不是我想要的,如一篇“天仙般的林妹妹”红学论文。

四,所谓关联实质剖析。

     通过人工的过程,我们得出这样的结论:
     1,第一篇文章的主要内容,被我使用“天仙妹妹”“天仙mm”这两个关键词所替代。
     2,通过这些关键词所搜索出来的链接能很好的符合我的需要。

     从上可以看出,我们从   
     文章1    <(注)--关键词组--(注)>     文章组
   
     其中关键词组是作为桥梁架在了文章1合文章组之间作为关联的枢纽。
     
     那么这个关键词组的本质是什么呢?

     看以下的文字,节选自我在php框架《自动标签组件设计文档》:

     主题(也叫中心思想)是文章的核心,是一篇文章最具有概括性的句群。主题在理解以及判断一篇文章是否和某标签有关联的分析中有重要的参考意义。
     主题可以经过技术手段分解成为若干个关键词,这些关键词具有稳定性(即相同的词其意思不轻易改变,个别词如腐败在网络上意思的变化是比较少见的)和类比性(即一个词在这篇文章用于表述这个主题,在另一个类似主题中的表述也非常有可能用到相同的词。如ajax用于表述web2.0概念的主题,其他web2.0概念主题也非常可能使用到ajax表述)。

     结果出来了,关键词组就是对一篇文章主题经过技术手段所确定的编码。

     (注):通过分析我们知道,这通常不是一个对等关联,而是单向关联,如A文章是主要讲天仙妹妹的,B文章主要是讲今天下大雨,文中提到了一个天仙妹妹的字眼。所以B与A有关联,但A与B未必有关联。

五,如何实现自动关联-程序结构以及算法设计。
     
     首先是抽象出文章主题,这一步使用分词算法,简单的来说,使用php框架里面提供的词库操作对象对文章进行分词(前提是准备一个足够大的词库,并且有一个适当的识别新词的算法,这个在以后的文章我会继续探讨并把我自己的心得写下来)。分词的结果是一个二维表(关键词,出现次数)。还要再处理一下,因为标题的权值是比内容要高的,另外,不可能保留所有的关键词。使用下面的逻辑处理产生的”关键词权值对“,看下面的文字节选自我的《自动标签组件设计文档》:

●        文章由标题和内容构成,经过分析后,将产生一组代表此文章主题的关键词,这些关键词相互之间没有大小先后之分。如一篇文章叙述了如何安装apache,所得到的关键词即可由“apache”和“安装”组成。
●        在分析文章的关键词以便最后形成无差别的关键词描述过程中,关键词需要有权值大小之分,最后使用一定的算法除去不太相关的关键词。初步采用78%贡献率算法确定关键词。如一篇文章分析结果是:马加爵25次,公安18次,海南2次,三亚2次,菜市场2次,则根据25/(25+18+2+2+2)=51%,(25+18)/(25+18+2+2+2)=87%,则判定此主题由“马加爵”和“公安”所组成表述。(其实是从所谓的犹太人的78∶22法则引申的,其核心思想是:78%的关键词只产生了22%的贡献,但另22%的关键词便可以产生78%的贡献,因而核心思想是把一篇文章的78%的低贡献度关键词除去,只要另外22%的关键词。)
●        文章的标题所产生的关键词所占的权值以及内容所占的权值算法不同。标题产生的关键词一次,由于概括性较强,其权值应该大于在内容上产生的一次关键词。初步采用标题与内容权值总和相等的原则计算(在分析标题时使用的是和文章内容总值相等的算法,这个是有根据的。一般一篇文章的标题可以说是一针见血的表达了文章的主要内容,就像报纸标题一样,有时我们可以只看标题则可以知到新闻内容,或者通过看文章内容推出标题。所以我设想在计算文章关键词总权值时“标题部分”“内容部分”是相等的,两者加起来构成文章关键词总值,然后按照78%原则计算的话,标题所产生的关键词必定多数或者全部都能保留,然后还有内容中多次重复的词。这应该能够很好的表达主题)。如文章标题产生A和B各一个,而文章内容产生了CDEFG关键词,总次数为N,那么可视A=B=N/2,然后A-G等关键词再经过上面的除去算法确定最后的中心关键词。

然后把生成的关键词记录在表TOPIC_KEYWORDS中,看下面结构:

库表结构
表  TOPIC_KEYWORDS( TOPIC_ID,  KEYWORD_ID ),
表  TOPIC_RELATIONSHIP( TOPIC_ID, RELATIONSHIP_TOPIC_ID )

最后,使用下面的sql可以达到自动关联的目标:

SELECT B.TOPIC_ID,COUNT(A.KEYWORD_ID) AS COUNT FROM (SELECT KEYWORD_ID FROM `TOPIC_KEYWORDS` WHERE `TOPIC_ID` = 新增文章ID) A,TOPIC_KEYWORDS B WHERE A.KEYWORD_ID = B.KEYWORD_ID GROUP BY TOPIC_ID HAVING TOPIC_ID!=新增文章ID AND COUNT >= (SELECT COUNT(*) FROM TOPIC_KEYWORDS WHERE `TOPIC_ID` = 新增文章ID)*调节百分比因子

这个sql的意思是,查询出新增文章的所有关键词集合A,与系统所有的文章的关键词集合B做交集得到C。
这时候交集就是所有在新增文章有,且在别的文章也有出现的主题关键词。然后根据B的TOPIC_ID进行分组操作并对所关联到的关键词次数做计数,这样便得到了一个结果:

TOPIC_ID            COUNT
1                        2
3                       1
4                         2
其含义是各文章出现的用于描述新增文章主题的关键词个数。

如果新增文章抽象出2个关键词用于描述其主题,如“广州歹徒袭警”。获得“广州”和“袭警”两个关键词。如上所示:
文章1的主题出现了2个词,3出现了1个词,4出现了2个词。
因为新文章总共就只有2个词,因而1和4都应该值得我们关注,因为它们都提到了广州和袭警,应该是读者感兴趣的相关文章,但3只有一个关键词,可能是广州,或者是袭警。3算不算是呢?所以这时候,我们引进一个叫做“调节百分比因子”的东西,即关联到的关键词个数和新文章总个数之比要大于百分之几的意思,很好理解。

前面使用了无权值(虽然计算主题关键词时有权值,但根据前面算法最后舍弃了权值)的关键词,如果需要保留权值,这时候可以使用类似的sql,只要把count(关键词)改成sum(权值),使用类似算法即可。

[ 本帖最后由 sasadong 于 2006-7-16 01:49 编辑 ]
发表于 2006-7-16 01:33 | 显示全部楼层
楼主不到三更半夜就没有写东东的激情呀?

呵呵
回复

使用道具 举报

 楼主| 发表于 2006-7-16 01:52 | 显示全部楼层
是啊,白天写代码思维容易被语法被类库被api所束缚,只有在夜晚睡觉前夕洗澡间隙才是最自由活跃的。

再说,你也不比我早嘛。也不知道现在在哪个论坛灌水。
回复

使用道具 举报

发表于 2006-7-16 09:51 | 显示全部楼层
文章的自动关联似乎不难实现,一个对关键字的算法API,一个数据厍表。但是由于没有经验,我只能从表面上理解了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-4-30 19:40

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表