项目需求:
我们采集来的文章没有关键词,在发布的时候无法设定标签,我们通过代码自动提取出文章的关键词,达到对数据加工的目的。
测试环境:
Anaconda Python3.5
Win7 ultmate(英文版)
Excel 2013英文版本
用一百篇文章来测试。
一、使用snownlp(https://github.com/isnowfy/snownlp)
代码如下:
import xlrd
from snownlp import SnowNLP
data = xlrd.open_workbook("article.xlsx")
table = data.sheets()[0]
nrows = table.nrows #行数
ncols = table.ncols #列数
for i in range(0,nrows):
rowValues= table.row_values(i) #某一行数据
for item in rowValues:
# print(item)
s = SnowNLP(item)
print(s.keywords(3))
执行结果:
['不', '棋子', '梦']
['姑娘', '说', '达']
['很', '不', '会']
['很', '不', '会']
['很', '不', '会']
['生日', '快乐', '走']
['不', '发现', '一个']
['爱', '不', '笨']
['事', '每次', '都']
['...', '天气', '):']
['不', '最', '人']
['会', '特', '还']
['吵', '不', '背']
['吵', '不', '背']
['不', '.', '进来']
['男孩', '1', '信']
['不', '上', '生活']
['英语', '说', '坐']
['不', '去', '没']
['不', '朋友', '已']
['幸福', '掉', '最']
['不', '想', '陪']
['没', '说', '真']
['哥哥', '很', '妈妈']
['会', '不', '很']
['不', '很', '都']
['不', '好', '都']
['很', '不', '却']
['不', '确实', '去']
['不', '都', '很']
['不', '说', '一个']
['家庭', '不', '生活']
['不', '会', '想']
['哭', '永远', '好']
['不', '会', '一个']
['不', '人', '爱']
['现实', '相处', '游戏']
['告诉', '不', '都']
['很', '一个', '说']
['告诉', '小', '幸福']
['很', '公', '带']
['不', '帮', '哥哥']
['不', '难', '爱']
['不', '分手', '后']
['不', '都', '没']
['玩', '不', '记得']
['去', '事情', '更']
['会', '不', '很']
['很', '竟然', '不']
['说', '上', '信息']
['不', '家里', '说']
['不', '都', '再']
['不', '工作', '感觉']
['不', '工作', '感觉']
['会', '次', '好']
['公主', '王子', '一个']
['感谢', '人生', '年']
['感谢', '人生', '年']
['好', '……', '嗎']
['一个', '好', '很']
['人', '死', '女人']
['人', '不', '朋友']
['想', '都', '不']
['不', '想', '分开']
['真的', '爱', '很']
['旳', '尓', '不']
['说', '座', '不']
['说', '不', '朋友']
['最', '年', '疼爱']
['记得', 'cc', '别怪']
['不', '很', '想']
['不', '妈', '回']
['不', '人', '都']
['不', '寒', '会']
['不', '想', '出轨']
['很', 'A', '好']
['还', '都', '理由']
['想', '偷偷', '还']
['很', '哥哥', '大']
['不', '人', '公']
['不', '子', '会']
['朋友', '很', '去']
['年', '不', '责怪']
['不', '聊', '还']
['学校', '正好', '都']
['会', '不', '好']
['说', '很', '不']
['不', '会', '没']
['人', '不', '生活']
['不', '我怕', '依然']
['不', '我怕', '依然']
['玩', '不', '55555555555555555
['姑娘', '不', '却']
['种', '一个', '想法']
['朋友', 'Y', '..']
['会', '永远', '不']
['说', '真的', '很']
['不', '还', '真']
['吃', '去', '人']
['不', '谈', '发现']
可以看到,这个出现了很多的单个词,效果并不是很好。
二、使用jieba
利用pip安装jieba,可能网速的问题,没有安装上,后来使用本地安装的方法,终于装上了。
代码如下:
# -*- coding: utf-8 -*-
import xlrd
from jieba import analyse
data = xlrd.open_workbook("article.xlsx")
table = data.sheets()[0]
nrows = table.nrows #行数
ncols = table.ncols #列数
for i in range(0,nrows):
rowValues= table.row_values(i) #某一行数据
for item in rowValues:
# print(item)
tfidf = analyse.extract_tags
keywords = tfidf(item)
#for keyword in keywords:
print (keywords[:3])
执行结果:
['亲情', '棋子', '快乐']
['爱过', '姑娘', '他会']
['但会', '喜欢', '我们']
['但会', '喜欢', '我们']
['但会', '喜欢', '我们']
['生日快乐', '生日', '以为']
['其它', '她们', '我动']
['mdash', '多么', '牵起']
['每次', '女朋友', '似乎']
['...', '那个', '天气']
['最深', '依赖', '看清']
['走进', '一起', '还会']
['爱情', '因为', '争吵']
['爱情', '因为', '争吵']
['围城', '那么', '冲满']
['男孩', '异地', '......']
['可是', '可以', '因为']
['英语', '作业', '初二']
['因为', '可是', '扣扣']
['朋友', '珍惜', '放手']
['删掉', '幸福', '想要']
['一直', '这样', '不去']
['喜欢', '没说', '嘻嘻']
['哥哥', '妈妈', '越来越']
['可以', '默默', '真的']
['男朋友', '上班', '光棍节']
['有没有', '认真听讲', '__']
['狠狠', '抱住', '伤害']
['自己', '爸妈', '确实']
['我们', '这样', '可以']
['亲爱', '放弃', '早就']
['真的', '从小', '路上']
['等待', '见到', '然不']
['你们', '永远', '我视']
['内个', '表达', '六班']
['喜欢', '爱情', '一帆风顺']
['杨棋文', '放不下', '现实']
['媳妇', '起码', '告诉']
['胖胖的', '害怕', '放学']
['为什么', '灰灰', '卡是']
['结婚', '母亲', '老公']
['为什么', '晴子', '暗恋']
['那么', '想见', '放手']
['男生', '分手', '知道']
['无缘', '发现', '或许']
['一起', '记得', '喜欢']
['学会', '真的', '事情']
['不会', '但是', '确说']
['竟然', '出轨', '真的']
['信息', '宝宝', '手机']
['打工', '你家', '不了']
['心死', '野合', '健健康康']
['自己', '感觉', '工作']
['自己', '感觉', '工作']
['真的', '打扰', '见面']
['公主', '王子', '分手']
['感谢', '2011', '感言']
['感谢', '2011', '感言']
['覺得', '身邊', '離開']
['偷偷地', '三班', '表白']
['出轨', '昨晚', '名字']
['一個', '還是', '結果']
['很想', '自己', '想要']
['为什么', '不是', '分开']
['真的', '徐靖', '我爱你']
['认识', '因为', '宝贝']
['我爱你', '为何', '坦白说']
['成绩', '开心', '朋友']
['疼爱', '两年', '相爱']
['记得', '别怪', '扣扣']
['其实', '某人', '呵呵']
['爸妈', '玩电脑', '干活']
['出轨', '放不下', '老公']
['好久不见', '带著', '需说']
['出轨', '老公', '可是']
['同桌', '我们', '有时候']
['出轨', '分居', '不知悔改']
['偷偷', '见到', '几面']
['哥哥', '见到', '那年']
['侮辱', '出轨', '那种']
['喜欢', '豆子', '炒豆']
['篮球队', '朋友', '说实']
['16', '责怪', '一点多']
['是不是', '联系', '心里']
['学校', '正好', '我们']
['再也不会', '知道', '委屈']
['很烦', '分手', '一起']
['我错', '不想', '分手']
['有的是', '生活', '潇洒风流']
['我怕', '真的', '对方']
['我怕', '真的', '对方']
['陪我玩', '玩电脑', '...........
['姑娘', 'qq', '哥哥']
['默默', '一切', '说出']
['..', '朋友', '一天']
['喜欢', '永远', '白杰']
['说真的', '真的', '知道']
['阿亲', '事来', 'fuck']
['毛坤', '沙县', '九点']
['自己', '因为', '家人']
可见,jieba完胜了snownlp。
另外,jieba提取关键词有两种不同的算法,TF-IDF和TextRank,因为我不要求高精度,没有再测试了,有兴趣的朋友可以自己测试。基于TextRank算法的代码如下:
from jieba import analyse
# 引入TextRank关键词抽取接口
textrank = analyse.textrank
# 原始文本
text = "线程是程序执行时的最小单位,它是进程的一个执行流,\
是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,\
线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。\
线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。\
同样多线程也可以实现并发操作,每个请求分配一个线程来处理。"
print "\nkeywords by textrank:"
# 基于TextRank算法进行关键词抽取
keywords = textrank(text)
# 输出抽取出的关键词
for keyword in keywords:
print keyword + "/",
原载:蜗牛博客
网址:http://www.snailtoday.com
尊重版权,转载时务必以链接形式注明作者和原始出处及本声明。