Tweet

GASTM: Google Apps Script Text Miner β version

Last update: 2019-12-26
松村 真宏 <>

はじめに

GASTMはGoogleスプレッドシート上でテキストマイニングを実行します。インターネットに繋がっていてChromeが動く環境なら動くと思います(未確認)。形態素解析はGAS (Google Apps Script)を使ってYahoo! JAPANの日本語形態素解析Web APIを呼び出していますが,それ以外はスプレッドシートの関数のみで処理しています。

使い方

  1. GoogleのアカウントとYahoo!JAPANのアカウントを(持っていない人は)作成してください。
  2. アプリケーションIDを登録して,Client IDをメモしてください。
  3. Googleスプレッドシートのメニューの「ツール」からスクリプトエディタを開いて,以下のコードを貼り付けて保存してください。 var appid = "(Client IDを入れて下さい)" のところには,上記で取得したClient IDを入れて下さい。 (「Googleスプレッドシートの機械学習アドオンを日本語で試す」のウェブページを大いに参考にしました)
  4. function yahoo_nlp(text) 
    {
      var appid = "(Client IDを入れて下さい)";
    //  var filter = "1%7C2%7C3%7C4%7C5%7C6%7C7%7C8%7C9%7C10"; // 全ての品詞
      var filter = "1%7C9%7C10"; // 形容詞,名詞,動詞
      var response = "surface,reading,pos,baseform,feature";
      var url = "http://jlp.yahooapis.jp/MAService/V1/parse?appid="+appid+"&response="+response+"&results=ma&sentence="+text+"&filter="+filter;
      var namespace = XmlService.getNamespace("urn:yahoo:jp:jlp");
    
      // APIを呼ぶ
      var xml = UrlFetchApp.fetch(url);
      // XMLをパース
      var document = XmlService.parse(xml.getContentText());
      
      var entries = document.getRootElement();
      var ma_result = entries.getChild("ma_result", namespace);
      var word_list = ma_result.getChild("word_list", namespace);
      var word = word_list.getChildren("word", namespace);
    
      var ret = "";
      for (var i = 0; i < word.length; i++) {
      // スペース区切りで抽出
        ret += word[i].getAllContent()[3].asElement().getText() + "|" + word[i].getAllContent()[2].asElement().getText() + " ";
      }
      return ret;
    }

  5. GoogleスプレッドシートのA列に分析したいテキストデータを貼り付けて下さい。サンプルデータとして「坊っちゃん」の第1章 bocchan1.xlsm を置いておきます。
  6. まず,セルA1のテキストデータを形態素解析するために,セルB1に以下の関数を入れます。
  7. =yahoo_nlp(A1)

    すると以下のように「形態素|品詞」が半角スペース区切りで出力されます。

    セルB1をB2〜B22までコピーすると,全てのテキストデータが形態素解析されます。

  8. B列の形態素解析した結果をいったんまとめるために,セルC1に以下の関数を入れます。
  9. =transpose(split(CONCATENATE(B:B)," "))

  10. C列から重複を削除したインデックスを作成するために,セルD1に以下の関数を入れます。
  11. =unique(C:C)

  12. D列の各インデックスの頻度を出力するために,セルE1に以下の関数を入れます。
  13. =countif(C:C,D1)

    セルE1をE2〜E22までコピーすると,全ての語の頻度が出力されます。

  14. 最後に語を出現頻度順に並び替えるために,セルF1に以下の関数を入れます。
  15. =sort(D:E,2,0)

パラメータの設定について

スクリプト中のfilter変数で品詞を指定しています。上記スクリプトでは filter = "1%7C9%7C10"(filter=1|9|10の意味,|は%7CにURLエンコードされてます)になっているので,形容詞,名詞,動詞を指定しています。ここを書き換えれば品詞を指定できます。

filterに指定可能な品詞番号:
1 : 形容詞
2 : 形容動詞
3 : 感動詞
4 : 副詞
5 : 連体詞
6 : 接続詞
7 : 接頭辞
8 : 接尾辞
9 : 名詞
10 : 動詞
11 : 助詞
12 : 助動詞
13 : 特殊(句読点、カッコ、記号など)

Web APIの利用制限について

GASTMでは,yahoo_nlp()を呼び出すたびに1回リクエストを送っています。リクエストの上限は1つのアプリケーションIDにつき24時間で5万回(詳しくは利用制限をご覧ください)なので,大きなテキストデータを分析する際にはご注意下さい。

その他

コマンドライン原理主義の方はワンライナーで同じことができる OLTM: One-Line-Text-Miner をお使い下さい。

更新履歴