最近为ruby,ruby on rails的灵活和魔幻而着迷。爽。 上上周一个同事给我们介绍了自然语言处理的一些知识,觉得很不错。事实上虽然是雅虎公司的一名工程师,但是因为我不是搜索/邮箱/平台研发这些部门,基本上没有接触到比较深一点的东西,也许对于这些部门来说很简单的东西,对于我来说还是很难以理解的。 课后自己去找了些东西看了看,然后有这样一思路,可以用来构造一个垃圾站。 基本思路是: 1.首先我需要一个spider.这个spider由两个部分完成,第一部分是由一个feed管理程序来不停地从网上读rss回来,第二部分是常规spider,跟nutch什么的spider无异. 2.第二部分是预处理。这一部分包括:纯文本化、去垃圾。 3.第三部分是运算:分词,关键词提取,提取相关文章。 4.热点呈现,网站部分。 具体实现: rss 的spider要简单一些,但是根据抓回来的内容,也是很多质量不高的种子。比如新浪新闻的rss基本没有正文,而有些feedsky的种子后面跟着一个小尾巴(广告),需要处理。 对于没有正文的,很简单,将之平均长度算出来,如果某个种子的平均长度都很短,就将这个种子丢弃。 对于很多内容不咱的,但是广告链接一大堆的,也有办法:先纯文本化,一个文档就细化为一系列的段。html标签有的去掉了,有的换成空格了.这时将段按空格分组,如果没组长度都很短,即文章内容中若是大量充满着html标签,这样的多半是广告或是垃圾链接。 比如这一段: 2006-09-11 charon 写道 我现在对这类动态语言的非本质实现抱很大的怀疑态度。 最近除了这个新闻以外,IronPyton(python的.net版本)1.0也发布了。但看了一下,感觉虽然不是特别差,也是差得可以。也许这是给那些熟悉.net同时又想找一个动态语言的人一个选择? 两个语法相同但是标准库有差异(jruby可能语法上也略有差异),支持库有重大差异的语言,还能算是一个语言吗? 当年不论出于什么原因,Sun对于MS污染java的行为举起了大棒,现在这几个开源社区的动态语言,却纷纷搞出这么些方言来,不好说阿。 IronPython和JRuby可能还是不太一样的。dotnet平台实际上提供了自己统一的dotnet fraemwork类库,所谓不同的编程语言支持,更像是一种语法糖衣而已。但是JRuby其实实现了大部分ruby自己的库,用JRuby并非仅仅用一个ruby语法而已,关键是ruby本身的方便的库和rails框架,至于Java库的支持,只是辅助了。 Sun对JRuby的支持表明了一种态度,这种态度是承认ruby在企业快速开发方面的优势,而对ruby提供更好的支持。而Microsoft支持的IronPython更像是用python语法写C#程序那种感觉,换汤不换药。 charon robbin 浏览: 1653543 次 性别: 来自: 上海 详细资料 搜索本博客 博客分类 全部博客 (119) 杂感 (38) Java (27) Ruby (31) System (5) JavaEye (19) 我的相册 游乌镇 共 33 张 其他分类 我的收藏 (19) 我的论坛帖子 (4506) 我的精华良好贴 (97) 最近加入圈子 JavaEye沙龙 广州JavaEyer饭局群 Ubuntu For Fun JavaEye水源 英语学习 链接 javaeye 存档 2008-04 (2) 2008-03 (6) 2008-01 (7) 更多存档… 最新评论 Warp framework - 一个相 … 当然新的东西是可以尝试的,我 … 吧? – by dhxyu 总结一下大家对JavaEye网 … 支持`~~ – by hgz123 关于JavaEye网站未来发展 … javaeye前途无量! 今天认真看了这篇文章, – by ahkai SAAS(软件即服务) 离我们 … 呵呵,在中国,我不看好这种模式,对个人也许有用,但在企业领域,恐怕很难推广。如楼 … – by zlxym 以无法为有法,以无限为有 … 呵呵,楼主还是单纯技术人员的创办思路。缺少营销、商业气味!这道也不是什么坏事,但 … – by cljhyjs 评论排行榜 Warp framework - 一个相当有前途的Java轻 … 《太阳照常升起》观后感 关于JavaEye网站未来发展的思考 从分布式系统的角度看REST Java已经过时了吗? [什么是RSS?] 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。 © 2003-2008 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ] 这上面有的地方有很多空格,这一段就要去掉。当然可以再对段做分析,将一段中空格多的地方去掉。 好了经过整理,现在得到了质量稍好一点的文本了。我们进行分析分词。分词,我是在一个叫hightman的开发者的作品的基础上包装了一个ruby库,原文地址是http://www.hightman.cn/bbs/viewthread.php?tid=321.Ruby是一门很好的胶水语言,但是性能较差,因此对性能要求高的部分我选择用c封装ruby模块。 分好词了,我们再抽出一些实词,比如名词(联想集团),动词(上市,IPO,收购),其实主要思路是跟IT、商业有关的(q我们事先整理一张表,将这些词放进来),将无意义的词(很好,缓慢,深深地…)去掉,对频度,权值排个序,取出前20个, 记为主题词。 现在这个也做好了以后我们将文本、主题词入库。再对每一篇文本计算相似文章。这个,我开始是打算就将关键词和文章都存入数据库,然后按照文章之间主题词的重合度来算,但是后来发现文章数越多这个计算就越复杂,并且运算量随文章数的增长而增长,而且增长更快(指数的而不是线性的增长). 后来想了个办法,我正好也需要一个全文索引,于是利用这个全文检索来完成。全文检索当然不是自己做,现成的有不少系统。用一篇文章的关键词去搜索,搜索结果中的文章就是这篇文章的相似文章。 至于热点事件挖掘,现在还不知道如何去实现一个demo.可能首先要依赖分词引擎的新词发现比较准确吧。 搞定以后,有一个问题,我的抓取和分析模块都在我的台式机上完成,但是我需要把数据传输到远程主机上。这点到后面也就用了不到100行代码搞定了(我自己手工写的代码,在40行以内!).因为,一个rails2.0的组件叫activerecord,还有一个叫activeResource,而rails的scaffold可以帮我生成rest协议的相关代码。需要我手工写的代码是: for item in @items post=Post2s.new post.title=item.title post.md5=item.md5 post.body=item.description post.rss_pub_date=item.pubDate post.service_id=”blog” …. post.save end 简单明了,谁都看得懂.这是一段运行在我的台式机上的代码,但是他保存的时候,却与远程的主机交互将数据保存在了服务器上,走的是HTTP通道,数据交换格式是HTML/XML. Ruby 果然很适合用来替代很多难度不大但是需要大段废话的场合。 下一篇就写如何搞中文分词的ruby包装。