网站分类前导:获取网站标题和描述及对相关信息进行分词处理
前言:
? 之前,筆者做過一些關于網絡爬蟲的東西。而且爬取的效果還可以。不過還有一些爬蟲的博客沒有完成,在后期會將其更新完成。而之前的爬蟲只是對網頁中的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
總結
以上是生活随笔為你收集整理的网站分类前导:获取网站标题和描述及对相关信息进行分词处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络爬虫:URL去重策略之布隆过滤器(B
- 下一篇: 算法:模式匹配之KMP算法