日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结巴分词关键词相似度_gensim和jieba分词进行主题分析,文本相似度

發布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结巴分词关键词相似度_gensim和jieba分词进行主题分析,文本相似度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#coding=utf-8

importcodecsimportgensimimportjiebafrom gensim importcorpora,models,similaritiesfrom gensim.models importLdaModelfrom gensim.corpora importDictionary#構造分詞庫,格式如下:

'''[['樓下', '買', '水果', '這家', '店', '價格比', '店要', '高', '', '', '%', '價格', '太高', '老板', '說', '老板', '您好', '家', '水果', '很漂亮', '新鮮', '進貨', '價格', '挺', '高', '我剛', '搬', '喜歡', '吃水果', '購買', '老板', '回應', '說', '價格', '優惠', '一點', '更好', '老板', '微笑', '說', '長期', '購買', '', '', '折', '說', '老板', '真', '大方', '就常', '買', '', '', '折', '老板', '聽后', '計算機', '算了', '', '', '折', '再少', '開心', '', '', '折', '價格', '購買', '水果'],

['工作', '做', '行政助理', '跟著', '老板', '一年', '工資', '變化', '', '', '有次', '老板', '聊天', '問', '一年', '表現', '有沒有', '批評', '指導', '一年', '表現', '幫', '加', '工資', '老板', '', '', '幫', '工資', '提高']]'''stopwords= [line.strip() for line in codecs.open('./data/stopwords.txt', 'r', encoding = 'utf-8').readlines()]

train=[]

fp= codecs.open('./result/demo5_sheet1_1.csv','r',encoding='utf8')for line infp.readlines():

line=line.strip()if not len(line):#判斷是否為空行

continueoutstr= ' 'seg_list=jieba.cut(line,cut_all=False)#采用精確模式分詞,效果最好

for word inseg_list:if word not instopwords:if word != '':

outstr+=word

outstr+= " "train.append(outstr.strip().split(" "))#字符串轉列表

fp.close()#print(type(train))#print(train)#exit()

#各個詞或詞組在字典中的編號

'''北京 編號為:12

搭 編號為:6

的 編號為:9

喜歡 編號為:1

不 編號為:10

東西 編號為:4

土豆 編號為:2

霾 編號為:14

是 編號為:7

個 編號為:5

霧 編號為:13

百 編號為:8

今天 編號為:11

我 編號為:3

吃 編號為:0'''dic=corpora.Dictionary(train)for name,index indic.token2id.items():print(name+":"+str(index))break#執行一次

#詞典生成好之后,就開始生成語料庫了

'''corpus=[[(0, 1), (1, 1), (2, 1), (3, 1)], [(2, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1)], [(1, 1), (3, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1), (14, 1)]]

每個中括號代表一句話,用逗號隔開,(0,1)代表詞典中編號為0的詞出現了一次,以此類推,很好理解'''corpus= [ dic.doc2bow(text) for text intrain ]#print(corpus)#exit()

'''得到了語料庫,接下來做一個TF-IDF變換

可以理解成 將用詞頻向量表示一句話 變換成為用 詞的重要性向量表示一句話

(TF-IDF變換:評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。)

vec是查詢文本向量,比較vec和文檔中的文本的相似度

執行結果:

[(0, 0.7071067811865475), (4, 0.7071067811865475)]

[(0, 0.8425587958192721), (1, 0.3109633824035548), (2, 0.3109633824035548), (3, 0.3109633824035548)]

[(2, 0.16073253746956623), (4, 0.4355066251613605), (5, 0.4355066251613605), (6, 0.4355066251613605), (7, 0.4355066251613605), (8, 0.4355066251613605), (9, 0.16073253746956623)]

[(1, 0.1586956620869655), (3, 0.1586956620869655), (9, 0.1586956620869655), (10, 0.42998768831312806), (11, 0.42998768831312806), (12, 0.42998768831312806), (13, 0.42998768831312806), (14, 0.42998768831312806)]'''tfidf=models.TfidfModel(corpus)

vec=[(0,1),(4,1)]

corpus_tfidf=tfidf[corpus]for doc incorpus_tfidf:print(doc)break#執行一次

#exit()

'''得到比較結果:

[(0, 0.59577906), (1, 0.30794966), (2, 0.0)]

表示和第1句話相似度為59.578%,和第二句話的相似度位30.79%,第三句沒有相似度,

我們看看vec這句話是什么:0為吃,4為東西,所以vec這句話可以是["吃東西"]或者["東西吃"]

而第一句話"我喜歡吃土豆","土豆是個百搭的東西"明顯有相似度,而第三句話"我不喜歡今天霧霾的北京",相似度幾乎為0,至于為什么第一句比第二句更相似,就需要考慮TfIdf document representation和cosine similarity measure了'''

#index = similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=3)#sims =index[tfidf[vec]]#print(list(enumerate(sims)))#報錯待調試

'''回到tfidf轉換,接著訓練LSI模型,假定文檔屬于10個主題,'''lsi= models.LsiModel(corpus_tfidf,id2word=dic,num_topics=10)

lsiout=lsi.print_topics(10)print(lsiout[0])#exit()

'''基于SVD建立的兩個主題模型內容,將文章投影到主題空間中

輸出:

[(0, -0.70861576320682107), (1, 0.1431958007198823)]

[(0, -0.42764142348481798), (1, -0.88527674470703799)]

[(0, -0.66124862582594512), (1, 0.4190711252114323)]

因此第一三兩句和主題一相似,第二句和主題二相似'''corpus_lsi=lsi[corpus_tfidf]for doc incorpus_lsi:print(doc)break

'''LDA

得到的結果每次都變,給一次的輸出:

0.077*吃 + 0.075*北京 + 0.075*霧 + 0.074*今天 + 0.073*不 + 0.072*霾 + 0.070*喜歡 + 0.068*我 + 0.062*的 + 0.061*土豆

0.091*吃 + 0.073*搭 + 0.073*土豆 + 0.073*個 + 0.073*是 + 0.072*百 + 0.071*東西 + 0.066*我 + 0.065*喜歡 + 0.059*霾

[(0, 0.31271095988105352), (1, 0.68728904011894654)]

[(0, 0.19957991735916861), (1, 0.80042008264083142)]

[(0, 0.80940337254233863), (1, 0.19059662745766134)]

第一二句和主題二相似,第三句和主題一相似

結論和LSI不一樣,我估計這和樣本數目太少,區別度不高有關,畢竟讓我來區分把第一句和哪一句分在一個主題,我也不確定'''lda= models.LdaModel(corpus_tfidf, id2word=dic, num_topics=10)

ldaOut=lda.print_topics(10)print(ldaOut[0])print (ldaOut[1])

corpus_lda=lda[corpus_tfidf]for doc incorpus_lda:print(doc)break

'''輸入一句話,查詢屬于LSI得到的哪個主題類型,先建立索引:

輸出:

[(13, 1), (14, 1)]

[(0, 0.50670602027401368), (1, -0.3678056037187441)]

與第一個主題相似'''index=similarities.MatrixSimilarity(lsi[corpus])

query= "客戶"query_bow=dic.doc2bow(list(jieba.cut(query)))print(query_bow)

query_lsi=lsi[query_bow]print(query_lsi)'''比較和第幾句話相似,用LSI得到的索引接著做,并排序輸出

[(0, 0.90161765), (1, -0.10271341), (2, 0.99058259)]

[(2, 0.99058259), (0, 0.90161765), (1, -0.10271341)]

可見和第二句話相似度很高,因為只有第二句話出現了霧霾兩個詞,可是驚訝的是和第一句話的相似度也很高,這得益于LSI模型的算法:在A和C共現,B和C共現的同時,可以找到A和B的相似度'''

總結

以上是生活随笔為你收集整理的结巴分词关键词相似度_gensim和jieba分词进行主题分析,文本相似度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。