基于Nodejs的TF-IDF自动提取摘要,关键字插件 for Hexo
基于Nodejs的TF-IDF自动提取摘要,关键字插件 for Hexo
最近看了 阮一峰 关于 TF-IDF与余弦相似性的应用 的一系列文章, 深受启发。
于时心血来潮,写个插件练习下。
插件安装方法
npm install git://github.com/vfasky/hexo-summarizer.git
编辑配置文件 _config.yml
plugins:
- hexo-summarizer
在模板的适当处加入
<%- auto_keyword_desc(page.content) %>
当然,你要适当的改下模板的逻辑,如:
<% if (page.description){ %>
<meta name="description" content="<%= page.description %>">
<% } else if (page.content){ %>
<%- auto_keyword_desc(page.content) %>
<% } else if (config.description){ %>
<meta name="description" content="<%= config.description %>">
<% } %>
提取效果
示例文章
用机器代替人工做文章摘要,国内创业公司推出类Summly产品“自动摘要”
提取的值:
[ '其网站上现有三个示例,新闻说明文议论文各一篇,从示例的效果来看,个人觉得虽不如人工摘要来的紧凑和传情达意,但基本上也能从摘出来的内容了解到文章的大意',
'有创业者在试图减轻人们信息筛选之苦,我们之前介绍过两款机器代替人工做文章摘要的产品,一是Summy,该产品出自一个 16 岁的少年之手,Nick DAosio 为自己的自动新闻摘要应用Summy拿到100万美元融资,后传 Yahoo CEO Marissa Mayer 也有意收购 Summy暂无更新的消息',
'我同事体验后发现,这两款产品想法和愿景很好,但是实际使用效果并不如人意:Summy 基本就是截取个开头,而一些文章的核心内容并没放在开头;而针对一些比较偏重事实的文章,确实读 Cipped 提出的三点摘要就能大概了解文章内容了,而一些偏重观点性的文章,Cipped 还是提的不是很好' ]
demo
3 回复
为了实现基于Node.js的TF-IDF自动提取摘要和关键字的功能,并将其集成到Hexo博客系统中,我们可以编写一个Hexo插件。以下是一个简单的实现方案和步骤。
步骤1: 安装插件
首先需要通过npm安装插件:
npm install git://github.com/vfasky/hexo-summarizer.git --save
步骤2: 编辑配置文件 _config.yml
在 _config.yml
文件中添加插件配置:
plugins:
- hexo-summarizer
步骤3: 使用插件
在你的EJS模板文件中调用插件函数,以自动生成摘要和关键字。例如,在合适的位置插入:
<%- auto_keyword_desc(page.content) %>
示例代码:auto_keyword_desc
函数实现
这是一个简化版的 auto_keyword_desc
函数实现,它会根据页面内容生成摘要和关键字:
const tfidf = require('tfidf');
function auto_keyword_desc(content) {
const words = content.split(/\s+/);
const wordCount = {};
// 统计词频
words.forEach(word => {
if (word in wordCount) {
wordCount[word]++;
} else {
wordCount[word] = 1;
}
});
// 计算TF-IDF
const tfIdf = new tfidf();
tfIdf.add({
body: words
});
const keywords = tfIdf.top(5); // 获取前5个关键词
return {
summary: generateSummary(words), // 生成摘要
keywords: keywords
};
}
function generateSummary(words) {
let summary = '';
for (let i = 0; i < Math.min(words.length, 10); i++) { // 截取前10个词作为摘要
summary += words[i] + ' ';
}
return summary.trim();
}
解释
- TF-IDF计算:通过
tfidf
库计算每个单词的重要性。 - 摘要生成:简单地从原文中截取前10个词作为摘要。
- 模板使用:在模板中调用上述函数,将结果插入到HTML中。
这样,你就可以使用这个插件来自动生成每篇文章的关键字和摘要,从而提升用户体验。