当我们获取了许多文档或者新闻,都会有标题,如何将相似的文档聚成一类了?
计算文档相似度。这里不谈算法,直接运用,看结果,后面讨论算法。(文档标题转化为词向量,余弦距离计算)
首先获取了舆情或者新闻的json:
这里面有许多topicSubject
将其所有topicobject提取出来。
python代码如下:
import json
import codecs
f = file(r'D:/data/files/task_1923.json')
jsonobj = json.load(f)
#列表用序号来查询
output = codecs.open('D:/data/files/topic.txt', 'w+','gbk')
for i in range(1000):
output.write(str(jsonobj['taskId_1923'][i]['topicSubject']) + '\n')
output.close( )
f.close
结果如下:
接下来的工作就是对这些topic进行合并,求出它们的相似度。
然后将其进行分词处理:
2016高校校园媒体发展报告
与它相似的话题及相似度:
2016高校校园媒体发展报告
1.0
2016高校校园媒体发展报告
1.0
2016高校校园媒体发展报告
1.0
2016中国高校校园媒体发展报告 摘录
0.866025
2016中国高校校园媒体发展报告 摘录
0.866025
2016中国高校校园媒体发展报告 摘录 中青在线
0.774597
晋中交警高校大队为取暖煤 开道
0.408248
一周综述 户户通 工程建设有重大进展 新媒体发展成果喜人
0.333333
园区与高校联动 探索校园文化产业新模式
0.333333
广东庆祝记者节 慎海雄强调以新发展理念推动媒体融合
0.308607
=======================================
消费金融 创新新升升级2016首届金融科技杭州论坛隆重隆重召开召开
与它相似的话题及相似度:
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.933441
=======================================
2015年我国国文文艺文艺片票房增幅达 68
与它相似的话题及相似度:
2015年我国文艺片票房增幅达68% 光明日报
0.906928
2015年我国文艺片票房增幅达68%
0.906928
2015年我国文艺片票房增幅达68%
0.906928
2015年我国文艺片票房增幅达68%
0.906928
2015年我国文艺片票房增幅达68%
0.906928
2015年我国文艺片票房增幅达68%
0.906928
2015年我国文艺片票房增幅达68%
0.906928
2015年我国文艺片票房增幅达68%
0.906928
研究报告显示 2015年我国文艺片票房增幅达68%
0.820349
015年我国文艺片票房增幅达68% 国内社会 国内 天下 新闻中心 台海网
0.577401
=======================================
冯小刚 喜剧 20年开启我不是潘金莲金莲笑里有料
与它相似的话题及相似度:
冯小刚喜剧20年 开启 我不是潘金莲 笑里有料
1.0
冯小刚 我不是潘金莲 终于过审
0.566947
金新 由 胖子烧饼 风头盖过 学军60年...
0.267261
蒙面唱将猜猜猜 我不是一只小小鸟是谁
0.267261
2016年婚恋受阻 2019年婚姻幸福的人
0.227921
2016年婚恋受阻 2019年婚姻幸福的人
0.227921
时光之味 老家年菜复刻之 蒸白菜卷
0.218218
2017年俄克拉荷马大学费用
0.188982
开心麻花 驴得水 公映 最出乎意料喜剧带笑来袭
0.169031
5块喝爆款饮料不是梦 南京这39家小吃饮料店啦
0.154303
=======================================
上海海大大数数据金融发展交流暨贵州金融金融城高铁新城招商推介 推介会 隆重 隆重举行 举行
与它相似的话题及相似度:
...上海大数据金融发展交流暨贵州金融城高铁新城招商推介会隆重举行
0.871058
2016贵阳·上海大数据金融发展交流会隆重举行
0.615929
李扬 互联网金融并非特定的金融业态金融模式
0.502907
他为中小企业代言 谱写北京金融传奇!(带领一家中小银行创造金融历史)
0.41062
从内增性发展到借助资本力量实现跨越式发展 BR 文化 金融 为...
0.367271
首届金融科技杭州论坛召开 消费金融前景广阔
0.350181
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.322117
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.322117
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.322117
消费金融 创新升级 2016首届金融科技杭州论坛隆重召开
0.322117
=======================================
云栖大会南京峰会今召开
与它相似的话题及相似度:
云栖大会 南京峰会今召开
1.0
云栖大会 南京峰会今召开
1.0
九三学社秦皇岛市第七次代表大会召开
0.288675
许昌学院召开培养方案外审专家论证会
0.182574
在无锡新能源大会上 这些政企大佬是这样说的
0.182574
出席省党代会的忻州市代表热烈讨论大会报告
0.182574
第六届全国广播学术研讨会召开
0.166667
5块喝爆款饮料不是梦 南京这39家小吃饮料店啦
0.166667
杭州2017白马湖峰会 一场商业WiFi的饕餮盛宴
0.166667
爱果冻科技召开虚拟现实高校学科建设研讨会
0.166667
=======================================
深谋远虑的任正非也没想到它的崛起!
与它相似的话题及相似度:
深谋远虑的任正非也没想到它的崛起!
1.0
当新一代移动通信技术崛起 第三代半导体可以做些什么
0.353553
任正非放话占领图像时代 剑指VR手机
0.316228
专访余承东 华为如何应对异军崛起的OPPO、vivo 界面 科技
0.267261
Medidata 致力用大数据降低临床试验成本
4.34369e-06
搜狗购物搜索 狂欢大趴 让你做个会省钱的剁手族!
2.28919e-06
又到记者节
2.51457e-07
中华人民共和国网络安全法
1.91852e-07
带你逛 谁说ADM只有展览可以看 我偏要在里面蹲...
1.87661e-07
江干龙湖滟澜星座价格走势、 未来发展趋势分析
1.58325e-07
=======================================
取得了不错的效果。
代码如下:
from gensim import corpora,models,similarities
from collections import defaultdict
import codecs
import jieba
f2 = codecs.open(r"D:/data/files/r.txt",'r','utf-8')
documents = f2.readlines()
f1 = codecs.open('D:/data/files/topic.txt', 'r')
topicnames = f1.readlines()
f1.close()
# 去掉停用词
#f = codecs.open(r"D:\tomcat\word2vector\hlt_stop_words.txt",'r')
#stopwords = f.readlines()
#stoplist = set(stopwords)
stoplist = {}.fromkeys([ line.rstrip() for line in codecs.open(r"D:\tomcat\word2vector\hlt_stop_words.txt",'r','utf-8') ])
#stoplist = {}.fromkeys(u'的')
texts = [[word for word in document.split() if word not in stoplist]
for document in documents]
#print "".join(texts[51])
frequency = defaultdict(int)
for text in texts:
for token in text:
frequency[token] += 1
texts = [[token for token in text if frequency[token] > 1]
for text in texts]
dictionary = corpora.Dictionary(texts) # 生成词典
dictionary.save('D:/tomcat/word2vector/tmp/deerwester.dict')
corpus = [dictionary.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize('D:/tomcat/word2vector/tmp/deerwester.mm', corpus)
corpus = corpora.MmCorpus('D:/tomcat/word2vector/tmp/deerwester.mm')
lsi = models.LsiModel(corpus, id2word=dictionary, num_topics=1000)
doc = ["2016高校校园媒体发展报告",
"消费金融 创新新升升级2016首届金融科技杭州论坛隆重隆重召开召开 ",
"2015年我国国文文艺文艺片票房增幅达 68",
"冯小刚 喜剧 20年开启我不是潘金莲金莲笑里有料 ",
"上海海大大数数据金融发展交流暨贵州金融金融城高铁新城招商推介 推介会 隆重 隆重举行 举行 ",
"云栖大会南京峰会今召开 ",
"深谋远虑的任正非也没想到它的崛起!",
"015年我国文艺片票房增幅达68% 国内社会 国内 天下 新闻中心 台海网",
"开公司为3万会员崔永元提供非转基因商品",
"网上曝光 淘宝兼职是真的吗 揭露刷单陷阱 亲身经历",
"四川新闻战线践行习近平讲话 讲述四川好故事 传递巴蜀正能量",
"新闻界热议习近平讲话 唯有创新奋斗方能不辱使命",
"以习近平总书记系列重要讲话精神为指引忠诚担当 攻坚克难 为全面建成小康社会而奋斗",
" 她曾主持春晚 因做小三离开央视 当演员却再次做小三 ",
"在职研究生提供住宿吗 "
]
for j in range(len(doc)):
words = jieba.cut(doc[j], cut_all=False)
x = " ".join(words)
texts = [word for word in x.split() if word not in stoplist]
texts = " ".join(texts)
#print texts
vec_bow = dictionary.doc2bow(texts.split())
vec_lsi = lsi[vec_bow]
#print(vec_lsi)
index = similarities.MatrixSimilarity(lsi[corpus])
index.save('D:/tomcat/word2vector/tmp/deerwester.index')
index = similarities.MatrixSimilarity.load('D:/tomcat/word2vector/tmp/deerwester.index')
sims = index[vec_lsi]
#print(list(enumerate(sims)))
sims = sorted(enumerate(sims), key=lambda item: -item[1])
print(doc[j])
print("与它相似的话题及相似度:")
for i in range(10):
print(topicnames[sims[i][0]])
print(sims[i][1])
print "======================================="
您有什么更好的算法吗?欢迎留言!