如何制作自动文本建议系统?

如果用户输入了一个无效的命令,则会返回与用户输入最接近的字符串。

source = {"foo", "foo1"}
Suggest = function (input, source)
--do stuff
end

因此,当用户输入一个未定义的命令“fo”时,它会返回“foo”。如果解释不清楚,很抱歉,现在匆忙。

点赞
用户2733013
用户2733013

你可以使用LevenshteinDamerau-Levenshtein距离函数来寻找最接近输入的命令。这里是一个实现这两个函数的C库。这里是用Lua实现的Levenshtein距离。

下面的函数假定distance是所选距离函数。它使用可选的radius参数来指定从输入到建议的最大距离(如果用户输入的内容非常奇怪,远离任何现有命令,可能不想提供任何建议)。它返回一个建议数组。

function suggest(input, source, radius)
   local result = {}
   local min_distance = radius or math.huge

   for _, command in ipairs(source) do
      local current_distance = distance(input, command)

      if current_distance < min_distance then
         min_distance = current_distance
         result = {command}
      elseif current_distance == min_distance then
         table.insert(result, command)
      end
   end

   return result
end

请注意,此搜索算法效率低下。根据命令数量和搜索速率的不同,它可能是问题或不是问题。

2014-04-04 08:00:33