문자열이 테이블의 문자열과 가까운 경우 테이블의 문자열로 바꿉니다 방법이 있습니까?루아에서 문자열 사전 함수를 어떻게 만드나요?
맞춤법 검사 기능처럼 테이블을 통해 검색하고 입력이 테이블에서 하나에 가까워지면 수정되므로 테이블과 문자열이 동일합니다.
문자열이 테이블의 문자열과 가까운 경우 테이블의 문자열로 바꿉니다 방법이 있습니까?루아에서 문자열 사전 함수를 어떻게 만드나요?
맞춤법 검사 기능처럼 테이블을 통해 검색하고 입력이 테이블에서 하나에 가까워지면 수정되므로 테이블과 문자열이 동일합니다.
당신이 코드 : 참조 코드를 사용할 수 있습니다 여기에서있다 : 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보다 높은 경우, 단어는 대체되지 않습니다, threesold입니다.
덕분에 내 루아 보트 개발에 많은 도움이 될 것입니다! –
당신의 봇에 대한 행운을 빕니다 :) – Sygmei
죄송합니다. 나는 느린 학습자로서 문자열 처리에 대해 알고 있습니다. –
사용 사전에 모든 문자열로 문자열을 비교해야한다 [편집 거리 (https://en.wikipedia.org/wiki/Edit_distance) –
실제로, [JARO - 윈 클러 거리] (HTTPS : //en.wikipedia. org/wiki/Jaro % E2 % 80 % 93Winkler_distance)는 일반적으로보다 현실적인 결과를 제공합니다. –