您的位置:首页 > 运维架构 > 网站架构

网站分类前导:获取网站标题和描述及对相关信息进行分词处理

2015-09-15 10:20 881 查看

前言:

  之前,笔者做过一些关于网络爬虫的东西。而且爬取的效果还可以。不过还有一些爬虫的博客没有完成,在后期会将其更新完成。而之前的爬虫只是对网页中的URL进行提取,我想做的效果是能对这些网页进行分类。而分类的前提是我们能够依据一些可信文本,对这些文本进行分词,再通过这些分出来的词再进行分类(如:贝叶斯分类器)。

  而本文就是对网页分类的前导学习——中文分词学习。

关于文章:

  本文链接:http://blog.csdn.net/lemon_tree12138/article/details/48463215 - 编程小笙

 转载请注明出处

获取网站标题和描述文本:

  写过Java网络的人都应该知道这里要如何获得网站的标题和描述情况。

  我们可以打开一个网页,然后在网页上右键查看源码。在源码的上方会有类似这样的一些信息,如下图:

  


  1.标题

  2.网页描述

  通过上面的截图我们可以知道这里两个信息的Tag和attr。具体的Java实现如下:

public class GetTitleDesc {

private void parser() throws IOException {
Document doc = Jsoup.connect("http://mail.163.com/")
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0")
.get();
System.out.println(doc.title());

Elements metaElements = doc.getElementsByAttributeValue("name", "description");
for (Element element : metaElements) {
System.out.println(element.attr("content"));
}
}

public static void main(String[] args) {
GetTitleDesc get = new GetTitleDesc();
try {
get.parser();
} catch (IOException e) {
e.printStackTrace();
}
}
}


对标题和描述进行分词:

1.Lucene分词:

  1.说明:

  对于英文的分词是一个比较方便的操作,因为英文是以空格为分隔符。而在中文中,我们不能单纯地以某一个字来分隔一段字符。这样我们可能会得到一些莫名其妙的结果。

  关于分词的代码,主要参考:http://blog.sina.com.cn/s/blog_b8f01fb90101gxyb.html

  不过还好,我们有lucene这个包。对于中文分词,我们具体需要导入以下工具包:

  


  2.代码实现:

  这里我们就以之前在163邮箱上的描述来作为输入文本:

  网易163免费邮箱--中文邮箱第一品牌。容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务。支持各种客户端软件收发,垃圾邮件拦截率超过98%。

public class TestJeAnalyzer {
private static final String LABEL = "网易163免费邮箱--中文邮箱第一品牌。容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务。支持各种客户端软件收发,垃圾邮件拦截率超过98%。";

public static void testStandard(String testString) throws Exception {
Analyzer analyzer = new StandardAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}

public static void testCJK(String testString) throws Exception {
Analyzer analyzer = new CJKAnalyzer();
Reader r = new StringReader(testString);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}

public static void testChiniese(String testString) throws Exception {
Analyzer analyzer = new ChineseAnalyzer();
Reader r = new StringReader(testString);
TokenFilter tf = (TokenFilter) analyzer.tokenStream("", r);
Token t;
while ((t = tf.next()) != null) {
System.out.println(t.termText());
}
}

public static void testJe(String testString) throws Exception {
Analyzer analyzer = new IK_CAnalyzer();
Reader r = new StringReader(testString);
TokenStream ts = (TokenStream) analyzer.tokenStream("", r);
Token t;
while ((t = ts.next()) != null) {
System.out.println(t.termText());
}
}

public static void main(String[] args) throws Exception {
String testString = LABEL;
System.out.println("原始文本:" + testString);
Utils.sleep(10);

System.err.println("=====standard analyzer====");
System.err.println("分析方法:默认没有词只有字");
testStandard(testString);
Utils.sleep(10);

System.err.println("=====cjk analyzer====");
System.err.println("分析方法:交叉双字分割");
testCJK(testString);
Utils.sleep(10);

System.err.println("=====chinese analyzer====");
System.err.println("分析方法:基本等同StandardAnalyzer");
testChiniese(testString);
Utils.sleep(10);

System.err.println("=====je analyzer====");
System.err.println("分析方法:字典分词,正反双向搜索,具体不明");
testJe(testString);
}
}
 

  3.分词结果(部分):

  


2.MMAnalyzer分词:

  1.代码部分:

public class Segment1 {

public static void main(String[] args) {
String LABEL = "网易163免费邮箱--中文邮箱第一品牌。容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务。支持各种客户端软件收发,垃圾邮件拦截率超过98%。";

MMAnalyzer analyzer = new MMAnalyzer();
try {
System.out.println(analyzer.segment(LABEL, " | "));
} catch (IOException e) {
e.printStackTrace();
}
}
}

  2.效果展示:

网易 | 163 | 免费邮箱 | 中文 | 邮箱 | 第一 | 品牌 | 容量 | 自动 | 翻倍 | 支持 | 50兆 | 附件 | 免费 | 开通 | 手机 | 号码 | 邮箱 | 赠送 | 3g | 超大 | 附件 | 服务 | 支持 | 各种 | 客户端 | 软件 | 收发 | 垃圾邮件 | 拦截 | 率 | 超过 | 98% |

  根据上面两种分词方面,可能你已经感觉到第二会更准确一些。

相关源码下载:

http://download.csdn.net/detail/u013761665/9107117
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息