基于VSM模型的文本相似度的比较(5)

2019-03-06 08:27

毕业设计(论文)专用纸

示越相近;相似度越接近0则表示内容越来越不匹配。

3.2.2功能模块介绍

本课题设计的基于WEB的相似网页检测主要是进行一个理论的研究,可以搜索与TXT文件相似的网页内容,每一次检测的对象都是放在同一文件夹下,然后对文档进行相似度的检测。另外,本系统对图片、表格等是不进行识别和检测的。

根据实际的需求,基于WEB的相似网页检测可以分成四个功能模块,如图3-1所示。

分词统计模块调用Baidu基于WEB的相似网页检测 查询模块 下载网页解析模块计算文本相似度模块各模块实现的功能如下: (2)分词统计模块

此模块实现文本分词,并对分词进行统计。选择TXT文件所在的文件夹,读取文件内容存为字符串,利用IK分词器将字符串(也就是文本内容)进行分词,并且统计分词出现的次数,最后计算词频。

(3)调用Baidu查询模块

此模块实现调用Baidu对关键词进行网络查询。其中百度的查询代码是

http://www.http://m.njliaohua.com//baidu?wd=[此处为搜索的词语]&tn=monline_4_dg\抽取搜索的网页中的百度链接所用的方法是使用正则表达式http://www.http://m.njliaohua.com//link\\\\?url=\\\\w+(\\\\S+)?\\\

(4)下载网页进行解析模块

此模块对下载的模块进行解析。下载下来的内容为HTML语言,而我们只需要的是里面的文字内容,标签以及标签中的嵌套都不是我们所需。得到的纯文本内容写入文件。

(5)文本相似度计算模块

此模块实现对向量的计算,得出文本相似度。文件通过上述过程都转换成了计算机可

20

图3-1 系统模块图

毕业设计(论文)专用纸

以计算的向量空间,调用计算向量的函数得到一个介于0~1的结果。通过结果可以判定两个文本的相似程度。

3.3系统性能要求

(1)系统设计的合理性

在设计系统时要考虑实际的系统性能和硬件要求,不能忽视所处环境,也不能一味地追求新的设计方法,要保证系统实现的合理性。

(2)系统的简单易用性

本系统侧重于对相似度检测进行一个理论的研究,所以并不需要过于美观、应用的界面,作为用户最终需要的只是两篇文档的相似度比较结果。因此设计时本着“简单易用”的原则,方便用户操作。

(3)系统的可靠性

要比较的两篇文档,可能是数据量很大的文本,就要考虑到系统运行的效率,采取相应的算法加以优化,尽可能的保证系统高性能有效的运行。

21

毕业设计(论文)专用纸

第四章 系统实现

4.1系统运行环境

1、硬件环境:

处理器:Inter Core 或更高 内存:2GB 2、软件环境:

操作系统:Windows XP或者Windows 7 语言开发工具:Eclipse

4.2 核心相关代码分析 4.2.1分词类的介绍

(1)类org.wltea.analyzer.core.IKSegmenter:

说明:这是IK分词器的核心类。它是独立于Lucene的Java分词器实现。当需要在Lucene以外的环境中单独使用IK中文分词组件时,可以使用IKSegmenter。 public IKSegmenter(Reader input,boolean useSmart) 说明:IK主分词器构造函数

参数1:Reader input,字符输入读取

参数2:boolean useSmart ,是否采用智能切分策略。

true使用智能切分,false使用最细粒度切分。

public IKSegmentation(Reader input ,Configuration cfg) 说明:IK主分词器新构造函数 参数1:Reader input,字符输入读取 参数2:Configuration cfg,分词器配置。

用户可以定制自己的Configuration类,来改变词典配置。

public synchronized Lexeme next()throws IOException

22

毕业设计(论文)专用纸

说明:读取分词器切分出的下一个语义单元,如果返回值为null,表示分词器已经结束。 返回值:Lexeme语义单元对象,即相当于Lucene的词元对象Token

(2)类org.wltea.analyzer.core.Lexeme

说明:这是IK分词器的语义单元对象,相当于Lucene中的Token词元对象。由于IK被设计为独立于Lucene的Java分词器实现,因此它需要Lexeme来代表分词的结果。 public int getBeginPosition()

说明:获取语义单元的起始字符在文本中的位置 返回值:int,语义单元相对于文本的绝对起始位置

public int getEndPosition()

说明:获取语义单元的结束字符的下一个位置

返回值:int ,语义单元相对于文本的绝对终止位置的下一个字符位置

public int getLength()

说明:获取语义单元包含字符串的长度

返回值:int,语义单元长度=getEndPosition–getBeginPosition

public String getLexemeText() 说明:获取语义单元包含字符串内容

返回值:String,语义单元的实际内容,即分词的结果

4.2.2核心代码解析

private static Map segString(String content){ // 分词

Reader input = new StringReader(content); // 智能分词关闭(对分词的精度影响很大)

IKSegmenter iks = new IKSegmenter(input,true); Lexeme lexeme = null;

Map words = new HashMap(); try {

while ((lexeme = iks.next()) != null) {

if (words.containsKey(lexeme.getLexemeText())) {

23

毕业设计(论文)专用纸

words.put(lexeme.getLexemeText(),words.get(lexeme.getLexemeText()) + 1); } else {

words.put(lexeme.getLexemeText(),1); } }

}catch(IOException e) { e.printStackTrace(); }

return words;

}

该函数主要实现分词功能,参数是读取TXT文件后存入变量中的字符串。利用IK分词器循环对字符串进行分词,得到的分词存入到HashMap中。其中HashMap键值对中key指的是分词,value是该分词在字符串中出现的次数。

private static HashMap tf(Map segWordsResult) {

HashMap tf = new HashMap(); if(segWordsResult==null || segWordsResult.size()==0){

}

return tf;

Double size=Double.valueOf(segWordsResult.size()); Set keys=segWordsResult.keySet(); for(String key: keys){

Integer value=segWordsResult.get(key); tf.put(key,Double.valueOf(value)/size); }

return tf; }

该函数实现词频的统计。参数为通过分词函数得到的(分词,出现次数)键值对的HashMap。而词频的计算方式为该词出现次数/总次数,即是Double.valueOf(value)/size。

public static Map> allTf(String dir){

try{

24


基于VSM模型的文本相似度的比较(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:英语基本作业2阅读理解题(已交)2013

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: