NLP之gensim
一、
利用 jieba 进行分词,关键词提取
利用gensim下面的corpora,models,similarities 进行语料库建立,模型tfidf算法,稀疏矩阵相似度分析
# -*- coding: utf-8 -*- import jieba
from gensim import corpora, models, similarities
from collections import defaultdict # 定义文件目录
work_dir = "D:/workspace/PythonSdy/data"
f1 = work_dir + "/t1.txt"
f2 = work_dir + "/t2.txt"
# 读取文件内容
c1 = open(f1, encoding='utf-8').read()
c2 = open(f2, encoding='utf-8').read()
# jieba 进行分词
data1 = jieba.cut(c1)
data2 = jieba.cut(c2) data11 = ""
# 获取分词内容
for i in data1:
data11 += i + " "
data21 = ""
# 获取分词内容
for i in data2:
data21 += i + " " doc1 = [data11, data21]
# print(doc1) t1 = [[word for word in doc.split()]
for doc in doc1]
# print(t1) # # frequence频率
freq = defaultdict(int)
for i in t1:
for j in i:
freq[j] += 1
# print(freq) # 限制词频
t2 = [[token for token in k if freq[j] >= 3]
for k in t1]
print(t2) # corpora语料库建立字典
dic1 = corpora.Dictionary(t2)
dic1.save(work_dir + "/yuliaoku.txt") # 对比文件
f3 = work_dir + "/t3.txt"
c3 = open(f3, encoding='utf-8').read()
# jieba 进行分词
data3 = jieba.cut(c3)
data31 = ""
for i in data3:
data31 += i + " "
new_doc = data31
print(new_doc) # doc2bow把文件变成一个稀疏向量
new_vec = dic1.doc2bow(new_doc.split())
# 对字典进行doc2bow处理,得到新语料库
new_corpor = [dic1.doc2bow(t3) for t3 in t2]
tfidf = models.TfidfModel(new_corpor) # 特征数
featurenum = len(dic1.token2id.keys()) # similarities 相似之处
# SparseMatrixSimilarity 稀疏矩阵相似度
idx = similarities.SparseMatrixSimilarity(tfidf[new_corpor], num_features=featurenum)
sims = idx[tfidf[new_vec]]
print(sims)
二、轻量级数据文本相似的处理
Lsimodel训练模型
import jieba
from gensim import corpora
from gensim import models
from gensim import similarities from settings import MONGO_DB content_list = [] # 放数据库中的内容
for i in MONGO_DB.content.find(): # 查数据库内容,生成器
content_list.append(i.get("title")) # 制作语料库
l1 = content_list
all_doc_list = [] # 存放jieba分词列表
for doc in l1:
doc_list = [word for word in jieba.cut_for_search(doc)]
all_doc_list.append(doc_list)
dictionary = corpora.Dictionary(all_doc_list) #制作词袋 例如: {'什么': 0, '你': 1, '名字': 2, '是': 3, '的': 4, '了': 5, '今年': 6}
corpus = [dictionary.doc2bow(doc) for doc in all_doc_list] # [(1, 1), (5, 1), (6, 1), (7, 1)] bow模型语料库
lsi = models.LsiModel(corpus) # 根据语料库训练Lsi模型,向量表示
# [5*5,6*4,2*3....] # 百度ai识别的用户语音消息 ,jieba分词 --> 语料库
def my_gensim(ai_msg):
doc_test_list = [word for word in jieba.cut_for_search(ai_msg)] # 分词
doc_test_vec = dictionary.doc2bow(doc_test_list) # bow 对象语料库 # 计算文本相似度
# 稀疏矩阵相似度 将主语料库corpus的训练结果 作为初始值
index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features=len(dictionary.keys()))
# 将 语料库doc_test_vec 在 语料库corpus的训练结果 中的 向量表示 ,与 语料库corpus的 向量表示 做矩阵相似度计算
sim = index[lsi[doc_test_vec]]
print(sim,enumerate(sim))
cc = sorted(enumerate(sim), key=lambda item: -item[1]) # 按相似度排序
print(cc)
if cc[0][1] > 0.58:
text = l1[cc[0][0]]
else:
text = None return text print(my_gensim('xiaoxiao 小的'))
NLP之gensim的更多相关文章
- NLP:Gensim库之word2vec
Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达.它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法, ...
- Jasper语音助理
1. 介绍 Jasper是一款基于树莓派的开源语音控制助理, 使用Python语言开发. Jasper工作原理主要是设备被动监听麦克风, 当收到唤醒关键字时进入主动监听模式, 此时收到语音指令后进行语 ...
- 中文分词库及NLP介绍,jieba,gensim的一些介绍
六款中文分词软件介绍: https://blog.csdn.net/u010883226/article/details/80731583 里面有jieba, pyltp什么的.另外下面这个博客有不少 ...
- [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型
深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...
- 【NLP】Python实例:申报项目查重系统设计与实现
Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起 ...
- 用gensim学习word2vec
在word2vec原理篇中,我们对word2vec的两种模型CBOW和Skip-Gram,以及两种解法Hierarchical Softmax和Negative Sampling做了总结.这里我们就从 ...
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...
- NLP︱词向量经验总结(功能作用、高维可视化、R语言实现、大规模语料、延伸拓展)
R语言由于效率问题,实现自然语言处理的分析会受到一定的影响,如何提高效率以及提升词向量的精度是在当前软件环境下,比较需要解决的问题. 笔者认为还存在的问题有: 1.如何在R语言环境下,大规模语料提高运 ...
- pypinyin, jieba分词与Gensim
一 . pypinyin from pypinyin import lazy_pinyin, TONE, TONE2, TONE3 word = '孙悟空' print(lazy_pinyin(wor ...
随机推荐
- Doc-Compose
一.安装sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s ...
- :after/::after和:before/::before的异同
相同点 都可以用来表示伪类对象,用来设置对象前的内容:before和::before写法是等效的; :after和::after写法是等效的不同点 :before/:after是Css2的写法,::b ...
- js实现配置菜品规格时,向后台传一个json格式字符串
由于本公司做的是订餐平台,那么在上传菜品时,需要配置菜品规格,比如份量(大中小),味道(猛辣,中辣,微辣) 由于这些数据,在表的设计时 没有保存到菜品表,那么在点击保存菜品数据时,配置规格这块数据,我 ...
- ajax的XmlHttpRequest对象常用方法
onreadystatechange用于检测readyState状态的改变,当readyState的状态发生改变的时候调用回调
- redis requires Ruby version >= 2.2.2 系统默认 ruby 版本过低,导致 Redis 接口安装失败
安装 Redis 接口时异常 ,系统 ruby 版本过低 ! 输入命令 " gem install redis " 出现 " ERROR: Error installi ...
- 《JavaScript高级程序设计》读书笔记(一)JavaScript简介
起于客户端数据验证特性----闭包----匿名函数----元编程等----等想要全面理解和掌握JavaScript----本质----历史----局限性 ECMAScript 脚本语言标准 JavaS ...
- idea 设置自定义注释
详细:idea如何设置类头注释和方法注释 2016年10月13日 15:09:11 标签: idea / 注释 / 97989 编辑 删除 idea和eclipse的注释还是有一些差别的. idea: ...
- 找出crontab表达式内符合的下一次出发时间点(经典!!!)
参考: https://blog.csdn.net/crazycoder2010/article/details/7905848
- Ionic3记录之核心代码分析
app.module.ts app的根模块,一些插件的引用需要在这里声明,告诉APP如何组装应用: app.componet.ts app的根组件,主要用来APP启动时和启动后的操作;
- Java开发神器Lombok的使用与原理
在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此.相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复 ...