基於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])
相關文章
- 大規模文字相似度計算
- 基於HBase構建千億級文字資料相似度計算與快速去重系統
- 文字相似度計算之餘弦定理
- 系統學習NLP(十七)--文字相似度
- 文字相似度 HanPL漢語言處理
- 中文文字相似度計算工具集
- java實現兩個文字相似度 simHash 實現Java
- java中利用hanlp比較兩個文字相似度的步驟JavaHanLP
- 基於GRU和am-softmax的句子相似度模型 | 附程式碼實現模型
- Java基於百度API的圖片文字識別JavaAPI
- 餘弦相似度可能沒用?對於某些線性模型,相似度甚至不唯一模型
- Java利用hanlp完成語句相似度分析的方法詳解JavaHanLP
- 文字情感分析(一):基於詞袋模型(VSM、LSA、n-gram)的文字表示模型
- 文字情感分析(二):基於word2vec和glove詞向量的文字表示
- 文章相似度檢測,相似度檢測工具,原創度檢測工具
- NLP segment-05-文字相似度計算 similarity java 開源實現MILAJava
- 基於事理圖譜的文字推理
- 基於 Hugging Face Datasets 和 Transformers 的影像相似性搜尋Hugging FaceORM
- 文章相似度檢測工具哪個好?怎麼讓文章相似度變低?
- 影象相似度中的Hash演算法演算法
- 基於python的文字轉圖片工具Python
- 基於機器學習和TFIDF的情感分類演算法,詳解自然語言處理機器學習演算法自然語言處理
- 從勾股定理到餘弦相似度-程式設計師的數學基礎程式設計師
- 1123:影像相似度(C C++)C++
- 中文標題相似度檢測
- 基於Python的效能分析Python
- “千言資料集:文字相似度”權威評測,網易易智榮登榜首
- 基於文字模式的HTML瀏覽器模式HTML瀏覽器
- 聊天富文字外掛,一個基於react的富文字外掛React
- L2-005 集合相似度【集合】
- python酒店相似度推薦系統Python
- python sift 特徵匹配 圖片相似度Python特徵
- C#比較兩個字串的相似度【轉】C#字串
- 基於DEM的坡度坡向分析
- HybridDBforPostgreSQL軌跡相似(伴隨分析)SQL
- (?<=p)與:nth-child()的相似性分析
- 【工程應用十】基於十六角度量化的夾角餘弦相似度模版匹配演算法原理解析。演算法
- 基於 Canvas 的 HTML5 文字動畫特效CanvasHTML動畫特效
- 基於 Kotlin Native 的基本文字識別程式Kotlin