听起来像在marklogic中搜索

时间:2014-05-17 08:26:15

标签: marklogic

marklogic是否可以选择执行搜索,在文档中查找与查询文本中的条款类似的单词?

我无法找到任何东西。所以我尝试使用spell创建自己的:levenshtein-distance结合cts:tokenize和cts:你可以在这里查看的单词https://github.com/freshie/ml-levenshtein-search/blob/master/levenshtein-distance.xqy

这确实给了我想要的东西但它只是给了我拼写相近的单词。关于如何做的任何想法听起来像搜索?

1 个答案:

答案 0 :(得分:2)

最简单的方法是首先使用cts:words()根据语料库制作可能单词的字典。然后使用spell:suggest-detailed()根据查询文本查找类似的匹配项,限制在一定距离之外。法术扩展算法基于双变音符,它比Levenshtein更好,因为它的语音和你想要的声音不像拼写一样。我发现将限制物限制在25的距离会给你一定程度的模糊效果。

提前:

spell:insert("dictionary.xml", spell:make-dictionary($word-sequence))

然后(用0.9毫升方言):

define function expand-spell($word as xs:string)
  as xs:string*
{
  let $threshold := 25
  let $options := <options xmlns="http://marklogic.com/xdmp/spell">
                    <distance-threshold>{ $threshold }</distance-threshold>
                    <maximum>20</maximum>
                  </options>
  for $suggest in spell:suggest-detailed("dictionary.xml", $word, $options)//spell:word
  order by $suggest/@word-distance
  return string($suggest)
}

我按距离排序,所以我可以在演示中显示扩展,更接近的匹配会在列表中更高。