Google SpreadsheetでTinySegmenterを使いたい、かつ、TinySegmenterMakerで作ったモデルを差し替え出来るようにしたい!と思ったらあっさり出来ました。

note記事にミラーを作りました。

こちらにはったgistの整形版のページです。

Google SpreadsheetでTinySegmenterを使いたい、かつ、TinySegmenterMakerで作ったモデルを差し替え出来るようにしたい!と思ったらあっさり出来ました。

TinySegmenter自体を動かす

オリジナルのコードをそのままGoogle Apps Sciptのシートにペタっと張ればOK。なんの工夫も要らない。素晴らしい。

TinySegmenterMakerで作ったモデルを投入しやすくする

  • 作成したモデルを、特定のシートに貼り付けます
    • オリジナルのファイルはタブ文字列で区切りがありますが、この前後がA,B列に分かれるように貼り付けます
    • タブ文字列で分かれていない行(this.BIAS__に代入される値)はA列は空白セル、B列に数値が入るようにします
  • シート、モデルを貼り付けた下に余分な行がないようにします
  • オリジナルのTinySegmenterにあるTinySegmenter()関数の定義を、下記のように置き換えればOK

という感じ。

※このコードのライセンスはオリジナルのTinySegmenterと同じとします。

function TinySegmenter() {
  var patterns = {
    "[一二三四五六七八九十百千万億兆]":"M",
    "[一-龠々〆ヵヶ]":"H",
    "[ぁ-ん]":"I",
    "[ァ-ヴーア-ン゙ー]":"K",
    "[a-zA-Za-zA-Z]":"A",
    "[0-90-9]":"N"
  }
  this.chartype_ = [];
  for (var i in patterns) {
    var regexp = new RegExp;
    regexp.compile(i)
    this.chartype_.push([regexp, patterns[i]]);
  }

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("model_sheet");
  var cells = sheet.getRange("A:B").getValues();

  for(i=0; i<cells.length; i++) {
    if(cells[i][0]=="") {
      this["BIAS__"] = cells[i][1] * 10000;
    } else {
      if(this[cells[i][0].substr(0,3)+"__"]) {
        this[cells[i][0].substr(0,3)+"__"][cells[i][0].substr(4)] = cells[i][1] * 10000;
      } else {
        this[cells[i][0].substr(0,3)+"__"] = {}
        this[cells[i][0].substr(0,3)+"__"][cells[i][0].substr(4)] = cells[i][1] * 10000;
      }
    }
  }

  return this;
}

あっさり。