网络坛搜索引擎的设计

点赞:5282 浏览:19629 近期更新时间:2024-03-31 作者:网友分享原创网站原创

摘 要 :网络论坛作为一种信息交流的平台蕴含着大量由用户发表的主题信息,目前互联网上出现了越来越多的具有较高信息聚合度的网络论坛,它们分散在互联网的各个角落,形成了新的“信息孤岛”.用户往往需要访问多个网络论坛来获取这些分散的信息.因此,有必要整合这些“信息孤岛”中的信息,为用户提供一个统一的访问接口来获取网络论坛中的信息.该文首先通过设计一种多个论坛爬虫程序来获取多个网络论坛中的帖子,并将这些不同格式的帖子转换成统一格式的XML文件,最后使用Lucene构建了面向多个论坛的搜索引擎,从而满足了用户对多论坛信息获取的需求.

关 键 词 :网络论坛;搜索引擎;设计

中图分类号:TP315文献标识码:A文章编号:1009-3044(2012)08-1968-05

1网络论坛分析

为了整合多个论坛中的信息就需要对多个论坛的信息进行分析并抽象出共同的特征.目前,绝大数论坛都是由板块和帖子构成,即若干主题相关的帖子聚合形成板块,若干板块聚合构成论坛.每个论坛中的帖子地址和板块地址都具有相同的URL地址格式.帖子的URL地址显示了该帖子的内容;而板块的URL地址显示的是帖子标题列表,由于一个板块具有多个帖子,所以往往要划分为多个页面来显示,所以这里的板块URL地址是第一页,通过翻页地址可以链接到该板块的下一页.以“采购经理人论坛”网站为例,帖子的URL地址格式如下:l

以下是“采购经理人论坛”中某个帖子的保存路径,从保存路径中可以分析出该帖子属于10号板块,于2011年12月2日被保存.

bbs.省略.\board10\board10_20111202\article120.

2.5提取内容

提取程序的功能是将帖子的保存形式从格式转化为xml格式.不同论坛中的帖子格式不尽相同,但是都包括如下信息:帖子的标题、帖子的地址、帖子的发表时间、帖子的内容、帖子所属的论坛.帖子在保存为文件后将被提取程序转换为xml文件,xml文件的结构如下所示.

网络坛搜索引擎的设计参考属性评定
有关论文范文主题研究: 关于论坛的文章 大学生适用: 函授毕业论文、学位论文
相关参考文献下载数量: 75 写作解决问题: 写作技巧
毕业论文开题报告: 文献综述、论文小结 职称论文适用: 期刊发表、中级职称
所属大学生专业类别: 写作技巧 论文题目推荐度: 经典题目

什么样的人可以做采购呢?

采购经理人论坛

l\board10\board10_20111202\article120.xml

可以看出xml文件的存储也采用了论坛域名、板块编号、处理日期目录结构.

提取程序首先从数据库中读取所有visitedFlag等于1的记录并将这些记录都封装成ArticleBean实体类,再根据ArticleBean中的boardId字段、seDate字段构成帖子的文件存储路径和xml文件存储路径,最后从文件中提取相关信息到xml文件中.

检测文件的页面编码是提取程序的关键点.检测页面编码的程序采用三种中文编码:“gbk”、“gb2312”、“utf8”分别来解析页面,如果某种编码解析出的节点全部有效,则该编码就是页面编码;如果这种策略失败,则采用utf8编码去解析页面,并查找页面中是否存在charset属性,并提取出charset属性的值作为当前页面编码.由于同一论坛的所有帖子的页面编码都相同,为了避免每次提取内容时都检测页面编码,应该将首次检测出的页面编码保存到SiteInfo数据表中,具体的计算流程见图3所示.

图3检测页面的编码

检测出页面编码后就可以借助HtmlParser2.0来解析出帖子的有效内容、发表时间等信息.帖子的有效内容都包含在一个具有 id属性的标签中,以“采购经理人论坛”为例,帖子的有效内容包含在id值为postmessage_[d]+的元素中.预先将内容标识contentFlag存放在SiteInfo数据表中,在读取论坛基本信息的时候该contentFlag被封装到SiteBean实体类中.提取有效内容的具体过程如图4所示.在提取过程中将发现的有效内容放入到StringBuffer缓冲区中,最后采用Dom4J开源包将StringBuffer的内容写入到xml文件中.

图4提取帖子内容

3搜索引擎设计

前面的爬虫程序从多个网络论坛中将所有板块的帖子下载到本地文件系统,并转化为统一的xml文件.为论坛搜索引擎的开发提供了数据源.这里的搜索引擎设计分为两大步骤,即索引文件的制作和搜索功能的开发.

3.1索引文件

爬虫程序生成的xml文件不能直接提供给搜索引擎使用,必须采用“倒排文档”技术生成索引文件.Lucene是一款开源的搜索引擎开发框架,它提供了制作索引的API接口.由于Lucene自带的分词包对中文的支持效果不是很好,本文采用了开源的paoding分词器,先将paoding分词器封装成符合Lucene要求的分词器,然后再使用这种分词器创建Lucene索引.在建立索引之前,设置索引的合并因子为50,设置文档在内存中的数目为100,这可以提高建立索引的效率.具体代码如下:


Analyzer analyzer 等于 new PaodingAnalyzer(),

indexer 等于 new IndexWriter(indexPath, analyzer,true),

indexer.setMergeFactor(50),//设置索引的合并因子

indexer.setMaxBufferedDocs(100),//设置文档在内存中的数目

考虑到论坛中的帖子是海量数据,在读取xml文件时如果直接采用递归的方法遍历文件目录,容易产生栈内存溢出,因此本文根据ArticleInfo数据表中保存的boardId字段、seDate字段生成该记录所对应的xml文件存储路径,根据路径直接读取xml文件,避免了栈内存溢出,也提高了处理速度.索引字段的设置情况如下:

帖子地址字段(articleUrl):存储到索引文档中,但不参与到索引,

new Field("articleUrl", articleUrl,Field.Store.YES, Field.Index.NO)

帖子标题字段(articleTitle):存储到索引文档中,对标题进行分词,参与索引;

new Field("articleTitle", articleTitle,Field.Store.YES, Field.Index.TOKENIZED)

所属论坛名称(SiteName):存储到索引文档中,但不参与索引;

new Field("siteName", siteName,Field.Store.YES, Field.Index.NO)

发表时间(PosteDate):存储到索引文档中,但不参与索引;

new Field("postDate", postDate,Field.Store.YES, Field.Index.NO),

帖子内容(ArticleContent):压缩存储到索引文档中,对内容进行分词并参与索引

newField("articleContent",articleContent,Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS)

该文对多个论坛分别建立索引文件并将索引文件保存到以“论坛域名.index”的形式命名的文件目录中.以“采购经理人论坛”为例,其对应的索引文件保存在名称为“bbs.省略.index”的系统目录中.搜索程序将读取所有以“.index”结尾的文件目录,并采用多线程技术同时对多个论坛的索引文件进行搜索.

3.2搜索功能

搜索程序为用户同时搜索多个论坛提供访问接口.本文采用了Ja Web技术,以多个论坛的索引文件作为数据源,提供Web形式的搜索界面.SearchPageServlet接收用户输入的查询关 键 词 ,采用paoding分词器对查询关 键 词 进行解析,将解析的结果交给Search类,Search类是搜索功能的核心类,采用了Lucene的ParallelMultiSearcher类对多个论坛的索引文件进行搜索,并将搜索的结果以高亮显示的方式提交给SearchPageServlet,SearchPageServlet再转发给前端的jsp页面进行显示.系统运行的效果见图5所示.

图5搜索功能效果图

4结束语

该文分析了互联网中多个论坛所形成的“信息孤岛”问题,提出了对多个论坛进行信息聚合的必要性,同时设计了基于多个论坛的搜索引擎框架.尤其是对面向多个论坛进行信息获取的爬虫程序进行了深入的分析.

论坛搜索引擎的设计综合运用了Lucene、HtmlParse、HttpClient、Dom4J等开源技术,对论坛数据的存储管理采用了数据库系统和文件系统相结合的方式,即:在数据库中存放帖子的处理状态、处理日期、所属论坛和板块等信息,实际的帖子数据则存放在文件系统中.帖子在文件系统中的存放路径可以通过数据库中的相关字段来生成.经过测试本系统能够有效的对多个论坛信息提供搜索,实现信息的聚合.