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了,哥们'); }) }