2012-07-05 2 views
4

설명해 드리겠습니다.매크로를 사용하지 않고도 Excel에서 Levenshtein 거리를 사용할 수 있습니까?

저는 회사에서 약간의 퍼지 매칭을해야합니다. 그래서 ATM은 levenshtein 거리 계산기를 사용하고 두 용어 사이의 유사성 백분율을 계산합니다. 용어가 80 % 이상인 경우 Fuzzymatch는 "TRUE"를 반환합니다.

제 문제는 제가 곧 인턴쉽을 마치고 떠나는 것입니다. 이 작업을 계속할 사람들은 매크로를 사용하여 Excel을 사용하는 방법을 알지 못하며 가능한 한 최선을 다했습니다.

내 질문은 : 그러나 비효율적 인 함수가있을 수 있습니다. 매크로를 사용하지 않고 전에 한 일을 계산할 Excel에서 표준 함수를 만드는 방법이 있습니까?

감사합니다.

+0

글쎄, 소문은 엑셀입니다. 그래서 가능합니다.하지만 실용적이지는 않을 것입니다. 그렇게하는 사람들은 당신이 필요로하는 공식보다 더 좋은 수식을 이해하지 못할 것입니다. 그들을위한 UDF를 만들었습니다 ... – Aprillion

답변

0

Levenshtein 거리 계산에 대한 이전 답변을 보면 수식으로 만들 수 없다고 생각합니다.

코드가 합리적 크기의 문자열을 하나의 공식으로 수행 할 수는 없지만 here

+0

나는 이미 코드를 가지고있다, 고마워. 실제로 나는 여러개를 가지고 있습니다. 왜냐하면 하나를 코딩하고, 링크 된 것을 찾았고, MrExcel 포럼에서 하나를 찾아서 FuzzyVlookup을 추출했기 때문입니다. 나는 그것이 공식으로 사용될 수 있기를 바랄뿐입니다 ... 그렇지 않다면, 나는 다른 방법을 찾아야 할 것입니다. –

2

, 한 번 봐 당신 수있는 워크 시트를 사용하여 문자열 사이의 Levenshtein 거리를 계산하기 만 수식을 사용 .

https://docs.google.com/spreadsheet/ccc?key=0AkZy12yffb5YdFNybkNJaE5hTG9VYkNpdW5ZOWowSFE&usp=sharing

이것은 임시 비교 이외의 실용적 아니지만, 다음은

15 자까지 문자열을 처리 할 수있는 예를 들어, 쉽게 이상 확장 할 수 알고리즘이 어떻게 작동하는지 보여줄 수있는 괜찮은 일을합니다.

2

이 요점에 milot-midia의 코드 주석과 내가 함께이 던진 levenshtein distance google sheets

등이 인터넷 검색을 뭔가에 대해 제공된 경우 (https://gist.github.com/andrei-m/982927 - MIT의 라이센스하에 코드)에 시트에서

  • 헤더 메뉴, Tools ->Script Editor
  • 프로젝트 이름
      ,
    • 기능 (안 프로젝트)는
  • 다음 코드

function Levenshtein(a, b) { 
 
    if(a.length == 0) return b.length; 
 
    if(b.length == 0) return a.length; 
 

 
    // swap to save some memory O(min(a,b)) instead of O(a) 
 
    if(a.length > b.length) { 
 
    var tmp = a; 
 
    a = b; 
 
    b = tmp; 
 
    } 
 

 
    var row = []; 
 
    // init the row 
 
    for(var i = 0; i <= a.length; i++){ 
 
    row[i] = i; 
 
    } 
 

 
    // fill in the rest 
 
    for(var i = 1; i <= b.length; i++){ 
 
    var prev = i; 
 
    for(var j = 1; j <= a.length; j++){ 
 
     var val; 
 
     if(b.charAt(i-1) == a.charAt(j-1)){ 
 
     val = row[j-1]; // match 
 
     } else { 
 
     val = Math.min(row[j-1] + 1, // substitution 
 
         prev + 1,  // insertion 
 
         row[j] + 1); // deletion 
 
     } 
 
     row[j - 1] = prev; 
 
     prev = val; 
 
    } 
 
    row[a.length] = prev; 
 
    } 
 

 
    return row[a.length]; 
 
}
를 붙여 넣습니다 FUNC를 사용하게됩니다의 이름

당신은 그것을 실행할 수 있어야합니다

스프레드 시트에서

=Levenshtein(cell_1,cell_2)

관련 문제