1.遍历一个文件夹下的所有文件
之前的代码里是确定了test文件的个数(要检查相似性排序的文件),指定了文件路径,现在要做的是,不知道文件夹下的文件个数,而且,文件会越来越多。
因为我的编程基础较差,所以一些看起来很简单的操作,对我来说都是未知,因此要做详细的记录,方便后续查询。
image.png
这里是要排序的文件,一共是三个,把keyfile放在别处了。
2.循环读取遍历出来的文件
image.png3.切词
image.png4.计算文本相似度
"""
计算文本相似度
"""
def similarity(keydir, rootdir):
keywords, tests = cutwords(keydir, rootdir)
dictionary = corpora.Dictionary(tests)
feature_cnt = len(dictionary.token2id.keys())
corpus = [dictionary.doc2bow(text) for text in tests]
tfidf = models.TfidfModel(corpus)
kw_vector = dictionary.doc2bow(keywords)
index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=feature_cnt)
sim = index[tfidf[kw_vector]]
# 定义一个字典,key是文件名,value是相似度值
dic = {}
for i in range(len(sim)):
# print('当前工单 与 %s 相似度为:%.2f' % (targetlist[i], sim[i]))
dic[targetlist[i]] = sim[i]
# dic.setdefault(targetlist[i], sim[i])
# print(dic)
# sortlist = sim.sort(reverse=True)
# sorted(dic.items(), key=lambda x: x[1], reverse=True)
# sortdic = {}
sortdic = sorted(dic.items(), key=lambda x: x[1], reverse=True)
# print(sortdic)
# 避免文件个数太少,不够top N
print('相关性排序前%d名为:' % min(N, len(sortdic)))
for k in range(0, min(N, len(sortdic))):
# print('按照相关性排序第 %d 个知识的文件名为 %s' % (k, k))
# print('按照相关性排序第 %d 知识的文件名为 %s' % (k+1, sortdic[k][0]))
print('按照相关性排序第 %d 知识的文件名为 %s 相似度为 %.5f' % (k + 1, sortdic[k][0], sortdic[k][1]))
5.运行结果
image.png我设置的topN是20,可看出来,当文章内容差别较大的时候效果较好,但是差别不是特别大的时候,似乎效果不好。
比如同样是宇宙科普类的文章
宇宙意识信息和月球密码的相似度没有
我的帝王生涯、妻妾成群、兄弟相似度高。
6.感想
感觉代码水平还是不行。
所以工程代码还是很简单的。
有的时候能想到但是写不出来,要百度。
网友评论