代码之家  ›  专栏  ›  技术社区  ›  syaz

全文搜索相关性是以什么衡量的?

  •  15
  • syaz  · 技术社区  · 16 年前

    我正在制作一个测验系统,当测验者将问题插入题库时,我将检查数据库中是否有重复/非常相似的问题。

    测试MySQL MATCH() ... AGAINST() ,当我用100%相似的字符串进行测试时,得到的最高相关性是30+。

    那么到底有什么关系呢?引述 manual :

    相关值是非负的浮点数。零相关性意味着没有相似性。相关性是根据行中的单词数、该行中唯一单词的数目、集合中单词的总数以及包含特定单词的文档(行)的数目来计算的。

    我的问题是,如果字符串是重复的,如何测试相关值。如果是100%的副本,请避免将其插入问题库。但如果只是如此相似,提示测验者验证、插入或不插入。那我该怎么做呢?对于100%相同的字符串,30+不是百分比,所以我是树桩。

    事先谢谢。

    3 回复  |  直到 12 年前
        1
  •  5
  •   Dave Sherohman    16 年前

    AndyGeers走上了正确的道路:这些数字除了彼此之间的关系之外没有经验意义,也不能单独用来确定什么是“精确匹配”或什么不是“精确匹配”。你需要自己决定。除了全文搜索排名的局限性之外,还有一个悬而未决的问题,即您认为如何考虑“精确匹配”。(仅限实际文本还是Soundex匹配计数?同义词(例如“沙发”和“沙发”)是匹配还是不同?是否应尝试补偿拼写错误?等)

    如果我需要执行这样的检查,我将只抓取全文搜索返回的排名最高的条目,删除任何指定的停止字,规范化空白,转换为小写,进行比较,并保留它,直到遇到一个要求进一步细化的情况。不是全部 那个 很多额外的工作——如果您指定了应用程序所使用的语言,您可能会在这附近找到一个人,他可以在十几行代码中编写规范化函数。

        2
  •  8
  •   ConcernedOfTunbridgeWells    16 年前

    文本检索系统的基本数据结构是 Inverted Index . 这基本上是文档集合中找到的单词列表,以及它们出现在其中的文档列表。它还可以包含有关每个文档出现次数的元数据,例如单词出现的次数。

    包含单词的文档可以通过在搜索词上进行匹配来查询。为了确定相关性,一种被称为 Cosine Ranking 根据点击量计算。这项工作是通过为n个搜索项分别构造一个分量的n维向量。如果需要,还可以加权搜索词。这个向量在N维空间中给出了一个与搜索项相对应的点。

    基于每个文档中的加权出现的相似向量可以从倒排索引构造,其中每个轴位于与每个搜索项的轴对应的向量中。如果你计算这些向量的点积,你会得到它们之间夹角的余弦。1.0相当于cos(0),假设向量占据原点的公共线。矢量越接近,角度越小,余弦值越接近1.0。

    如果按余弦对搜索结果进行排序(或将它们作为 mg 是的)你得到了最相关的。更聪明的相关算法倾向于调整搜索项的权重,使点积偏向于相关性高的项。

    如果你想挖一点, Managing Gigabytes 通过 Bell Moffet 讨论了文本检索系统的内部结构。

        3
  •  2
  •   andygeers    16 年前

    我不知道您使用的mysql函数的具体内容,但我想可能这些数字没有绝对意义——它们只是设计用来与同一函数产生的其他值进行比较。要检查绝对匹配,可以选择文本本身并手动比较。