Python文本相似度识别(附图形化界面)

项目大致简介

计算文本相似度,目前计算文本相似度的算法非常多,比较好的就是马尔可夫链,但是本题采用的是比较简单的ti-if方法,若你有更高的要求直接修改核心算法那一块即可!针对tf-if等算法可以网上搜索非常简单!

功能

  1. 计算一篇文件与一个文件夹下每一个文件的相似度
  2. 计算一个文件下任意两个文件的相似度

结果展示

更多效果请根据下载链接下载整个项目
Python文本相似度识别(附图形化界面)_第1张图片

核心代码展示(下载整个项目 密码:cwj5)

后面有相关结果展示,若要运行,请点击上面链接下载整个项目!下面提供代码只提供自己计算tf-if的代码!

class Quantification:
    """
    @todo:计算TFIDF
    @return:result[[文章1的tfidf],[文章2的tfidf]···]
    @params:term_list{词1:num1,词2:num2···}
            doc_list:文章分词后组成的list[[文章1分词结果,文章2分词结果],···]
    """
    def __init__(self):
        self.tf = pd.DataFrame()
        self.idf = pd.Series()
        self.idIdf = []

    def quantification(self,termList, docList):
        numDocs = len(docList)
        numTerms = len(termList)

        # 先计算tf
        self.tf = pd.DataFrame(
            data=np.zeros(shape=(numDocs, numTerms)), columns=termList
        )
        for idxDoc, doc in enumerate(docList):
            lenDoc = len(doc)
            if lenDoc>0:
                for term in termList:
                    for termDoc in doc:
                        if termDoc == term:
                            self.tf.loc[idxDoc, term] += 1
                self.tf.loc[idxDoc, :] /= lenDoc
            else:
                continue
        # 再计算idf
        self.idf = pd.Series(
            data=np.zeros(shape=(numTerms,)), index=termList
        )
        for term in termList:
            for doc in docList:
                if term in doc:
                    self.idf.loc[term] += 1
        self.idf += 1
        self.idf /= numDocs
        self.idf = - np.log(self.idf)
        idfValue = []
        # 计算tf*idf
        for index in self.idf.index:
            idfValue.append(self.idf.loc[index])
        for index in self.tf.index:
            eachIdIdf = []
            j = 0
            eachTf = self.tf.loc[index].values[0:]
            for i in range(eachTf.size):
                if j < len(idfValue):
                    eachIdIdf.append(eachTf[i] * idfValue[j])  # TF—TDF=tf*tdf
                    j = j + 1
                else:
                    break
            self.idIdf.append(eachIdIdf)

        return self.tf, self.idf, self.idIdf

注意包的问题

如果你使用的是pycharm,如果有的包无法使用pip下载,就在pycharm中下载即可!
Python文本相似度识别(附图形化界面)_第2张图片
如果你有任何问题请随时联系我的邮箱:[email protected]
或者直接在下面评论

你可能感兴趣的:(男,开发,学生,python,nlp)