基於tfidf 以及 lsi 的文字相似度分析
本文主要為了計算文件之間的相似度。標準語聊為我們訓練模型所需的,使用者語料則用來測試與標準語聊的相似度
1、 資料預處理部分,見註釋
對標準語聊進行處理如下
ws = open('d:/sentence.csv','r',encoding='gbk')
times = 0
import re
import jieba
standard_data = [] ###標準語料
map_value = {}
seed = 0
from zhon.hanzi import punctuation
for i in ws.readlines():
times += 1
if times == 1:
continue
newline = i.strip().split(',')
newline = re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\!\@\#\\\&\*\%\-\_]", "", newline[0])
newline = re.sub(' ','',newline)
newline = re.sub("[%s]+" %punctuation, "", newline)
standard_data.append(list(jieba.cut(newline)))
seed += 1
map_value[seed-1] = newline
ws.close()
2、tf-idf
from gensim import corpora, models, similarities
# 生成字典和向量語料
dictionary = corpora.Dictionary(standard_data)
# 通過下面一句得到語料中每一篇文件對應的稀疏向量(這裡是bow向量)
corpus = [dictionary.doc2bow(text) for text in standard_data]
# corpus是一個返回bow向量的迭代器。下面程式碼將完成對corpus中出現的每一個特徵的IDF值的統計工作
tfidf_model = models.TfidfModel(corpus)
corpus_tfidf = tfidf_model[corpus]
####文件相似性的計算
map_value_user = {}
import jieba
import re
raw_data = []
w = open('d:/user_content_v2.txt','r',encoding= 'utf-8')
start = 0
for line in w.readlines():
newline = line.strip()
newline = re.sub(' ','',newline)
newline2 = jieba.cut(newline)
newline2 = list(newline2)
map_value_user[start] = newline
raw_data.append(newline2)
start += 1
w.close()
index = similarities.MatrixSimilarity(corpus_tfidf)
vec_bow =[dictionary.doc2bow(text) for text in raw_data] #把使用者語料轉為詞包
all_reult_sims = []
times_v2 = 0
###對每個使用者語聊與標準語聊計算相似度
for i in vec_bow:
#直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值
sims = index[tfidf_model[i]]
sims = sorted(enumerate(sims), key=lambda item: -item[1])
result_sims = []
for i,j in sims:
result_sims.append([map_value_user[times_v2],map_value[i],j])
times_v2 += 1
all_reult_sims.append(result_sims[:20])
3、lsi
lsi = models.LsiModel(corpus_tfidf)
corpus_lsi = lsi[corpus_tfidf]
####文件相似性的計算
map_value_user = {}
import jieba
import re
raw_data = []
w = open('d:/user_content_v2.txt','r',encoding= 'utf-8')
start = 0
for line in w.readlines():
newline = line.strip()
newline = re.sub(' ','',newline)
newline2 = jieba.cut(newline)
newline2 = list(newline2)
map_value_user[start] = newline
raw_data.append(newline2)
start += 1
w.close()
index = similarities.MatrixSimilarity(corpus_lsi)
vec_bow =[dictionary.doc2bow(text) for text in raw_data] #把商品描述轉為詞包
all_reult_sims = []
times_v2 = 0
for i in vec_bow:
#直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值
sims = index[lsi[tfidf_model[i]]]
sims = sorted(enumerate(sims), key=lambda item: -item[1])
result_sims = []
for i,j in sims:
result_sims.append([map_value_user[times_v2],map_value[i],j])
times_v2 += 1
all_reult_sims.append(result_sims[:20])
相關文章
- 基於文字相似度演算法,分析 Vue 是抄出來的框架嗎?演算法Vue框架
- 大規模文字相似度計算
- 文字相似度計算之餘弦定理
- 系統學習NLP(十七)--文字相似度
- 中文文字相似度計算工具集
- 文字相似度 HanPL漢語言處理
- 基於HBase構建千億級文字資料相似度計算與快速去重系統
- java實現兩個文字相似度 simHash 實現Java
- java中利用hanlp比較兩個文字相似度的步驟JavaHanLP
- 基於GRU和am-softmax的句子相似度模型 | 附程式碼實現模型
- 基於word2vec與Word Mover Distance的文件相似度計算
- 基於關鍵詞及問題主題的問題相似度計算
- Java基於百度API的圖片文字識別JavaAPI
- 海量資料相似度計算之simhash短文字查詢
- 文字主題模型之潛在語義索引(LSI)模型索引
- Java利用hanlp完成語句相似度分析的方法詳解JavaHanLP
- 文章相似度檢測,相似度檢測工具,原創度檢測工具
- NLP segment-05-文字相似度計算 similarity java 開源實現MILAJava
- 文字情感分析(二):基於word2vec和glove詞向量的文字表示
- 文字情感分析(一):基於詞袋模型(VSM、LSA、n-gram)的文字表示模型
- 文章相似度檢測工具哪個好?怎麼讓文章相似度變低?
- 影象相似度中的Hash演算法演算法
- 演算法計算字串的相似度演算法字串
- 基於事理圖譜的文字推理
- 利用sklearn計算文字相似性
- 基於機器學習和TFIDF的情感分類演算法,詳解自然語言處理機器學習演算法自然語言處理
- 機器學習基礎:相似度和距離度量究竟是什麼機器學習
- 中文標題相似度檢測
- 從勾股定理到餘弦相似度-程式設計師的數學基礎程式設計師
- 長度、面積、體積的相似比原理
- 基於支援向量機的文字分類文字分類
- “千言資料集:文字相似度”權威評測,網易易智榮登榜首
- 通過decode計算相似度
- C#比較兩個字串的相似度【轉】C#字串
- 基於文字模式的HTML瀏覽器模式HTML瀏覽器
- 基於 Canvas 的 HTML5 文字動畫特效CanvasHTML動畫特效
- 基於python的文字轉圖片工具Python
- 推薦系統01–餘弦相似度