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 ...
随机推荐
- Mybatis中mapper.xml的使用
详解多对多,mybatis多对多查询(xml方式和注解方式) 链接:https://blog.csdn.net/qq_42524262/article/details/98383977 链接:http ...
- Trie图(AC自动机)总结
AC自动机构建完成后,某个节点沿着Fail链向上能从长到短走到自己的所有后缀.一般的,遍历主串进行匹配,就是在Trie图上定向移动的过程. 构造(一遍 BFS) void build_AC() { ; ...
- 100w并发产生唯一随机id
#coding=utf-8 import time import base64 import getopt import sys import threading import random impo ...
- Linux--如何通过图形界面选项快速更改ubuntu的窗口、图标、分辨率大小,超详细超实用~(适合所有人群)
这是默认ubuntu给出的分辨率大小:800*600,说实话有点小不适合操作. (分辨率800*600) 这是调整后的分辨率大小. (分辨率1400*900) 操作方法: 首先点击选项框中的设置图标- ...
- Ajax案例
展示页面jsp: <%@ page language="java" contentType="text/html; charset=utf-8" pa ...
- 「JSOI2014」学生选课
「JSOI2014」学生选课 传送门 看到这题首先可以二分. 考虑对于当前的 \(mid\) 如何 \(\text{check}\) 我们用 \(f_{i,j}\) 来表示 \(i\) 对 \(j\) ...
- MyBatis 入门Demo
新建数据库my_db,新建表student_tb id为主键,不自动递增. 不必插入数据. 下载MyBatis https://github.com/mybatis/mybatis-3/release ...
- select模块
select模块 1. select模块 源:select.py This module provides access to the select() and poll() functio ...
- PAT T1021 Safe Fruit
暴力搜索加剪枝~ #include<bits/stdc++.h> using namespace std; ; const int inf=1e9; int g[maxn][maxn]; ...
- 第1节 Scala基础语法:14、15、list集合练习
package cn.itcast.collect /** *作业题 */object ListTest { def main(args: Array[String]): Unit = { //创建一 ...