如何在lua中创建字符串字典函数? [英] how do you make a string dictionary function in lua?

查看:807
本文介绍了如何在lua中创建字符串字典函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果字符串接近表中的字符串,是否有办法将其替换为表中的字符串?

Is there a way if a string is close to a string in a table it will replace it with the one in the table?

就像一个拼写检查功能一样,它会搜索一个表,如果输入接近表中的一个,它将对其进行修复,那么表中的那个和字符串是相同的吗?

Like a spellcheck function, that searches through a table and if the input is close to one in the table it will fix it , so the one in the table and the string is the same?

推荐答案

您可以使用此代码:)参考代码来自此处:

You can use this code :) Reference code is from here : https://github.com/badarsh2/Algorithm-Implementations/blob/master/Levenshtein_distance/Lua/Yonaba/levenshtein.lua

local function min(a, b, c)
    return math.min(math.min(a, b), c)
end

local function matrix(row,col)
  local m = {}
  for i = 1,row do m[i] = {}
    for j = 1,col do m[i][j] = 0 end
  end
  return m
end

local function lev(strA,strB)
  local M = matrix(#strA+1,#strB+1)
  local i, j, cost
  local row, col = #M, #M[1]
  for i = 1, row do M[i][1] = i - 1 end
  for j = 1, col do M[1][j] = j - 1 end
  for i = 2, row do
    for j = 2, col do
      if (strA:sub(i - 1, i - 1) == strB:sub(j - 1, j - 1)) then cost = 0
      else cost = 1
      end
    M[i][j] = min(M[i-1][j] + 1,M[i][j - 1] + 1,M[i - 1][j - 1] + cost)
    end
  end
  return M[row][col]
end

local refTable = {"hell", "screen"}

local function getClosestWord(pInput, pTable, threesold)
  cDist = -1
  cWord = ""
  for key, val in pairs(pTable) do
    local levRes = lev(pInput, val)
    if levRes < cDist or cDist == -1 then
      cDist = levRes
      cWord = val
    end
  end
  print(cDist)
  if cDist <= threesold then
    return cWord
  else
    return pInput
  end
end

a = getClosestWord("hello", refTable, 3)
b = getClosestWord("screw", refTable, 3)
print(a, b)

第三个参数为三分,如果最小距离大于三分,则不替换单词.

Third parameter is threesold, if min distance is higher than threesold, word is not replaced.

这篇关于如何在lua中创建字符串字典函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆