美文网首页
工程代码需要做的工作记录

工程代码需要做的工作记录

作者: 曦宝 | 来源:发表于2018-10-11 15:18 被阅读11次

1.遍历一个文件夹下的所有文件

之前的代码里是确定了test文件的个数(要检查相似性排序的文件),指定了文件路径,现在要做的是,不知道文件夹下的文件个数,而且,文件会越来越多。
因为我的编程基础较差,所以一些看起来很简单的操作,对我来说都是未知,因此要做详细的记录,方便后续查询。


image.png

这里是要排序的文件,一共是三个,把keyfile放在别处了。

2.循环读取遍历出来的文件

image.png

3.切词

image.png

4.计算文本相似度

"""
计算文本相似度
"""


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.感想

感觉代码水平还是不行。
所以工程代码还是很简单的。
有的时候能想到但是写不出来,要百度。

相关文章

网友评论

      本文标题:工程代码需要做的工作记录

      本文链接:https://www.haomeiwen.com/subject/awovaftx.html