功能

  • 输出文本关键词以及热度值

工具

  • python2 spark2.0.2

数据集

  • 两个字段(评论人,评论内容),480条短评;

结果

引言

  • textrank是一个基于词共现的算法,目前最新的spark2.2.1的ml模块里没有textrank。
  • python的textrank库:
    • 输入是分词后的文本,输出是热度词topN;
    • 在对源代码做了些更改后(textrankWeightWords),输出的是热度词topN和其对应的热度值。

脚本

主函数

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@author:
@contact:
@file:
@time:
"""
from __future__ import print_function
import sys,os,time,jieba
reload(sys)
sys.setdefaultencoding("utf-8")
from pyspark.sql import SparkSession
from pyspark.sql import Row
from pyspark.ml.feature import CountVectorizer
import textrankWeightWords,PreTreatment#读取配置文件
url,driver,oracle_user,password,data_table,time_column,DATATYPE_column,SPARK_HOME=PreTreatment.configfileParameter(1)
os.environ['SPARK_HOME'] = SPARK_HOME
spark = SparkSession.builder.appName("textRank").getOrCreate()# 读取oracle数据
sys_year=sys.argv[1]
jdbcDF =spark.read.format("jdbc").options(url=url,driver=driver,dbtable="(select * from " + data_table + " where to_char(" + time_column + ",'yyyy')=" + str(sys_year) + ")",user=oracle_user, password=password).load()
onlychina = jdbcDF.filter(jdbcDF['SS'].rlike("[\u4e00-\u9fa5]"))
onlychina.createOrReplaceTempView("onlychina")
#把所有数据合在一起
df = spark.sql("select concat_ws(' ', collect_set(SS)) as text_group from onlychina")
#做textrank
rdd = df.rdd.map(lambda x: (Row(keyWord=PreTreatment.stopword(textrankWeightWords.textrankWeightWords(x[0], 30)[1]),hotRate=PreTreatment.intArr2StrArr(textrankWeightWords.textrankWeightWords(x[0], 30)[0]))))
df=rdd.toDF()
df.show(truncate=False)
spark.stop()

textrankWeightWords

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@author:
@contact:
@time:
"""
def textrankWeightWords(selfdoc, limit=5, merge=False):from snownlp import segfrom snownlp import normalfrom snownlp.summary import textrankfrom snownlp.summary import words_mergedoc = []sentences = normal.get_sentences(selfdoc)sents = sentencesfor sent in sents:words = seg.seg(sent)words = normal.filter_stop(words)doc.append(words)rank = textrank.KeywordTextRank(doc)rank.solve()ret = []for w in rank.top_index(limit):ret.append(w)if merge:wm = words_merge.SimpleMerge(selfdoc.doc, ret)return wm.merge()# return retweight=[]for i in rank.top[0:limit]:weight.append(i[1])return weight,ret

PreTreatment

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@author:
@contact:
@time:
"""
from __future__ import print_function
from pyspark.sql import SparkSession
import os,time,ConfigParser,sys
reload(sys)
sys.setdefaultencoding("utf-8")os.environ['SPARK_HOME'] = "/usr/local/spark"
spark = SparkSession.builder.appName("PreTreatment").getOrCreate()
sc = spark.sparkContext
# 加载停用词典
stopwords = sc.textFile("hdfs://stopwords.txt")stopwords = stopwords.collect()def configfileParameter(b):pwd = sys.path[0]path = os.path.abspath(os.path.join(pwd, os.pardir, os.pardir))os.chdir(path)cf = ConfigParser.ConfigParser()cf.read("/configfile.conf")url = cf.get("oracle", "url")driver = cf.get("oracle", "driver")oracle_user = cf.get("oracle", "oracle_user")password = cf.get("oracle", "password")data_table = cf.get("oracle", "data_table")time_column = cf.get("oracle", "time_column")DATATYPE_column = cf.get("oracle", "DATATYPE_column")SPARK_HOME = cf.get("SPARK_HOME", "SPARK_HOME")return url,driver,oracle_user,password,data_table,time_column,DATATYPE_column,SPARK_HOME# 去停用词、单字、数字
def stopword(strArr):stop_strArr = []for i in strArr:if len(i) > 1:if i.isdigit() != True:if i not in stopwords:stop_strArr.append(i)return stop_strArr#list每个元素保留4位小数,并把数值型的元素转化为字符串形式
def intArr2StrArr(intArr):StrArr = []for i in intArr:StrArr.append(str(round(i, 4)))return StrArr

run

/usr/local/spark/bin/spark-submit --jars ojdbc6.jar,mysql-connector-java-5.1.41-bin.jar,textrankWeightWords.py,PreTreatment.py  --driver-memory 2G --master spark://  --executor-memory 10G --total-executor-cores 56 Run.py 2018 >> 1.log 2>&1

“西游记之大圣归来”关键词提取-textrank相关推荐

  1. albiononline未能连接服务器,西游记之大圣归来无法连接服务器解决方案分享

    西游记之大圣归来无法连接服务器解决方案分享,今天小编为大家整理的是关于西游记之大圣归来无法连接服务器解决方案分享的分享,如果你在西游记之大圣归来这款游戏中也遇到了这类的问题不妨来看看小编为大家整理的处 ...

  2. 如何评价电影《西游记之大圣归来》?

    一. 在我上小学的年纪,最想要拥有的朋友有两个,一个是哆啦a梦,它的异次元口袋如果能让我用用,那该多好:另一个,就是孙悟空.他是那么强悍,十万天兵见了他都绕路走,更别说班主任和家长了. 按西游记的说法 ...

  3. “西游记之大圣归来”短评主题分析-Latent Dirichlet Allocation

    功能 输出影评主题: 输出每份评论在各个主题上的权重分布. 工具 python2 spark2.0.2 引言 在机器学习中,LDA是两个常用模型的简称:线性判别分析(Linear Discrimina ...

  4. 《西游记之大圣归来》

    今天闲的无聊,看下了国产动画片--大圣归来.之前有看过来国产的动画片,如秦时明月,魁拔等.不能说完美吧,但至少看见了中国动画人在努力,在前行.因此,本着不吐槽,不墨迹的原则看完了整部片.整部片的内容讲 ...

  5. 《大圣归来》电影海报原创作者张浩谈商业海报制作思路

    通常谈到商业创作和个人创作之间的关系,大多艺术家恐怕都是要眉头紧锁的.要么为了心中的情怀,视商业为猛虎,完全杜绝:要么将商业创作和个人创作截然分开,井水不犯河水.不过,我的处理方式却是绝妙的.可以说, ...

  6. 从《大圣归来》谈谈国产3D技术的崛起

    很多年前的七月,你是否和我一样,正开开心心地过暑假呢? 比如捧着香甜的西瓜,坐在大屁股电视机前,津津有味地看电视. 那么,你是否还记得这部<大闹天宫>? 孙悟空穿着鹅黄色的上衣,大红的裤子 ...

  7. 《大圣归来》电影海报原创作者张浩:如何驾驭灵感作品

    2015年7月,电影<西游记之大圣归来>在众青春片浩浩荡荡的碾压之势下逆袭,微博等新媒体甚至自发产生一众"自来水"免费为影片宣传,仅上映20天累计票房便已突破7亿大关, ...

  8. 2015071202 - 大圣归来

    西游记之大圣归来,这部电影感觉还不错,国产3D中比较好的作品,难得看过之后大家一堆夸赞啊,真心不错啊! 虽然把猴子搞的很难看的,电影结尾收尾比较仓促,有些细节问题感觉不是很到位! 从观众的评价来说,大 ...

  9. 定护你一世周全 《大圣归来》影评剧透慎点

    整个六月下旬,微博被预告MV刷屏,觉得歌曲一般,画面很好,又有热心粉丝换上戴荃的歌曲<悟空>,好像很赞.朋友向我推荐这个MV的时候是这样说的: "大圣穿着全身甲,搭件长了个长的红 ...

最新文章

  1. 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题
  2. 组件化开发思想||全局组件注册语法||组件注册注意事项
  3. 有跳板机时,如何使用sshfs挂载远程服务器文件夹
  4. VTK:IO之ReadCML
  5. MFC入门(一)——MFC是一个编程框架
  6. 编译安装Centos7.2+Apache2.4.25+PHP7.2.10+Mysql5.6.16
  7. CodePlex关闭,建议迁移至GitHub
  8. java行数可变的表格,怎么在表格中自动增加行,并对输入的数据作判断
  9. 【BERT】BERT的嵌入层是如何实现的?看完你就明白了
  10. 翻译: 3.3. 线性回归的简明实现 pytorch
  11. Go 语言高性能编程
  12. python requests timeout参数
  13. 数组filter的用法
  14. 如何利用 C# 爬取「财报说」中的股票数据?
  15. 洁厕灵的工作原理、使用方法和危害 //2021-1-27
  16. 阿里的“无用”和“有用”
  17. 目标跟踪的评价指标(OTB与VOT)
  18. 华为、H3C、锐捷三家交换机配置命令详解
  19. QQ 空间备份神器,一键备份你所有的青春!
  20. 用网易云短信实现短信验证码功能

热门文章

  1. 敲开社科院与杜兰大学金融管理硕士项目的大门,开启在职读研的快乐时光
  2. angularjs $watch监听模型变化
  3. C++OpenCV下绘制灰度直方图
  4. SDC设计约束(1)——时钟相关约束
  5. MapReduce关系代数运算——选择
  6. 某计算机硬盘容量是2gb,计算机实训报告.docx
  7. 在html里设置打印的格式,JavaScript+CSS控制打印格式(示例)
  8. java-微信公众号服务器配置验证token
  9. 如何使用粉末沉积工艺实现可扩展的多材料3D打印?
  10. 删除二叉树的所有叶子结点