利用gensim包分析文件相似度
使用jieba進行中文分詞
了解tf-idf模型
python 3.6.0 |anaconda 4.3.1 (64-bit)
jupyter notebook
首先引入分詞api庫jieba、文字相似度庫gensim
import jieba
from gensim import corpora,models,similarities
以下doc0-doc7是幾個最簡單的文件,我們可以稱之為目標文件,本文就是分析doc_test(測試文件)與以上8個文件的相似度。
doc0 = "我不喜歡上海"
doc1 = "上海是乙個好地方"
doc2 = "北京是乙個好地方"
doc3 = "上海好吃的在**"
doc4 = "上海好玩的在**"
doc5 = "上海是好地方"
doc6 = "上海路和上海人"
doc7 = "喜歡小吃"
doc_test="我喜歡上海的小吃"
首先,為了簡化操作,把目標文件放到乙個列表all_doc中。
all_doc =
以下對目標文件進行分詞,並且儲存在列表all_doc_list中
all_doc_list =把分詞後形成的列表顯示出來:for doc in all_doc:
doc_list = [word for word in jieba.cut(doc)]
print(all_doc_list)[[『我』, 『不』, 『喜歡』, 『上海』],
[『上海』, 『是』, 『乙個』, 『好』, 『地方』],
[『北京』, 『是』, 『乙個』, 『好』, 『地方』],
[『上海』, 『好吃』, 『的』, 『在』, 『**』],
[『上海』, 『好玩』, 『的』, 『在』, 『**』],
[『上海』, 『是』, 『好』, 『地方』],
[『上海』, 『路』, 『和』, 『上海』, 『人』],
[『喜歡』, 『小吃』]]
以下把測試文件也進行分詞,並儲存在列表doc_test_list中
doc_test_list = [word for word in jieba.cut(doc_test)]
doc_test_list
[『我』, 『喜歡』, 『上海』, 『的』, 『小吃』]
首先用dictionary方法獲取詞袋(bag-of-words)
dictionary = corpora.dictionary(all_doc_list)
詞袋中用數字對所有詞進行了編號
dictionary.keys()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
編號與詞之間的對應關係
dictionary.token2id
以下使用doc2bow製作語料庫
corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
語料庫如下。語料庫是一組向量,向量中的元素是乙個二元組(編號、頻次數),對應分詞後的文件中的每乙個詞。
[[(0, 1), (1, 1), (2, 1), (3, 1)],
[(0, 1), (4, 1), (5, 1), (6, 1), (7, 1)],
[(4, 1), (5, 1), (6, 1), (7, 1), (8, 1)],
[(0, 1), (9, 1), (10, 1), (11, 1), (12, 1)],
[(0, 1), (9, 1), (10, 1), (12, 1), (13, 1)],
[(0, 1), (5, 1), (6, 1), (7, 1)],
[(0, 2), (14, 1), (15, 1), (16, 1)],
[(2, 1), (17, 1)]]
以下用同樣的方法,把測試文件也轉換為二元組的向量
doc_test_vec = dictionary.doc2bow(doc_test_list)
doc_test_vec
[(0, 1), (2, 1), (3, 1), (12, 1), (17, 1)]
使用tf-idf模型對語料庫建模
tfidf = models.tfidfmodel(corpus)
獲取測試文件中,每個詞的tf-idf值
tfidf[doc_test_vec]
[(0, 0.08112725037593049),
(2, 0.3909393754390612),
(3, 0.5864090631585919),
(12, 0.3909393754390612),
(17, 0.5864090631585919)]
對每個目標文件,分析測試文件的相似度
index = similarities.sparsematrixsimilarity(tfidf[corpus], num_features=len(dictionary.keys()))
sim = index[tfidf[doc_test_vec]]
sim
array([ 0.54680777, 0.01055349, 0. , 0.17724207, 0.17724207,
0.01354522, 0.01279765, 0.70477605], dtype=float32)
根據相似度排序
sorted(enumerate(sim), key=lambda item: -item[1])
[(7, 0.70477605),
(0, 0.54680777),
(3, 0.17724207),
(4, 0.17724207),
(5, 0.013545224),
(6, 0.01279765),
(1, 0.010553493),
(2, 0.0)]
讀取文件
對要計算的多篇文件進行分詞
對文件進行整理成指定格式,方便後續進行計算
計算出詞語的詞頻
【可選】對詞頻低的詞語進行過濾
建立語料庫詞典
載入要對比的文件
將要對比的文件通過doc2bow轉化為詞袋模型
對詞袋模型進行進一步處理,得到新語料庫
將新語料庫通過tfidfmodel進行處理,得到tfidf
通過token2id得到特徵數 12、稀疏矩陣相似度,從而建立索引 13、得到最終相似度結果
用Python進行簡單的文字相似度分析
利用gensim包分析文件相似度 使用jieba進行中文分詞 了解tf idf模型 python 3.6.0 anaconda 4.3.1 64 bit jupyter notebook 首先引入分詞api庫jieba 文字相似度庫gensim import jieba from gensim im...
用Python進行簡單的文字相似度分析
學習目標 1.利用gensim包分析文件相似度 2.使用jieba進行中文分詞 3.了解tf idf模型 環境 python 3.6.0 anaconda 4.3.1 64 bit 工具 jupyter notebook 注 為了簡化問題,本文沒有剔除停用詞 stop word 實際應用中應該剔除停...
文字相關的屬性
一 text decoration屬性 文字樣式 下劃線 刪除線 上刪除線 1.下劃線 underline 我是段落 2.刪除線 line through 我是段落 3.上刪除線 overline 我是段落 4.無 none 我是段落1 我是段落1 效果圖 二 text align屬性 文字水平對齊...