8

説明させてください。

私は会社のためにいくつかのファジー マッチングを行う必要があるため、ATM ではレーベンシュタイン距離計算機を使用して、2 つの用語間の類似度のパーセンテージを計算します。用語が 80% 以上類似している場合、Fuzzymatch は "TRUE" を返します。

私の問題は、私がインターンシップに参加していて、すぐに辞めることです。これを続ける人は、Excel とマクロの使い方を知らないので、私ができる限りのことを実装してほしいと思っています。

だから私の質問は次のとおりです。関数がどれほど非効率的であっても、マクロに頼らずに以前に行ったことを計算する標準関数をExcelで作成する方法はありますか?

ありがとう。

4

4 に答える 4

15

あなたがこのグーグルのようなものについて来たなら levenshtein distance google sheets

このgistのmilot-midiaからのコードコメントとともに、これを一緒に投げました( 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];
}

スプレッドシートから実行できるはずです

=Levenshtein(cell_1,cell_2)

于 2016-02-25T18:21:40.377 に答える
2

適度なサイズの文字列に対して単一の数式で実行することはできませんが、ワークシートを使用して文字列間のレーベンシュタイン距離を計算するために数式のみを使用できます。

これは、最大 15 文字の文字列を処理できる例です。これは簡単に拡張できます。

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

これは、アドホックな比較以外には実用的ではありませんが、アルゴリズムがどのように機能するかを示すには適切な仕事をします。

于 2013-06-22T00:11:09.213 に答える
0

レーベンシュタイン距離の計算に対する過去の回答を見ると、式として作成するのは不可能だと思います。

ここでコードを見てください

于 2012-07-05T13:29:08.857 に答える