<p> </p> <h3>1、研究背景及思路</h3> <p><b>研究目的:</b>经过提取URL的特征信息对网页做出准确的分类。</p> <p><b>研究现状:</b>传统对网页分类的方法主要基于两类特征。第一类是页面特征;第二类是邻居特征,页面特征里面又包括正文、锚文本、标题等等;可是这却忽略了一个重要信息,页面自身的连接信息,互联网上任何一个页面都是有一个惟一的标识,那就是它的连接。并且传统分类方法分类速度慢、须要下载所有网页、有些分类信息隐藏在图片中等。经过搜索论文发现传统上基于URL特征网站分类方法,但愿经过一个统一的方法解决互联网上网站全部网址的分类问题,而且也提出了不少有效的方法,可是都没有一种方法准确率会特别高。</p> <p><b>本文方法特色:</b>基于URL对网页分类的优点不少。URL容易被人所记忆,良好的网站设计技术和编码经过有用的词汇将网页的信息大量的说明,主题隐含在URL中也是常常可见。一个URL的时序依赖性、大小写、特征长度、以及URI组件特征,对网页分类都是有用的。本文提出一种基于需求的URL辅助法,该方法不企图一次性解决互联网全部分类的问题,经过严格的限制从而提升分类的精度。</p> <p><b>本文方法缺点:</b>严重依赖需求,严重依赖网站设计。</p> <p><b>特征提取具体实施步骤:</b></p> <p>第一步:肯定客户需求,明确客户须要检测的网站。</p> <p>第二步:肯定各个网站的导航网址,判断网站是否适合经过URL来进行分类。</p> <p>第三步:指定网址地图分类块抽取规则,提取各个分类对应的网址。</p> <p>第四步:保存分类信息。</p> <p><b>连接分类具体实施步骤:</b></p> <p>第一步:判断连接是不是在需求范围内,若是是执行第二步,若是不是执行第三步。</p> <p>第二步:判断连接属于哪一个分类,层层判断,一直到没法判断那一层中止。</p> <p>第三步:提示连接不在需求范围内,提取关键词,根据关键词匹配算法,为此连接分配一个类,若是一个关键词都没能匹配,随机分配一个类,而且提示错误信息。</p> <p><b>但愿取得的成果:</b></p> <p>经过这种半自动化的方式,最终可以对需求范围内的网页完成比较高的主题分类。</p> <h3>2、具体实现</h3> <p><u>实现工程命名为:urlparser</u> 。</p> <p>2.1工程简介</p> <p>说明:<u>urlparser</u> 目的是经过整合全部需求网址网站导航的分类信息。</p> <p>例如新浪网:http://www.sina.com.cn/ 它的导航页是:http://news.sina.com.cn/guide/</p> <p>提取导航页全部分类锚文本以及连接,做为样本数据,下面会提到具体的样本规则化的过程。</p> <p>这样对于新的,经过计算距离哪一个样本最近来肯定它的分类。</p> <p>本工程全部的包以 eshore.cn.it做为前缀,表明广州亿迅IT部门。主要分为四块:</p> <p>data 用于处理数据,包括数据读写过滤。</p> <p>DataFilter.java 根据resource目录中的filterwords.txt过滤数据</p> <p>DataLoader.java 加载数据,包括初始网站数据,提取以后的样本数据加载</p> <p>DataWriter.java 数据持久化,包括提取到的样本保存到data目录下的keywords.txt</p> <p>KeyWord.java 样本数据对应类</p> <p>SiteMap.java 网站对应类(包括网站主页网址,网站导航网址,网页分类块选择字符串)</p> <p>main 程序入口</p> <p>ParseStart.java 对于新的网站,提取样本数据</p> <p>parser 关键逻辑代码</p> <p>LabelRecognizer.java 连接类别识别类</p> <p>UrlParser.java 样本数据提取类</p> <h4>2.2 工程使用</h4> <h5>2.2.1 添加样本数据:</h5> <p>在sitemaps.txt中按照以下格式添加网站:</p> <p>```</p> <p>id,网站中文名,主页网址,导航页网址,分类块选择</p> <p>1,新浪网,http://www.sina.com.cn/,http://news.sina.com.cn/guide/,div#tab01 div.clearfix</p> <p>```</p> <p>必须保留第一行,每一列经过逗号隔开,每一列的意义如第一行所示。其中分类块选择字符串请查考<u>Jsoup</u> select 使用,具体网址以下:</p> <p>http://jsoup.org/</p> <p>主程序入口:eshore.cn.it.main.ParseStart.java</p> <p>程序会自动保存样本数据到data目录下的keywords.txt,具体格式以下:</p> <p>```</p> <p>id,<u>pid</u>,<u>url</u>,host,keywords,label</p> <p>1,-1,http://www.sina.com.cn/,www.sina.com.cn,,新浪网</p> <p>2,1,http://news.sina.com.cn/,news.sina.com.cn,,新闻</p> <p>3,2,http://news.sina.com.cn/china/,news.sina.com.cn,china,国内</p> <p>```</p> <p>第一列为行惟一标识号,第二列为父ID,当父ID不存在时就用-1表示。</p> <h5>2.2.2 自动新连接分类</h5> <p>主程序入口:eshore.cn.it.main.AutoRecognize.java</p> <p>修改String <u>url</u> 参数值,容许本程序便可获得分类。</p> <h4>2.3 核心思想</h4> <h5>2.3.1 样本关键词如何提取?</h5> <p>主要是经过路径分解锚连接,获得一系列关键词,好比:</p> <p>http://news.sina.com.cn/china/ 那么关键词就是<u>china</u></p> <p>具体算法代码请看:UrlParser.java 中的 parseTextKeyWords方法。</p> <h5>2.3.2 新数据距离如何计算?</h5> <p>主要参考论文:基于URL特征的网页分类研究_李玄</p> <p>具体算法代码请看:LabelRecognizer.java distance 函数。</p> <p>修改距离算法,能够有效提升匹配精确度和效率。</p> <h3>3、测试结果</h3> <p>此次测试总共提取了155条新浪网不一样连接的网址,下面是测试结果。</p> <p>共耗时:499 ms</p> <p>This test task number is: 155</p> <p>The self label is correct answer number is: 96</p> <p>The father label is correct answer number is: 122</p> <p>The ratio of self correct is: 61.935486%</p> <p>The ratio of father correct is: 78.70968%</p> <p>出错的缘由有如下几点:</p> <p>一、 人工录入类别与网站有差别;</p> <p>二、网站自己分类有交叉,因此类别没有彻底匹配,并不表明分类错误;</p> <p>三、程序距离计算还能够提高,不过提高的空间应该不大,不然站外匹配精度必然更低,即泛华能力更差;</p> <p>四、还须要收集站外网址测试。</p>java