gensim 是乙個通過衡量片語(或更高階結構,如整句或文件)模式來挖掘文件語義結構的工具
三大核心概念:文集(語料)–>向量–>模型
from gensim import corpora
import jieba
documents = ['工業網際網路平台的核心技術是什麼',
'工業現場生產過程優化場景有哪些']
def word_cut(doc):
seg = [jieba.lcut(w) for w in doc]
return seg
texts= word_cut(documents)
##為語料庫中出現的所有單詞分配了乙個唯一的整數id
dictionary = corpora.dictionary(texts)
dictionary.token2id
##該函式doc2bow()只計算每個不同單詞的出現次數,將單詞轉換為整數單詞id,並將結果作為稀疏向量返回
bow_corpus = [dictionary.doc2bow(text) for text in texts]
bow_corpus
[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)],
[(2, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (12, 1), (13, 1)]]
每個元組的第一項對應詞典中符號的 id,第二項對應該符號出現的次數。
from gensim import models
# train the model
tfidf = models.tfidfmodel(bow_corpus)
分詞工具
1、python︱六款中文分詞模組嘗試:jieba、thulac、snownlp、pynlpir、corenlp、pyltp
2、hanlp
首先要對句子進行初步處理。本文對文字依次進行了【去空去重、切詞分詞和停用詞過濾】操作。
原始資料會存在一些【空或重複的語句】,須過濾掉這些【無價值且影響效率】的語句。使用計算機自動地對中文文字進行詞語切分的過程稱為中文分詞(chinese word segmentation),即使中文句子中的詞之間有空格標識。若要對乙個句子進行分析,就需要將其切分成詞的序列,然後以詞為單位進行句子的分析,故中文分詞是中文自然語言處理中最基本的乙個環節。
生成分詞列表
1、首先停用詞過濾,返回乙個停用詞表
可以使用中科院的「計算所漢語詞性標記集」以及哈工大停用詞表
def stopwordslist(filepath):
wlst = [w.strip() for w in open(filepath,'r',encoding='utf8').readlines()]
return wlst
2、結巴分詞後的停用詞性 [標點符號、連詞、助詞、副詞、介詞、時語素、『的』、數詞、方位詞、代詞]
stop_flag = ['x', 'c', 'u','d', 'p', 't', 'uj', 'm', 'f', 'r']
對文字集中的文字進行中文分詞,返回分詞列表
def seg_sentence(sentence,stop_words):
sentence_seged = jieba.cut(sentence.strip())
# sentence_seged = set(sentence_seged)
outstr = ''
for word in sentence_seged:
if word not in stop_words:
if word != '\t':
outstr += word
outstr += ' '
return outstr.split(' ')
#1、將【文字集】生產【分詞列表】
texts = [seg_sentence(seg,stop_words) for seg in open(tpath,'r',encoding='utf8').readlines()]
#一、建立詞袋模型
#2、基於檔案集建立【詞典】,並提取詞典特徵數
dictionary = corpora.dictionary(texts)
feature_cnt = len(dictionary.token2id.keys())
#3、基於詞典,將【分詞列表集】轉換為【稀疏向量集】,也就是【語料庫】
corpus = [dictionary.doc2bow(text) for text in texts]
#二、建立tf-idf模型
#4、使用「tf-tdf模型」處理【語料庫】
tfidf = models.tfidfmodel(corpus)
#三構建乙個query文字,利用詞袋模型的字典將其對映到向量空間
#5、同理,用詞典把搜尋詞也轉換為稀疏向量
kw_vector = dictionary.doc2bow(seg_sentence(keyword,stop_words))
#6、對稀疏向量建立索引
index = similarities.sparsematrixsimilarity(tfidf[corpus],num_features=feature_cnt)
#7、相似的計算
sim = index[tfidf[kw_vector]]
全部**:
import jieba
import jieba.posseg as pseg
from gensim import corpora, models, similarities
def stopwordslist(filepath):
wlst = [w.strip() for w in open(filepath, 'r', encoding='utf8').readlines()]
return wlst
def seg_sentence(sentence, stop_words):
# stop_flag = ['x', 'c', 'u', 'd', 'p', 't', 'uj', 'm', 'f', 'r']#過濾數字m
stop_flag = ['x', 'c', 'u', 'd', 'p', 't', 'uj', 'f', 'r']
sentence_seged = pseg.cut(sentence)
# sentence_seged = set(sentence_seged)
outstr =
for word,flag in sentence_seged:
# if word not in stop_words:
if word not in stop_words and flag not in stop_flag:
return outstr
if __name__ == '__main__':
sppath = 'stopwords.txt'
tpath = 'test.txt'
stop_words = stopwordslist(sppath)
keyword = '吃雞'
# 1、將【文字集】生產【分詞列表】
texts = [seg_sentence(seg, stop_words) for seg in open(tpath, 'r', encoding='utf8').readlines()]
orig_txt = [seg for seg in open(tpath, 'r', encoding='utf8').readlines()]
#一、建立詞袋模型
# 2、基於檔案集建立【詞典】,並提取詞典特徵數
dictionary = corpora.dictionary(texts)
feature_cnt = len(dictionary.token2id.keys())
# 3、基於詞典,將【分詞列表集】轉換為【稀疏向量集】,也就是【語料庫】
corpus = [dictionary.doc2bow(text) for text in texts]
# 4、使用「tf-tdf模型」處理【語料庫】
#二、建立tf-idf模型
tfidf = models.tfidfmodel(corpus)
#三構建乙個query文字,利用詞袋模型的字典將其對映到向量空間
# 5、同理,用詞典把搜尋詞也轉換為稀疏向量
kw_vector = dictionary.doc2bow(seg_sentence(keyword, stop_words))
# 6、對稀疏向量建立索引
index = similarities.sparsematrixsimilarity(tfidf[corpus], num_features=feature_cnt)
# 7、相似的計算
sim = index[tfidf[kw_vector]]
result_list =
for i in range(len(sim)):
print('keyword 與 text%d 相似度為:%.2f' % (i + 1, sim[i]))
if sim[i] > 0.4:
print('原始的句子:',result_list)
python文字相似度計算 文字相似度
這種相似度計算方式相對簡單,原理也易於理解,就是計算單詞集合之間的交集和並集大小的比例,該值越大,表示兩個文字越相似。在涉及到大規模平行計算時,該方法效率上有一定的優勢。jaccard 相似度公式 舉例 句子a 我喜歡看電視,不喜歡看電影。句子b 我不喜歡看電視,也不喜歡看電影。分詞去噪後 a 我,...
使用余弦相似度計算文字相似度
1.使用simhash計算文字相似度 2.使用余弦相似度計算文字相似度 3.使用編輯距離計算文字相似度 4.jaccard係數計算文字相似度 余弦相似性 兩個向量的夾角越接近於0,其餘弦值越接近於1,表面兩個向量越相似。向量夾角余弦計算 co s x 1 x2 y1 y2x1 2 y1 2 x2 2...
計算文字相似度 文字相似度演算法之 simhash
文字相似度演算法種類繁多,今天先介紹一種常見的網頁去重演算法simhash。1 什麼是simhash 2 simhash步驟 人工智慧,1 大資料,2 科技,3 網際網路,4 機器學習,5 人工智慧 00101 大資料 11001 科技 00110 網際網路 10101 機器學習 01011 has...