什么商业模式,用户体验咱不懂,就分析下技术实现
【元搜索】
见以下链接,之前写的
http://www.cnblogs.com/onlytiancai/archive/2007/03/31/694776.html
【相关性分析】
场景1:新版的CSDN论坛发帖子的时候,用户要在论坛问一个问题,刚刚输入完问题标题按,在标题输入框失去焦点或者出发OnChange事件的时候,就会在旁边一个区域显示该问题相关的帖子,你会发现有时候这些相关帖子里有的恰恰就是你要问的问题,你直接去看那个帖子的回复就行了,不用自己发帖子了。这是一个很好的相关性分析的应用场景。
场景2:新版的CSDN博客,在你查看一篇博客的时候都会在最下面显示相关的帖子,可以帮助你延伸阅读,而且相关性很高,一般看一个帖子都会随着相关帖子的指引多看几篇帖子。我感觉那个是通过tag来关联的,就是随机显示几个相同Tag的帖子,实现比较简单。
下面是我的实现分析
1、用户输入帖子标题
2、系统对帖子标题进行分词,包括近义词,同义词转换,去除停止词等操作(可事先建立一套专业词库,比如说公司内部的词库或者.net领域的词库,可考虑用ShootSearch,自己再改改)
3、系统对分词后的词语数组进行优先级排序(可根据一个事先排好序的词库来排序,比如说nhibernate就比java这个词优先级高,因为 nhibernate比较具体,要找出相关的帖子应该优先匹配和nhibernate相关的帖子,而不是和java这个词相关的帖子)
4、系统按优先级依次去索引里去查找该关键字搜索出来的帖子编号(可事先用lucene把所有的帖子建立好索引(索引域有tag,postid,hits,rank就够了,尽量减少索引大小),并用多线程并行搜索以提高搜索速度)
5、系统根据每个帖子的评分和浏览次数对相关帖子编号进行倒序排列
6、系统依次用前5个帖子编号去数据库查帖子的编号并显示给用户。
【热点发现分析】
场景:每天有大量的博客发布新帖子,大家都在发关于哪些信息的帖子呀,好多人关心这个问题,外国一些dig网站都会自动给你找出每天人们关注的关键词或者帖子,不过dig是人工推荐的,还有的自动分析的,咱就讨论下自动分析的。
下面是我的分析
1、用nutch抓网页,把百度空间,博客部落,博客园,博客堂,博客中国,新浪博客等知名中文博客作为信息源
2、给当天抓取的所有网页(标题和内容)进行分词并索引,做分词的时候每出现一个新词放到一个哈希表里,这个词每再出现一次就把它的计数器加一,直到把所有网页索引完。(不过这个哈希表可能会很大,可考虑做一个词库,只往哈希表里添加词库里的词,然后用一些训练算法来维护这个词库,自动给这个词库加入新词。)这样每天最热的词就出来了。
3、做索引的时候只给标题分词,也用一个哈希表算出标题最热的关键词(算法同上)。
4、做索引的时候把每个网页正文的超链接(一个只有链接地址聚合的数组)提取出来,作为一个域索引下来
5、做完索引后,找出前十个标题关键字,分别在索引上检索出每个关键字的网页,
6、然后扫描一遍索引,把第4步索引的链接域和第五步找到的网页进行匹配,如果该网页被其它网页链接一次它的评分就+1(这个算法可能比较浪费时间和空间,如果做抓网页的时候能抓一个网页流浪量的域,也可以作为一个评分的标准)
7、系统显示出前十个标题关键字评分最高的的十个帖子作为今天的热点,并依次把较低评分的网页作为相关网页来供查看。
8、如果发现这10个帖子里有两个帖子相似度较高的(分析网页标题的哈希码可以判断是否相同,但是相似度就不好做了),就去掉一个,把第11个顶上来
遗留问题:抓网页的时候是否考虑去除相似的网页,因为有人发了个帖子,别人都转贴,最后都不知道原作者是谁了。
【自动分类】
场景:在百度问问题的时候,你提出一个问题,会自动把你的帖子推荐到一个合适的分类。或者有的收藏夹系统你收藏一个帖子会自动给你收藏的这个帖子打tag,甚至有些外国的搜索引擎你搜索一个结果,直接就把你的结果做聚类操作了(这里不区分聚类和分类先)。
下面是我的分析
1、事先做一个词库,结果是一个关键字对应多个词,比如说java这个关键字对应spring,ejb,jvm,jms等词。这个词库人工来初始化,以后靠一定的算法来维护。
2、用户发帖子的时候,给帖子标题分词,并在词库里反向查找每个词属于那个关键字,然后显示出这些关键词。
遗留问题:词库用什么数据结构来保存,物理上怎么存放能保证反向查找的性能。
另外问个问题再:谁能给找点关于索引物理结构的资料,比如lucene的索引文件格式分析,以及算法,或者是sqlserver索引的B树结构存储方式和索引查找算法,索引重建的算法等。