赞
踩
原文作者:lucky小东西
原文地址:基于tf-idf的小说主题特征抽取算法
在当前个性化推荐大行其道的时候,那就不得不提用户画像。用户画像的主要工作内容就是将用户标签化,对于我们现有的数据来说,用户本身的固有属性很难获取到,或者说即使获取到了,也是不够准确的。那我们只能从“用户到底看了啥”这个角度,尝试去描述一个用户了。那么,我们想要知道一个用户“看了啥”,那么我们首先需要确定“他看的书到底是啥”。换言之,我们需要知道他读的小说是什么小说,所以,我们先得清楚文章的主题,我们得清楚小说的标签。小说的标签准了,那么通过用户对标签的行为,那么,试想一下,用户的标签还不容易吗?所以,与天猫、京东类似的电商不一样(他们的物品已经高度分类以及标签化,并且用户数据详细而准确),以内容为王的技术社区想要做好用户画像,那么,物品画像的构建是重中之重。而对于物品画像的构建,标签系统又是重中之重。对于标签系统的建立,那么,自然少不了文本主题特征的抽取。
一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行"词频"(Term Frequency,缩写为TF)统计。以我们的小说为例,出现次数最多的词是----"的"、"是"、"在"----这一类最常用的词。它们叫做"停用词"(stop words),这类词对我们无用,需要过滤掉停用词。假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。这样又会遇到了另一个问题,我们可能发现"帅哥"、"美女"这类的词出现的次数也是很高,可是这类词在所有书中都有很高的出现率,所以对我们也并不是十分有用,如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。
用统计学语言表达,就是在词频的基础上,要对每个词分配一个"重要性"权重。最常见的词("的"、"是"、"在")给予最小的权重,较常见的词("帅哥")给予较小的权重,较少见的词("魔幻"、"盛唐")给予较大的权重。这个权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比。知道了"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。
第一步,计算词频。
第二步,计算逆文档频率。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。
第三步,计算TF-IDF。
可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
算法核心代码如下所示:
- # -*- coding: UTF-8 -*-
- from jieba import analyse
- # 引入TF-IDF关键词抽取接口
- tfidf = analyse.extract_tags
-
- # 原始文本
- text = "杨幂、赵又廷主演古装玄幻大剧原著小说,三生三世,她和他,是否注定背负一段纠缠的姻缘?三生三世,她和他,是否终能互许一个生生世世的承诺?" \
- "那一世,大荒之中一处荒山,成就她与他的初见。桃花灼灼,枝叶蓁蓁,妖娆伤眼。" \
- "记忆可以封存,可心有时也会背叛,忘得了前世情缘,忘不了桃林十里,亦忘不了十里桃林中玄衣的少年。"
- # 基于TF-IDF算法进行关键词抽取
- keywords = tfidf(text)
- print "keywords by tfidf:"
- # 输出抽取出的关键词
- for keyword in keywords:
- print keyword + "/",
- 三生三世十里桃花
-
- 输入:
- "杨幂、赵又廷主演古装玄幻大剧原著小说,三生三世,她和他,是否注定背负一段纠缠的姻缘?三生三世,她和他,是否终能互许一个生生世世的承诺?"
- "那一世,大荒之中一处荒山,成就她与他的初见。桃花灼灼,枝叶蓁蓁,妖娆伤眼。"
- "记忆可以封存,可心有时也会背叛,忘得了前世情缘,忘不了桃林十里,亦忘不了十里桃林中玄衣的少年。"
-
- 输出:
- keywords by tf-idf:
- 三生/ 桃林/ 忘不了/ 三世/ 十里/ 蓁蓁/ 玄幻/ 伤眼/ 生生世世/ 互许/ 赵又廷/ 大剧/ 中玄衣/ 杨幂/ 终能/ 忘得/ 情缘/ 古装/ 妖娆/ 是否/
- 铁拳少年
-
- 输入:
- "一个元气满满的格斗少年,费尽九牛二虎之力考入东江大学,只为挑战高中时代的学长偶像,亲手击碎高中三年的格斗梦魇。当他第一脚踏进东大长空格斗社的那天起,
- 他才发现格斗王冠下的荆棘远远比夺得王冠要来的更有意义,枯燥的大学青春一样可以变得热血沸腾……"
-
- 输出:
- keywords by tf-idf:
- 格斗/ 王冠/ 学长/ 高中时代/ 社的/ 东大/ 大学/ 更有意义/ 九牛二虎之力/ 击碎/ 费尽/ 梦魇/ 长空/ 枯燥/ 热血沸腾/ 荆棘/ 东江/ 偶像/ 元气/ 满满的/
- 破产名媛约不约
-
- 输入:
- 她是落魄名媛季晚,亦是极具天赋的珠宝设计师;他是名门之后郁东尧,出身显赫。传闻他心狠手毒,亲手设计车祸,害死弟弟,又娶了弟弟的心上人季晚为妻。
- 四年前,一个事故、一场婚礼,将他与她的命运牢牢捆绑,她走不出去,他不曾归来。
- 四年后,当亡者与旧爱同时回归,掀起重重波澜,丑闻、抄袭门、连环车...
-
- 输出:
- keywords by tf-idf:
- 弟弟/ 心狠手毒/ 四年/ 郁东尧/ 亡者/ 心上人/ 名媛/ 抄袭/ 名门/ 落魄/ 车祸/ 害死/ 连环/ 丑闻/ 波澜/ 天赋/ 捆绑/ 显赫/ 设计师/
- 大唐奇案集
-
- 输入:
- 盛世锦绣,繁华大唐,一场无头连环女尸案掀起腥风血雨。
- 当女扮男装的捕头沈锦文,遇见身负重重谜团的宁修睿,她的世界便开始天翻地覆。
- 一桩桩奇案接踵而来,诡异惊悚的四方宫灯案,骇人听闻的密室灭门案,神秘离奇的南疆将士怀胎案,西域古国龟兹国进贡的九龙雕像玉雕杀人案
-
- 输出:
- keywords by tf-idf:
- 奇案/ 腥风血雨/ 捕头/ 灭门案/ 宁修/ 沈锦文/ 惊悚/ 女扮男装/ 杀人案/ 身负/ 怀胎/ 接踵而来/ 谜团/ 天翻地覆/ 骇人听闻/ 宫灯/ 古国/ 玉雕/ 连环/ 锦绣/
- 至高无上
-
- 输入:
- 命运是一道痛苦枷锁,芸芸众生,无人能挣脱它的锁链。三千年的孤独等待,却只换来与她一世轮回的天人永隔。
- 命运曰,不能改变世界,就会被世界改变,这就是命。因这句话,这一世他再次收齐遗留在上古之神石,扭曲规则,从此改变的是世界,不是他。
-
- 输出:
- keywords by tf-idf:
- 命运/ 一世/ 轮回/ 世界/ 收齐/ 天人永隔/ 神石/ 芸芸众生/ 三千年/ 枷锁/ 锁链/ 遗留/ 上古/ 换来/挣脱/ 扭曲/ 孤独/ 无人/ 这句/
结果说明:
1.由于用的jieba分词自带的语料库,所以对于小说语料不是很完整,过滤掉停用词,常见词等效果还能够提升,这个可以通过后期训练进行补充。
2.输入数据仅为简介,所有可能有一些词可能拆分出来的并不是理想,如果实操需要采用小说内容。
即使这样,从结果中还是可以看出重点词语大多数都被提取出来了,通过抽取的关键词结合人工提供的关键词,可以对小说进行更加准确的特征描述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。