我正在尝试用 c 编写用于 vsm 搜索的代码。因此,使用文档集合,我构建了一个哈希表(倒排索引),其中每个插槽都包含一个单词及其 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
为了比较查询文档1,我将使用这些词:这是 ping kong pong(所以 5 个坐标),为了比较查询文档2,我将使用这些词:我是 ping 舌头是 kong(6 个坐标),然后因为我使用相同的比较方法 得分最高的那个最相关?或者我是否必须同时使用这两个词:这是 ping kong am 舌 kong(7 个坐标)?所以我的问题是将所有这些 8000 个文档与问题进行比较的正确方法是什么?我希望我成功地使我的问题易于理解。感谢您的时间!