本篇基于TFIDF计算相似度
计算流程:
- 获取文章数据;
- 对文章数据进行预处理操作(分词及去除停用词);
- 创建词典;
- 建立tfidf模型
- 计算相似度
#原始数据【在文件中获取出来的,没有经过处理的文章内容】
with open('./articel.txt','r',encoding='utf-8') as fr:
all_data = fr.readlines()
# 获取停用词
def stopword():
stopwords = [word.strip() for word in
open('./stopword.txt', 'r', encoding='utf-8').readlines()]
return stopwords
# cut_word
def textParse1(line_li):
#re正则
line1 = re.sub(r'[a-zA-Z.【】0-9、。,/!…~\*\n]', '', line_li)
#分词处理
line2 = HanLP.segment(line1)
s = []
for l2 in line2:
s.append(l2.word)
#去除停用词,返回为列表
return [w for w in s if len(w.strip()) > 1 and w not in stopwords]
# 创建词袋
def build_wordbag(cour, data_one):
#cour 是分完词并去除停用词之后的列表,注意是:二维列表!
#data_one 是某篇文章内容分词并去除停用词之后的列表,此列表为一维列表!
cour_list = []
for i in cour:
#判断i的长度是否为0 判断是否相等
if not i == data_one and len(i) != 0:
cour_list.append(i)
else:
continue
# 创建字典,字典中为所有文章的分词词语;格式为{'一体式': 0, '三维': 1, '不失': 2,……}
dictionary = corpora.Dictionary(cour_list)
# 所有文章内容转化成词频的列表;格式为[(438, 1), (439, 1), (440, 1), (441, 1)]
doc_vectors = [dictionary.doc2bow(text) for text in cour_list]
return dictionary, doc_vectors
# 创建tfidf模型
def build_model(doc_vector):
tfidf = models.TfidfModel(doc_vector)
tfidf_vector = tfidf[doc_vector]
return tfidf, tfidf_vector
# data dispose
def data_dispose(dictionary, text):
#text:为某一篇文章的词频数据,可以认为是除文档外的文章数据,也可认为是文件中的某一条数据(前提是 看你跟谁进行相似度计算;如果是跟文件中的数据进行计算,那么text应该为文件中某一篇文章的词频数据)
query_bow = dictionary.doc2bow(text)
# 根据之前训练生成的model,生成query的IFIDF值,然后进行相似度计算
return query_bow
'''
直接调用上述操作!!!!!!!!!!
处理完之后之后!
之后↓↓↓↓↓↓↓↓↓↓↓↓↓执行下面的步骤!
'''
# 创建tfidf模型
tfidf, tfidf_vector = build_model(doc_vectors)
# 根据之前训练生成的model,生成query的IFIDF值,然后进行相似度计算
test_corpus_tfidf = tfidf[query_bow]
# 相似度查询
similarity = similarities.Similarity('Similarity-tfidf-index', tfidf_vector, num_features=len(dictionary))
'''
num_features参数,可以自己设置数字,但在底层源码里表示这个参数的具体数字是字典的长度。
'''
# 返回前5个相似值
similarity.num_best = 5
# 返回最相似的样本材料,(index_of_document, similarity)
sim_data = similarity[test_corpus_tfidf]
print(sim_data)
#所调用的库
import logging
import re
from gensim import corpora, models, similarities
from pyhanlp import HanLP
模块流程!
希望可以帮助到正在看的你哦~