繁体   English   中英

Python计算两个文件目录的余弦相似度

[英]Python compute cosine similarity on two directories of files

我有两个文件目录。 一个包含人工转录的文件,另一个包含 IBM Watson 转录的文件。 两个目录具有相同数量的文件,并且都从相同的电话录音中转录。

我正在使用匹配文件之间的 SpaCy 的 .similarity 计算余弦相似度,并将结果与​​比较的文件名一起打印或存储。 除了 for 循环之外,我还尝试使用一个函数进行迭代,但找不到在两个目录之间进行迭代的方法,将两个文件与匹配的索引进行比较,然后打印结果。

这是我当前的代码:

# iterate through files in both directories
for human_file, api_file in os.listdir(human_directory), os.listdir(api_directory):
    # set the documents to be compared and parse them through the small spacy nlp model
    human_model = nlp_small(open(human_file).read())
    api_model = nlp_small(open(api_file).read())
    
    # print similarity score with the names of the compared files
    print("Similarity using small model:", human_file, api_file, human_model.similarity(api_model))

我已经让它只迭代一个目录并通过打印文件名检查它是否具有预期的输出,但是在使用两个目录时它不起作用。 我也试过这样的事情:

# define directories
human_directory = os.listdir("./00_data/Human Transcripts")
api_directory = os.listdir("./00_data/Watson Scripts")

# function for cosine similarity of files in two directories using small model
def nlp_small(human_directory, api_directory):
    for i in (0, (len(human_directory) - 1)):
        print(human_directory[i], api_directory[i])

nlp_small(human_directory, api_directory)

返回:

human_10.txt watson_10.csv
human_9.txt watson_9.csv

但这只是其中的两个文件,而不是全部 17 个。

任何关于在两个目录上迭代匹配索引的指针都将不胜感激。

两个小错误阻止你循环。 对于第二个示例,在 for 循环中,您只循环遍历索引 0 和索引 (len(human_directory) - 1))。 相反,你应该for i in range(len(human_directory)):这应该允许你循环遍历两者。

首先,我认为你可能会得到too many values to unpack error 要同时循环遍历两个可迭代对象,请使用 zip(),因此它应该看起来像

for human_file, api_file in zip(os.listdir(human_directory), os.listdir(api_directory)):

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM