1. 程式人生 > >使用gensim處理文字(3)相似度分析

使用gensim處理文字(3)相似度分析

1、概述

在之前的文章中,我們將文字轉化為詞向量,並在不同的向量模型中進行轉化。並使用lsa與lda進行了潛在語義分析。其中還有一個非常重要的工作就是相似度分析。本章主要介紹在lsa的基礎上進行相似度分析。

2、初始化相似度查詢模型

首先需要再加字典以及tfidf模型以便於後續的工作,請參照一下程式碼

from gensim import corpora, models, similarities
dictionary = corpora.Dictionary.load('mydic.dict')
corpus = corpora.MmCorpus('bow.mm')
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]

將模型進行lsi轉化生成四個lsi的主題空間,當然這個工作也可以使用lda模型來實現

lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=4) # initialize an LSI transformation
corpus_lsi = lsi[corpus_tfidf]
for topic in lsi.print_topics(4):
    print(topic[1])

輸出效果如下圖所示:


初始化相似度查詢模型,請慘遭下面程式碼:

index = similarities.MatrixSimilarity(lsi[corpus])

3、實施相似度查詢

不管lsa模型還是lda模型都是基於tfidf模型來進行的,所以首先來準備要進行相似度查詢的語料,然後查詢其tfidf值。

import pymysql as db
import sys
import jieba
import jieba.posseg as pseg
#載入自定義字典,與停用詞
jieba.load_userdict('../all_keywords.txt')
stopfile = '../stopwords.txt'
with open(stopfile,'r') as f:
    stopwords = f.read()
    stopwords = stopwords.split('\n')
text = """我看見過波瀾壯闊的大海,玩賞過水平如鏡的西湖,卻從沒看見過灕江這樣的水。
          灕江的水真靜啊,靜得讓你感覺不到它在流動;
          灕江的水真清啊,清得可以看見江底的沙石;
          灕江的水真綠啊,綠得彷彿那是一塊無瑕的翡翠。
          船槳激起的微波擴散出一道道水紋,
          才讓你感覺到船在前進,岸在後移。"""
text = ''.join(text.split())
row_words = jieba.cut(text)
words = [w for w in row_words if w not in stopwords]
print(words)

輸出結果如下圖所示


將語料轉化為詞袋模型並進一步轉化為tfidf模型,請參照如下程式碼

vec_bow = dictionary.doc2bow(words)
vec_lsi = lsi[vec_bow]
print(vec_lsi)

輸出結果如下圖所示


執行相似度查詢,相似度模型採用餘弦相似度進行查詢,請參照如下程式碼:

sims = index[vec_lsi] 
print(list(enumerate(sims)))

輸出效果如下圖所示:


可以對輸出結果進行排序,使結果更加清晰,請參照如下程式碼

sims = sorted(enumerate(sims), key=lambda item: -item[1])
print(sims)

輸出效果如下圖所示


相似度在-1與+1之間,可以看到第一個文件相似度達到了99.7%的相似度

可以使用下面程式碼查詢一下,相似度最高與相似度最低的文件的內容

import pymysql as db
import numpy as np
import pandas as pd
train_data = pd.read_csv('../cutword_ths.csv',delimiter=' ',header=None,names=['id','text'])
print(train_data.loc[249]['text'])
print('-----------------------------------------------------')
print(train_data.loc[44]['text'])

輸出結果如下圖所示:


可以看到,這種相似度的查詢還是很有效果的。

相關推薦

使用gensim處理文字3相似分析

1、概述在之前的文章中,我們將文字轉化為詞向量,並在不同的向量模型中進行轉化。並使用lsa與lda進行了潛在語義分析。其中還有一個非常重要的工作就是相似度分析。本章主要介紹在lsa的基礎上進行相似度分析。2、初始化相似度查詢模型首先需要再加字典以及tfidf模型以便於後續的工

數字圖像處理的Matlab實現3—灰變換與空間濾波

彩色圖像 equals 相同 tca 彩色 處理工具 off argc ber 第3章 灰度變換與空間濾波(1) 3.1 簡介 空間域指的是圖像平面本身,這類方法是以對圖像像素直接處理為基礎的。本章主要討論兩種空間域處理方法:亮度(灰度)變換與空間濾波。後一種方法有時涉及到

基於qml創建最簡單的圖像處理程序3-使用opencv&qml進行圖像處理

結果 tar isempty reat features eabi qt quick resources 也會 《基於qml創建最簡單的圖像處理程序》系列課程及配套代碼基於qml創建最簡單的圖像處理程序(1)-基於qml創建界面http://www.cnblogs.com/

Spark Streaming實時流處理筆記3——日誌採集Flume

1 Flume介紹 1.1 設計目標 可靠性 擴充套件性 管理性 1.2 同類產品 Flume: Cloudera/Apache,Java Scribe: Facebook ,C/C++(不維護了) Chukwa: Yahoo

Android studio3.0對於百地圖api開發3——百地圖定位當前地點以及地圖覆蓋物簡介

   承接上文,上文已經實現了按照緯經度進行地點的定位以及不同地圖型別的切換,https://blog.csdn.net/qq_41562408/article/details/82802082但是就我們普通使用者的需求來說,這遠遠不夠。使用者更希望能夠直接顯示自己的當前位置

Python自然語言處理實戰3:中文分詞技術

3.1、中文分詞簡介       在英文中,單詞本身就是“詞”的表達,一篇英文文章就是“單詞”加分隔符(空格)來表示的,而在漢語中,詞以字為基本單位的,但是一篇文章的語義表達卻仍然是以詞來劃分的。       自中文自動分詞被提出以來,歷經將近30年的探索,提出了很多方法,可

用python簡單處理圖片3:新增水印

python版本:3.4 Pillow版本:3.0 一、新增文字水印 from PIL import Image, ImageDraw,ImageFont im = Image.open("d:/pic/lena.jpg").convert('RGBA') txt=Image.new('RGBA'

產品健康模型3 指標關聯性分析

產品健康度模型之指標關聯性分析   我們這裡做關聯性分析的目的就是找出運維指標和運營指標的相關程度。這裡重新貼一下指標的結構圖:       指標離散化   這裡需要說明的是,這些指標可能是連續的,也有可能是離散的,比如我們有運維指標a,b,c,以

Python 影象處理 OpenCV 3:影象屬性、影象感興趣 ROI 區域及通道處理

![](https://cdn.geekdigging.com/opencv/opencv_header.png) 前文傳送門: [「Python 影象處理 OpenCV (1):入門」](https://www.geekdigging.com/2020/05/17/5513454552/) [「Pyt

資料結構與演算法筆記複雜分析

2. 複雜度分析 2.1 什麼是複雜度分析 資料結構和演算法的本質:快和省,如何讓程式碼執行得更快、更省儲存空間。 演算法複雜度分為時間複雜度和空間複雜度,從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 複雜度描述的是演算法執行時間(或佔用空間)與資料規模的增長關

資料結構與演算法——複雜分析

資料結構與演算法(一)—— 複雜度分析(上) 基礎知識就像是一座大樓的地基,只有打好基礎,才能造成萬丈高樓。資料結構與演算法是一個程式設計師的內功,只有基礎足夠紮實,才能有效提高自己的技術能力,寫出更高效、擴充套件性更好的優秀程式碼。寫這個系列記錄一下自己學習的

資料結構與演算法——複雜分析

資料結構與演算法(二)—— 複雜度分析(下) 除了前面記錄的複雜度的基礎知識,還有四個複雜度分析方面的知識點:最好情況時間複雜度、最壞情況時間複雜度、平均情況時間複雜度、均攤時間複雜度。 一、最好、最壞情況時間複雜度 最好情況時間複雜度,就是在最理想的情況下,

【原創】案例分享3使用者行為分析--見證scala的強大

場景分析 使用者行為分析應用的場景很多,像線上網站訪問統計,線下客流分析(比如影象人臉識別、wifi探針等),比較核心的指標有幾個: PV | UV | SD | SC 指標說明: PV(Page View):網站瀏覽量或者商場門店的訪問量UV(Unique Visitor):獨立訪客數,即

基於R的資料探勘方法與實踐3——決策樹分析

決策樹構建的目的有兩個——探索與預測。探索方面,參與決策樹聲場的資料為訓練資料,待樹長成後即可探索資料所隱含的資訊。預測方面,可以藉助決策樹推匯出的規則預測未來資料。由於需要考慮未來資料進入該模型的分類表現,因此在基於訓練資料構建決策樹之後,可以用測試資料來衡量該模型的穩健

3主成分分析(PCA)——基於python+numpy

【機器學習演算法實現】主成分分析(PCA)——基於python+numpy 1、PCA演算法介紹 主成分分析(Principal Components Analysis),簡稱PCA,是一種資料降維技術,用於資料預處理。一般我們獲取的原始資料維度都很高,比如1000個特

Android事件分發3--ViewGroup原始碼分析

一、ViewGroup的onInterceptTouchEvent原始碼分析 onInterceptTouchEvent比較簡單先看他的原始碼 public boolean onInterceptTouchEvent(MotionEvent ev

Python自然語言處理實戰8:情感分析技術

實戰電影評論情感分析         情感分析是一段文字表達的情緒狀態。其中,一段文字可以使一個句子、一個段落或者一個文件。主要涉及兩個問題:文字表達和文字分類。在深度學習出現之前,主流的表示方法有BOW(詞袋模型)和topic model(主題模型),分類模型主要有SVM

redis3--redis原理分析

oev filename 計數 文件名 shell 存儲 width 假設 什麽 過期時間設置 在Redis中提供了Expire命令設置一個鍵的過期時間,到期以後Redis會自動刪除它。這個在我們實際使用過程中用得非常多。EXPIRE命令的使用方法為EXPIRE key

Python+gensim-文字相似分析小白進

1、gensim使用流程 2、程式碼實現 from gensim import corpora, models, similarities import jieba # 分詞函式,返回分詞列表 def cut(sentence): generator

自然場景文字處理論文整理3Mask TextSpotter

這篇論文是2018年7月6號出來的,對於任意形狀的自然文字檢測識別效果非常好。 paper:https://arxiv.org/abs/1807.02242 目前無相關原始碼 1.摘要簡介 在本文中,我們提出了一個名為Mask TextSpotter的文字監視器,它可以檢測和