1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 网站分类前导:获取网站标题和描述及对相关信息进行分词处理

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

时间:2024-05-18 13:01:37

相关推荐

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

前言:

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

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

关于文章:

本文链接:/lemon_tree12138/article/details/48463215-编程小笙

转载请注明出处

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

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

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

1.标题

2.网页描述

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

public class GetTitleDesc {private void parser() throws IOException {Document doc = Jsoup.connect("/").header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/0101 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.说明:

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

关于分词的代码,主要参考:/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% |

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

相关源码下载:

/detail/u013761665/9107117

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。