タイトルの🍊は未完を意味しています.未完とは言えちゃんと動くけどね.改善したバージョンの記事も書いてるので併せてどうぞ.
ひとまず2通りの方法を試しました.1つめは実験で,2つ目は本番って感じかな?ちなみに使ったサービスは読点「、」挿入システムというやつです.京都の龍谷大学という大学のドメインにホストされてるね.
1) ローカル端末で curl
する
このコマンドで上手くいった.
curl -XPOST \ -d 'input_sentence=%A4%BD%A4%A6%A4%C0%A4%EF%A4%EC%A4%EF%A4%EC%A4%CB%A4%CF%A4%C7%A4%AD%A4%EB&enter=%CD%BD%C2%AC' \ http://pumpkin.i.ryukoku.ac.jp/cgi-bin/dokuten_insert/di.cgi \ | nkf -w
…え?何言ってるか分からん?僕もそう思います.ちょっと簡単に図解してみた.

curl
コマンドに-XPOST
オプションを付けて実行してる.このときデータは-d
で渡すことになる- 今回は2つのデータをEUC-JPでURLエンコードして
&
で連結して渡してる- 1つ目は
input_sentence=***
というもの.読点を入れるべき文章 - 2つめは
enter=***
というもの.「予測」という文字列をEUC-JPでURLエンコードしたもの (定数)
- 1つ目は
- エンドポイントは
http://pumpkin.i.ryukoku.ac.jp/cgi-bin/dokuten_insert/di.cgi
- レスポンスの文字コードが EUC-JP なので,
nkf -w
で UTF-8 に変換
上のサンプルコードでは,下のようなEUC-JPでURLエンコード済みテキストをPOSTしてる.内容は「そうだわれわれにはできる」という文字列です.
%A4%BD%A4%A6%A4%C0%A4%EF%A4%EC%A4%EF%A4%EC%A4%CB%A4%CF%A4%C7%A4%AD%A4%EB
「予測」は定数.こうなる.
%CD%BD%C2%AC
これを実行すると,こんなのが返ってくる.
/**** 前略 ****/ <p> 「、」の位置をシステムが推定した結果です。入力文と変換文を比べてください。どうでしょうか? </p> <h3>入力文</h3> <div style="border: 1mm gray solid; padding:5mm;"> そうだわれわれにはできる </div> <h3>変換文</h3> <div style="border: 1mm gray solid; padding:5mm;"> そうだ<font size="5", color="red", style="border: 1mm red solid;">、</font>われわれにはできる </div> /**** 後略 ****/
上手く読点を挿入することができました!この返り値を整形するとこういう出力になる.もっと凝った整形もしたいけど,今回はこんな感じで.
変換文 そうだ、われわれにはできる
2) Google App Script からPOSTする
こんなコードでやってみた.関数の名前がイケてないけど,実装途中ということで許してください…
function sendHttpPost(text){ // Endpoint var url = 'http://pumpkin.i.ryukoku.ac.jp/cgi-bin/dokuten_insert/di.cgi'; // payload を作成 text = EscapeEUCJP(text); var enter = EscapeEUCJP('予測') var payload = ''; payload += 'input_sentence=' + text; payload += '&'; payload += 'enter=' + enter; // options を作る var options = { 'method' : 'post', 'payload' : payload }; // レスポンスの後半だけ残して,タグを取り除いて,1-2行目を消す var res = UrlFetchApp.fetch(url, options).getContentText('EUC-JP'); res = res.split('<h3>')[2]; res = res.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,''); res = res.replace(/^変換文\n\n/,''); return res; }
Javascript では EUC-JP エンコードができないので,ecl.js というライブラリを使ってる.具体的には EscapeEUCJP()
この関数ね.初心者 (僕を含む) のために説明すると,GASでこれを使うには次の2つの作業をすればOK!
- ここからJSコードを全部コピー
- 新しいスクリプトファイルにペースト

最後のテキスト整形を除いた状態で,例えば Logger.log(sendHttpPost('そうだわれわれにはできる'));
とかを実行すると,さっきも上に載せたようなHTMLのテキストデータが出力されます.これを見ると,テキスト整形パートの res = res.split('<h3>')[2];
の意味も分かるでしょ.

上のサンプルコードでは以下のテキスト整形で入力文に純粋に読点を挿入しただけの文章を出力してるね.
-
res.split('<h3>')[2]
で変換後のテキストだけを取り出す -
res.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'')
でHTMLタグを除去 res.replace(/^変換文\n\n/,'')
で1-2行目を削除

もうちょっと長い文章でこの機能を試してみて正しく読点が挿入されるのかを実験してみようと思って意地悪めに長い文章を送りつけみたけどなかなか信頼できるいい結果を返してくれたから結構いい感じだと思います.↓
