文本相似度计算时需要对文件夹每一个文件分别计算

本人再利用Jaccard计算文本相似度,希望代码可以遍历文件夹中每一篇文章,即得到每一文章与参考文档的相似度,但在遍历文件夹出现问题

import jieba 
import jieba.posseg as psg
import codecs
#将不用拆分的词组载入jieba
jieba.load_userdict("D:\IEdownload\毕设\代码\非拆分.txt")
#定义转化为字符串函数
def standardization(filename):
    data=''
    with open(filename,'r',encoding='utf-8') as f:
        for line in f.readlines():
            line=line.strip('\n')
            data+=line
        return data
#定义jaccard相似度函数
def Jaccard(model,reference):
    terms_reference=jieba.cut(reference)
    terms_model=jieba.cut(model)
    grams_reference=set(terms_reference)
    grams_model=set(terms_model)
    temp=0
    for i in grams_reference:
        if i in grams_model:
            temp=temp+1
    fenmu=len(grams_model)+len(grams_reference)-temp
    jaccard_coefficient=float(temp/fenmu)
    return jaccard_coefficient

#输入参照文档
query="D:\IEdownload\毕设\代码\参考文档.txt"

以下是我目前尝试的 目标文档遍历方法

import os
import re
path = "D:\IEdownload\毕设\新闻数据\保险集团\中国人寿1" #文件夹目录
files= os.listdir(path) #得到文件夹下的所有文件名称
for file in files: #遍历文件夹
    position = path+'\\'+ file #构造绝对路径
    with open(position, "r",encoding='gb18030') as f:    #打开文件
        data = f.read()   #读取文件
        #print("--------------------------")
        #print(data)
        data_new=re.sub('\s','',data)
        n=standardization(data_new)
        print(Jaccard(m,n))

谢谢!!

img

首先standardization(filename)函数,需要传入的的是一个文件路径,如下面代码的filename

def standardization(filename):
    data=''
    with open(filename,'r',encoding='utf-8') as f:
        for line in f.readlines():
            line=line.strip('\n')
            data+=line
        return data

但题主你在这里传的是文件里的数据data_new所以报错了,如下图:

img

所以是什么问题呢?路径不存在还是文件没有遍历完?

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^