我正在尝试在c中为vsm搜索编写代码。因此,使用一组文档我构建了一个散列表(inverded index),每个插槽都包含一个单词以及它的df和一个指向列表的指针,其中每个插槽都包含一个文档的名称(其中该单词至少出现一次) )以及tf(在此文件中出现了多少次)。用户将写一个问题(也选择加权qqq.ddd和比较方法,但这对我的问题无关紧要),我必须打印与其相关的文档(从最相关到最不相关)。所以我看到的例子显示了哪些步骤只有一个文档,例如:我们有一个1.000.000文档的集合(N = 1.000.000),我们要比较
1 document: car insurance auto insurance
with the queston: best car insurance
因此在示例中它创建了一个这样的数组:
Term | Query | Document
| tf | tf
auto | 0 | 1
best | 1 | 0
car | 1 | 1
insurance| 1 | 2
该示例还给出了每个术语的df,因此使用这些线索以及加权和比较方法,可以很容易地比较它们,通过找到4个坐标(数组中每个单词1个)将它们转换为矢量。 因此,在此示例中,有1.000.000个文档,并且为了查看文档与查询的相关性,我们在查询和文档中使用的每个单词(4个单词)使用1次。所以我们必须找到4个坐标然后进行比较。 在我想要做的事情中,有8000个文档,每个文档有3到50个单词。那么我想如何比较查询与每个文档的相关程度呢?如果我有
a query: ping pong
document 1: this is ping kong
document 2: i am ping tongue
为了比较查询文档,我将使用单词:这是乒乓乒乓(所以5个坐标)并比较查询文档2我将使用单词:我是ping舌头是kong(6坐标)然后因为我使用相同的比较方法,得分最高的是最相关的?或者我必须使用这两个词:这是ping kong am tongue kong(7坐标)?所以我的问题是,将所有这8000个文件与问题进行比较的正确方法是什么?我希望我成功地使我的问题易于理解。谢谢你的时间!