百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

gensim基本使用&文本相似度分析

toyiye 2024-06-21 12:05 13 浏览 0 评论

gensim基本使用

gensim 是一个通过衡量词组(或更高级结构,如整句或文档)模式来挖掘文档语义结构的工具

三大核心概念:文集(语料)–>向量–>模型

文集:

将原始的文档处理后生成语料库

from gensim import corpora

import jieba

documents = ['工业互联网平台的核心技术是什么',

'工业现场生产过程优化场景有哪些']

def word_cut(doc):

seg = [jieba.lcut(w) for w in doc]

return seg

texts= word_cut(documents)

##为语料库中出现的所有单词分配了一个唯一的整数id

dictionary = corpora.Dictionary(texts)

dictionary.token2id

1

2

3

4

5

6

7

8

9

10

11

12

13

{'互联网': 0,

'什么': 1,

'优化': 7,

'哪些': 8,

'场景': 9,

'工业': 2,

'平台': 3,

'是': 4,

'有': 10,

'核心技术': 5,

'现场': 11,

'生产': 12,

'的': 6,

'过程': 13}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

向量

把文档表示成向量

##该函数doc2bow()只计算每个不同单词的出现次数,将单词转换为整数单词id,并将结果作为稀疏向量返回

bow_corpus = [dictionary.doc2bow(text) for text in texts]

bow_corpus

1

2

3

[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)],

[(2, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1)]]

1

2

每个元组的第一项对应词典中符号的 ID,第二项对应该符号出现的次数。

模型

from gensim import models

# train the model

tfidf = models.TfidfModel(bow_corpus)

1

2

3

4

5

一、分词

分词工具

1、python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP

2、Hanlp

首先要对句子进行初步处理。本文对文本依次进行了【去空去重、切词分词和停用词过滤】操作。

原始数据会存在一些【空或重复的语句】,须过滤掉这些【无价值且影响效率】的语句。使用计算机自动地对中文文本进行词语切分的过程称为中文分词(Chinese Word Segmentation),即使中文句子中的词之间有空格标识。若要对一个句子进行分析,就需要将其切分成词的序列,然后以词为单位进行句子的分析,故中文分词是中文自然语言处理中最基本的一个环节。

生成分词列表

1、首先停用词过滤,返回一个停用词表

可以使用中科院的“计算所汉语词性标记集”以及哈工大停用词表

def StopWordsList(filepath):

wlst = [w.strip() for w in open(filepath,'r',encoding='utf8').readlines()]

return wlst

1

2

3

2、结巴分词后的停用词性 [标点符号、连词、助词、副词、介词、时语素、‘的’、数词、方位词、代词]

stop_flag = ['x', 'c', 'u','d', 'p', 't', 'uj', 'm', 'f', 'r']

1

对文本集中的文本进行中文分词,返回分词列表

1

def seg_sentence(sentence,stop_words):

sentence_seged = jieba.cut(sentence.strip())

# sentence_seged = set(sentence_seged)

outstr = ''

for word in sentence_seged:

if word not in stop_words:

if word != '\t':

outstr += word

outstr += ' '

return outstr.split(' ')

1

2

3

4

5

6

7

8

9

10

11

二、 基于文本集建立词典,计算相似度##

#1、将【文本集】生产【分词列表】

texts = [seg_sentence(seg,stop_words) for seg in open(tpath,'r',encoding='utf8').readlines()]

#一、建立词袋模型

#2、基于文件集建立【词典】,并提取词典特征数

dictionary = corpora.Dictionary(texts)

feature_cnt = len(dictionary.token2id.keys())

#3、基于词典,将【分词列表集】转换为【稀疏向量集】,也就是【语料库】

corpus = [dictionary.doc2bow(text) for text in texts]

#二、建立TF-IDF模型

#4、使用“TF-TDF模型”处理【语料库】

tfidf = models.TfidfModel(corpus)

#三构建一个query文本,利用词袋模型的字典将其映射到向量空间

#5、同理,用词典把搜索词也转换为稀疏向量

kw_vector = dictionary.doc2bow(seg_sentence(keyword,stop_words))

#6、对稀疏向量建立索引

index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=feature_cnt)

#7、相似的计算

sim = index[tfidf[kw_vector]]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

全部代码:

import jieba

import jieba.posseg as pseg

from gensim import corpora, models, similarities

def StopWordsList(filepath):

wlst = [w.strip() for w in open(filepath, 'r', encoding='utf8').readlines()]

return wlst

def seg_sentence(sentence, stop_words):

# stop_flag = ['x', 'c', 'u', 'd', 'p', 't', 'uj', 'm', 'f', 'r']#过滤数字m

stop_flag = ['x', 'c', 'u', 'd', 'p', 't', 'uj', 'f', 'r']

sentence_seged = pseg.cut(sentence)

# sentence_seged = set(sentence_seged)

outstr = []

for word,flag in sentence_seged:

# if word not in stop_words:

if word not in stop_words and flag not in stop_flag:

outstr.append(word)

return outstr

if __name__ == '__main__':

spPath = 'stopwords.txt'

tpath = 'test.txt'

stop_words = StopWordsList(spPath)

keyword = '吃鸡'

# 1、将【文本集】生产【分词列表】

texts = [seg_sentence(seg, stop_words) for seg in open(tpath, 'r', encoding='utf8').readlines()]

orig_txt = [seg for seg in open(tpath, 'r', encoding='utf8').readlines()]

#一、建立词袋模型

# 2、基于文件集建立【词典】,并提取词典特征数

dictionary = corpora.Dictionary(texts)

feature_cnt = len(dictionary.token2id.keys())

# 3、基于词典,将【分词列表集】转换为【稀疏向量集】,也就是【语料库】

corpus = [dictionary.doc2bow(text) for text in texts]

# 4、使用“TF-TDF模型”处理【语料库】

#二、建立TF-IDF模型

tfidf = models.TfidfModel(corpus)

#三构建一个query文本,利用词袋模型的字典将其映射到向量空间

# 5、同理,用词典把搜索词也转换为稀疏向量

kw_vector = dictionary.doc2bow(seg_sentence(keyword, stop_words))

# 6、对稀疏向量建立索引

index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=feature_cnt)

# 7、相似的计算

sim = index[tfidf[kw_vector]]

result_list = []

for i in range(len(sim)):

print('keyword 与 text%d 相似度为:%.2f' % (i + 1, sim[i]))

if sim[i] > 0.4:

result_list.append(orig_txt[i])

print('原始的句子:',result_list)

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码