1. 處理數據
-
上一步獲取結果中含有
p
標籤,用正則篩選,去掉標籤,只留下文本。var myHtml = document.querySelector('.read-content').innerHTML.replace(/<[^>]+>/g,'')
-
統計詞的個數首先需要文本分詞
-
分詞模塊
segment
(盤古分詞組件),實例化,使用默認的識別模塊及字典,載入字典文件需要1秒,僅初始化時執行一次即可let seg = new Segment(); seg.useDefault();
-
開始分詞。
var arr = seg.doSegment(myHtml);
-
結果其中
w
表示內容,p
表示詞性,詞性收錄[ { w: '這是', p: 0 }, { w: '一個', p: 2097152 }, { w: '基於', p: 262144 }, { w: 'Node.js', p: 8 }, { w: '的', p: 8192 }, { w: '中文', p: 1048576 }, { w: '分詞', p: 4096 }, { w: '模塊', p: 1048576 }, { w: '。', p: 2048 } ]
-
去掉詞性爲
2048
的標點var myarr = []; arr.forEach(data=>{ if(data.p !=2048){ myarr.push(data.w) } });
-
JSON格式統計詞內容
var myJson = {}; myarr.forEach(data=>{ if(!myJson[data]){ myJson[data] = 1; } else{ myJson[data]++; } });
-
去掉其中只出現一次的
let arr2 = []; for(let word in myJson){ if(myJson[word]<=1){ continue; } arr2.push({ w:word, c:myJson[word] }) };
-
結果排序
arr2.sort((json1,json2)=>json2.c-json1.c);
完整代碼
var index = 0; const fs = require('fs'); const url = require('url'); const gbk = require('gbk'); const JSDOM = require('jsdom').JSDOM; const Segment = require('segment'); let seg = new Segment(); seg.useDefault(); GetUrl('https://www.xs8.cn/chapter/7373911103301701/19794192502339694',(data)=>{ let DOM = new JSDOM(data); let document = DOM.window.document; var myHtml = document.querySelector('.read-content').innerHTML.replace(/<[^>]+>/g,'') var arr = seg.doSegment(myHtml); //去掉沒用的 var myarr = []; arr.forEach(data=>{ if(data.p !=2048){ myarr.push(data.w) } }); //計算個數,存爲json格式 var myJson = {}; myarr.forEach(data=>{ if(!myJson[data]){ myJson[data] = 1; } else{ myJson[data]++; } }); //去掉只出現1次的 let arr2 = []; for(let word in myJson){ if(myJson[word]<=1){ continue; } arr2.push({ w:word, c:myJson[word] }) }; arr2.sort((json1,json2)=>json2.c-json1.c); console.log(arr2); }) function GetUrl(sUrl,success){ index++; var urlObj = url.parse(sUrl); var http =''; if(urlObj.protocol == 'http:'){ http = require('http'); } else{ http = require('https'); } let req = http.request({ 'hostname':urlObj.hostname, 'path':urlObj.path },res=>{ if(res.statusCode == 200){ var str = ''; res.on('data',buffer=>{ str +=buffer; }); res.on('end',()=>{ success && success(str); }) } else if(res.statusCode == 302 || res.statusCode == 301){ console.log(`第${index}次重定向`,res.headers.location); GetUrl(res.headers.location,success) } }); req.end(); req.on('error',()=>{ console.log('404了,哥們'); }) }