在這個(gè)信息爆炸的時(shí)代,每天都會(huì)產(chǎn)生大量的信息。那如何快速的知道,某個(gè)行業(yè)今天大概發(fā)生了什么,以及找到自己感興趣的呢?
實(shí)現(xiàn)思路
- 獲得一天的行業(yè)信息。
- 提取信息的關(guān)鍵字。關(guān)鍵字能大體信息的主要內(nèi)容。
- 列出關(guān)鍵字,將信息按關(guān)鍵字進(jìn)行分類??搓P(guān)鍵字能大概知道某個(gè)行業(yè)發(fā)生了什么,可以看感興趣的關(guān)鍵字分類下的內(nèi)容。
以前端為例,我的做法是,
- 抓取 掘金網(wǎng) 最新的50條前端的數(shù)據(jù)。這邊只是示例,如果要獲得更多的信息可以從多個(gè)源抓更多條的數(shù)據(jù)。
- 從每條信息的標(biāo)題中提取關(guān)鍵字。也可以從正文去提取。
- 列出關(guān)鍵字,將信息按關(guān)鍵字進(jìn)行分類。
程序具體實(shí)現(xiàn)
我是用 Node.js 來實(shí)現(xiàn)的。具體如下:
1 抓取數(shù)據(jù)
通過在掘金網(wǎng)上的操作,配合瀏覽器的開發(fā)者工具,可以知道,通過的接口(接口地址: https://timeline-merger-ms.juejin.im/v1/get_entry_by_timeline?src=web&limit=50&type=post&category=5562b415e4b00c57d9b94ac8),可以拿到最近的50條前端數(shù)據(jù)。 程序如下
var request = require('request')
var url = `https://timeline-merger-ms.juejin.im/v1/get_entry_by_timeline?src=web&limit=${LIMIT}&type=post&category=5562b415e4b00c57d9b94ac8`
const LIMIT = 50 // 50篇文章
request({
url,
}, (error, response, body) => {
if (!error && response.statusCode == 200) {
var list = JSON.parse(body).d.entrylist
}
)
上面的 request 發(fā) HTTP 的第三方庫。 list 是拿到的數(shù)據(jù)。
2 提取關(guān)鍵字
提取關(guān)鍵字是用的第三方庫結(jié)巴分詞。
var nodejieba = require("nodejieba")
const KEYWORDS_NUM = 1 // 從每篇文章的標(biāo)題提取關(guān)鍵字?jǐn)?shù)量
nodejieba.extract(標(biāo)題, KEYWORDS_NUM)
為了讓提取關(guān)鍵字的結(jié)果更準(zhǔn)確,要設(shè)置專用詞庫和停用詞庫。
- 專用詞指,一些不應(yīng)該被拆開的詞或解析語義時(shí)優(yōu)先級(jí)比較高的詞,如
微信小程序,會(huì)被拆成微信和小程序兩個(gè)詞。 - 停用詞指沒有意義的一些詞。如 助詞:的,地,得;標(biāo)點(diǎn)之類的。
下面是我設(shè)置的專用詞庫(還不完善,要加更多條目)。
微信小程序
小程序
Node.js
拿到了關(guān)鍵字,如果關(guān)鍵字拼寫有問題要改正。關(guān)鍵字 js,javascript 的正確拼寫是 JavaScript。我列了些
// 不規(guī)則的拼寫標(biāo)準(zhǔn)化
var standardWords = {
'html': 'HTML',
'Html': 'HTML',
'css': 'CSS',
'js': 'JavaScript',
'javascript': 'JavaScript',
'dom': 'DOM',
'Dom': 'DOM',
'SCSS': 'Sass',
'sass': 'Sass',
'angular': 'Angular',
'vue': 'Vue.js',
'vue.js': 'Vue.js',
'webpack': 'Webpack'
}
3 列出關(guān)鍵字,將信息按關(guān)鍵字進(jìn)行分類
這塊主要是數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。我先用下面的結(jié)構(gòu)對(duì)關(guān)鍵字進(jìn)行分類
var resObj = {
'關(guān)鍵字1' : [文章1, 文章2,...]
'關(guān)鍵字2' : [文章1, 文章2,...],
...
}
要輸出的時(shí)候,在遍歷上面的對(duì)象,生成一個(gè)數(shù)組。然后按照關(guān)鍵字下文章的數(shù)量,從多到少排序。數(shù)據(jù)結(jié)構(gòu)如下:
var resArr = [{
keyword: '關(guān)鍵字1',
num: '數(shù)量',
list: [文章1, 文章2,...]
},
...]
最后,遍歷上面的數(shù)組,將內(nèi)容輸出即可。
運(yùn)行結(jié)果見 知行社的前端早讀課 第7期 最后。
完整程序地址: https://github.com/zhiFEclub/front-end-learn/blob/master/zaoduke/spider/main.js