两个文件夹(1 和 2)与文档之间的余弦相似度,并为每个文档(在文件夹 2 中)找到最相关的文档集(在文件夹 2 中)

数据挖掘 Python 文本挖掘
2022-03-16 05:18:48

我有一个名为 iir 的文件夹,它有 500 个 txt 文件。我有另一个名为 video 的 json 文件(具有字典结构)。

我希望计算:对于 500 个 txt 文件中的每一个,找到与所有视频的余弦相似度。在此之后对每个 txt 文件的视频进行排名,并将该排名列表保存在另一个文件中。

到目前为止,我能够阅读所有的 txt 文件。这是代码:

import gensim
import glob
# go to directory
all_files = glob.glob("ExtratingConceptFromVideoScripts/iir/*.txt")
# go to files
indata = tuple()
for filename in all_files:
    with open(filename,'r')as file:
        for line in file.readlines():
            d = line.strip().split( ',' )
            indata = indata +  (d[0], )
print(indata[0])  # print the contents of first file

这是输出:

Online edition (c)2009 Cambridge UP An Introduction to Information Retrieval Draft of April 1       

现在,我阅读了 json 文件的内容:

import gensim
import glob
# go to directory
all_files = glob.glob('ExtratingConceptFromVideoScripts/data/corpus.json')
# go to files
vid = tuple()
for filename in all_files:
    with open(filename,'r')as file:
        for line in file.readlines():
            d = line.strip().split( ',' )
            vid = vid +  (d[:8], )
print(vid)  

输出:

(['{"0": {"metadata": {"id": "fQ3JoXLXxc4"', ' "title": "| Board Questions | 12 Maths | Equivalence Class | Equivalence Class Board Questions |"', ' "tags": ["Board Questions"', ' "12 maths"', ' "12 maths Board Questions"', ' "Previous Year Board Questions"', ' "Maths Board Questions"', ' "Board questions based on Equivalence Classes"'],)

现在,我的问题是:余弦相似度矩阵在一个元组中找到一组文档之间的余弦相似度(即,它找到了 doc iir 中所有文件之间的 cos sim)。如何使用 vid 中的每个文档计算每个 iir 文档的 cos sim。

我试图将 vid json 文件转换为元组,然后计算 iir 和 vid 之间的 cos sim,但它给出了错误。

谁能帮我解释如何在不同格式的文件之间找到 cos sim,如何循环文件和计算 cos sim,如何根据最高 cos sim 对文档进行排名。

1个回答

相似性是在向量空间模型中计算的,主要假设是您要计算相似性的对象对必须使用一些预处理操作在相同的向量空间中表示。

第二个数据集是 JSON。您需要从中提取文本。一种方法:您可以为每个视频使用标题和标签字符串,将其连接到一个字符串以查找每个视频的字符串表示形式。使用任何文本矢量化方法发布。

因此,将视频元数据转换为文本,然后您可以计算相似度。