一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python 文本挖掘:使用gensim進(jìn)行文本相似度計(jì)算

 dinghj 2016-06-06

在文本處理中,比如商品評(píng)論挖掘,有時(shí)需要了解每個(gè)評(píng)論分別和商品的描述之間的相似度,以此衡量評(píng)論的客觀性。

評(píng)論和商品描述的相似度越高,說明評(píng)論的用語比較官方,不帶太多感情色彩,比較注重描述商品的屬性和特性,角度更客觀。
那么Python 里面有計(jì)算文本相似度的程序包嗎,恭喜你,不僅有,而且很好很強(qiáng)大。
這是從52nlp大神的博客里面發(fā)現(xiàn)的,其實(shí)具體的處理流程和程序和他的基本一致,只要仔細(xì)研讀他的這幾篇博客文章即可。
(竟然還沒提到程序包的名字,退票。。退票。。)

其實(shí)題目就講到了這個(gè)包的名字啦:gensim
真心好用,誰用誰知道。。。
接下來主要說一下針對(duì)商品評(píng)論和商品描述之間的相似度,怎么使用gensim來計(jì)算。

原理
1、文本相似度計(jì)算的需求始于搜索引擎。
搜索引擎需要計(jì)算“用戶查詢”和爬下來的眾多”網(wǎng)頁“之間的相似度,從而把最相似的排在最前返回給用戶。
2、主要使用的算法是tf-idf
tf:term frequency 詞頻
idf:inverse document frequency 倒文檔頻率
主要思想是:如果某個(gè)詞或短語在一篇文章中出現(xiàn)的頻率高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。
第一步:把每個(gè)網(wǎng)頁文本分詞,成為詞包(bag of words)
第三步:統(tǒng)計(jì)網(wǎng)頁(文檔)總數(shù)M。
第三步:統(tǒng)計(jì)第一個(gè)網(wǎng)頁詞數(shù)N,計(jì)算第一個(gè)網(wǎng)頁第一個(gè)詞在該網(wǎng)頁中出現(xiàn)的次數(shù)n,再找出該詞在所有文檔中出現(xiàn)的次數(shù)m。則該詞的tf-idf 為:n/N * 1/(m/M)  (還有其它的歸一化公式,這里是最基本最直觀的公式)
第四步:重復(fù)第三步,計(jì)算出一個(gè)網(wǎng)頁所有詞的tf-idf 值。
第五步:重復(fù)第四步,計(jì)算出所有網(wǎng)頁每個(gè)詞的tf-idf 值。
3、處理用戶查詢
第一步:對(duì)用戶查詢進(jìn)行分詞。
第二步:根據(jù)網(wǎng)頁庫(文檔)的數(shù)據(jù),計(jì)算用戶查詢中每個(gè)詞的tf-idf 值。
4、相似度的計(jì)算
使用余弦相似度來計(jì)算用戶查詢和每個(gè)網(wǎng)頁之間的夾角。夾角越小,越相似。

實(shí)戰(zhàn)
主要分成三步。
第一步,計(jì)算所有評(píng)論的tf-idf 值。
第二步,使用所有評(píng)論的tf-idf 值算出商品描述的tf-idf 值。
第三步,計(jì)算每一個(gè)評(píng)論和商品描述之間的tf-idf 余弦相似度。

第一步
① 商品評(píng)論的儲(chǔ)存形式(把Excel 中的評(píng)論數(shù)據(jù)分詞并去停用詞存儲(chǔ)在txt 文檔中):
txt 文檔。每條評(píng)論為一行。分詞并去除停用詞。效果如下圖:
Python 文本挖掘:使用gensim進(jìn)行文本相似度計(jì)算 - rzcoding - Explore in Data

② 使用gensim 計(jì)算所有評(píng)論的tf-idf 值

# 讀取txt 文檔中的每條評(píng)論并用itertools 的yield 方法存儲(chǔ)起來(比起把所有數(shù)據(jù)存在數(shù)組中,使用itertools 的內(nèi)存效率高,具體原理請(qǐng)google)

class MyCorpus(object):

def __iter__(self): for line in open(datapath): yield line.split() from gensim import corpora, models, similarities # 以下是把評(píng)論通過gensim 轉(zhuǎn)化為tf-idf 形式,程序具體解釋參見52nlp的博客或gensim官方文檔 Corp = MyCorpus() dictionary = corpora.Dictionary(Corp) corpus = [dictionary.doc2bow(text) for text in Corp] #把所有評(píng)論轉(zhuǎn)化為詞包(bag of words) tfidf = models.TfidfModel(corpus) #使用tf-idf 模型得出該評(píng)論集的tf-idf 模型 corpus_tfidf = tfidf[corpus] #此處已經(jīng)計(jì)算得出所有評(píng)論的tf-idf 值

第二步
① 整個(gè)商品描述只有一行,經(jīng)過分詞和去停用詞處理,得到與上面相似的txt 文檔。只是它只有一行。
② 把商品描述看成是查詢,把商品評(píng)論看成是網(wǎng)頁,即可計(jì)算商品描述的tf-idf 值。

#讀取商品描述的txt 文檔

q_file = open(querypath, 'r') query = q_file.readline() q_file.close()

vec_bow = dictionary.doc2bow(query.split()) #把商品描述轉(zhuǎn)為詞包 vec_tfidf = tfidf[vec_bow] #直接使用上面得出的tf-idf 模型即可得出商品描述的tf-idf 值

第三步
① 計(jì)算相似度,然后寫入txt 文檔中

index = similarities.MatrixSimilarity(corpus_tfidf) #把所有評(píng)論做成索引 sims = index[vec_tfidf] #利用索引計(jì)算每一條評(píng)論和商品描述之間的相似度 similarity = list(sims) #把相似度存儲(chǔ)成數(shù)組,以便寫入txt 文檔 sim_file = open(storepath, 'w') for i in similarity: sim_file.write(str(i)+'\n') #寫入txt 時(shí)不要忘了編碼 sim_file.close()

② 寫入文檔后相似度如圖:
Python 文本挖掘:使用gensim進(jìn)行文本相似度計(jì)算 - rzcoding - Explore in Data
 
最后總的程序如下:

#! /usr/bin/env python2.7 #coding=utf-8

import logging from gensim import corpora, models, similarities

def similarity(datapath, querypath, storepath): logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) class MyCorpus(object): def __iter__(self): for line in open(datapath): yield line.split() Corp = MyCorpus() dictionary = corpora.Dictionary(Corp) corpus = [dictionary.doc2bow(text) for text in Corp] tfidf = models.TfidfModel(corpus) corpus_tfidf = tfidf[corpus] q_file = open(querypath, 'r') query = q_file.readline() q_file.close() vec_bow = dictionary.doc2bow(query.split()) vec_tfidf = tfidf[vec_bow] index = similarities.MatrixSimilarity(corpus_tfidf) sims = index[vec_tfidf] similarity = list(sims) sim_file = open(storepath, 'w') for i in similarity: sim_file.write(str(i)+'\n') sim_file.close()


gensim 包計(jì)算文本相似度基本也是這個(gè)步驟。而且gensim 除了提供了tf-idf 算法之外,還提供了LDA,LSV等更先進(jìn)的方法。請(qǐng)各位客官慢慢享用。。。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲国产性生活高潮免费视频| 欧美精品激情视频一区| 一级欧美一级欧美在线播| 爱草草在线观看免费视频| 久久成人国产欧美精品一区二区 | 俄罗斯胖女人性生活视频| 熟女乱一区二区三区四区| 国产成人精品国产亚洲欧洲| 日韩一区二区三区免费av| 国产精品香蕉在线的人| 中文字幕乱码免费人妻av| 欧美激情一区=区三区| 日韩中文字幕有码午夜美女| 欧美日韩免费观看视频| av在线免费观看在线免费观看| 黄片在线观看一区二区三区| 久久国产精品亚州精品毛片| 国产精品一区二区三区激情| 日本女优一区二区三区免费| 经典欧美熟女激情综合网| 国产高清三级视频在线观看| 国产日韩在线一二三区| 亚洲国产欧美精品久久| 人妻一区二区三区多毛女| 在线免费视频你懂的观看| 日韩精品第一区二区三区| 久久中文字人妻熟女小妇| 日韩精品一区二区毛片| 国产精品日本女优在线观看| 美女黄片大全在线观看| 成年男女午夜久久久精品| 午夜视频成人在线观看| 国产精品久久熟女吞精| 日韩成人中文字幕在线一区| 亚洲一区二区三区四区| 九九热精彩视频在线播放| 亚洲妇女黄色三级视频| 中国一区二区三区不卡| 欧美一级片日韩一级片| 91精品国产品国语在线不卡| 在线日韩欧美国产自拍|