文字列がテーブル内の文字列に近い場合は、テーブル内の文字列に置き換えられますか?ルアでどのように文字列辞書関数を作っていますか?
スペルチェック機能と同様に、テーブルを検索します。入力がテーブル内の1に近い場合は修正されますので、テーブル内の文字列と文字列は同じですか?
文字列がテーブル内の文字列に近い場合は、テーブル内の文字列に置き換えられますか?ルアでどのように文字列辞書関数を作っていますか?
スペルチェック機能と同様に、テーブルを検索します。入力がテーブル内の1に近い場合は修正されますので、テーブル内の文字列と文字列は同じですか?
あなたはこのコードを使用することができます:)リファレンスコードをこちらから:第三パラメータがthreesoldさ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)
分の距離がthreesoldよりも高い場合、単語は置き換えられません。
これは私のルアボットの開発を助ける多くのおかげで! –
あなたのボットのために幸運:) – Sygmei
私は遅い学習者です。文字列を扱うことについてです。 –
[編集距離](https://en.wikipedia.org/wiki/Edit_distance) –
を使用して、文字列を辞書のすべての文字列と比較する必要があります。実際には[Jaro-Winkler distance](https://en.wikipedia。 org/wiki/Jaro%E2%80%93Winkler_distance)は、通常より現実的な結果をもたらします。 –