昨日は misima 旧字・旧仮名遣い変換 RESTful Web Service サーバの実装について記した。今日はクライアントを書いてみよう。サーバアプリを書くのに使用した Apache-
REST::Client モジュール
端末で以下のように REST::Client モジュールをインストールしておく。
$ sudo cpan -i REST::Client
RESTful Perl クライアント・コード
端末から操作するコマンド misimaRestClient.
#!/usr/bin/perl -w
# -*- coding: utf-8; mode: cperl; -*-
# misima RESTful Web Service Client
# 2014(c) isao yasuda, All Rights Reserved.
use strict;
use REST::Client; # RESTful Web Service Client
use Getopt::Std; # コマンドライン引数処理
use File::Basename; # ファイル名の取得
# コマンドライン・オプション・チェック (see usage)
my %opts = ('s'=>'0', 'y'=>0, 'k'=>0, 't'=>0, 'i'=>0, 'n'=>0, 'l'=>0);
# オプション
Getopt::Std::getopts('s:yktnil', \%opts) || usage();
# 旧字オプション
usage() unless ($opts{'s'} =~ m/[cjhua]/);
# 処理対象データ
my $copt = ""; # misimaオプション
foreach my $key (keys(%opts)) {
if ($opts{$key}) {
if ($key eq 's') { $copt .= '-s ' . $opts{$key} . ' '; }
else { $copt .= '-' . $key . ' '; }
}
}
($copt) || die "No options specified.\n";
my $ucde = "noxinsomniae201402"; # ユーザコード
my $itxt; # 変換対象テキスト
$itxt .= $_ while (<STDIN>); # 標準入力を蓄積
($itxt) || die "No texts\n";
# 送信XML組立
my $pxml = '<?xml version="1.0" encoding="UTF-8"?>' .
'<misimaRESTful><misimaParam>' . $copt . ' -q</misimaParam>' .
'<misimaTarget>' . $itxt . '</misimaTarget>' .
'<misimaUsercode>' . $ucde . '</misimaUsercode></misimaRESTful>';
# RESTful post
my $host = 'http://yasuda.homeip.net:8080';
my $url = '/misimaRest/misima/convert';
my $client = REST::Client->new({host=>$host});
$client->request('POST', $url, $pxml, {'Content-Type'=>'text/xml'});
if ($client->responseCode() eq '200') {
print $client->responseContent();
} else {
print STDERR "Error occured: ", $client->responseCode(), "\n";
}
# Usage
sub usage {
my $prog = basename($0);
die <<"EOM";
Usage: $prog [-k|-y|-i|-t|-n|-l|-s {c|h|u|a}]
-k: 旧仮名遣い変換 -y: 用語用字変換 -i: 繰返符号変換 -t: 単純変換
-n: かな反転 -l: 簡体字to繁体字
-s: 旧字変換 (-s x として x に以下いずれか指定する)
c UTF-8 文字; h HTML数値参照; u TeX \\UTF; a TeX \\CID;
EOM
}
上記の 39-48 行目が REST::Client 関連処理である。
試験
変換実行の操作イメージは以下のとおりである。
$ cat test.txt 森鴎外はこう言い,内田百間を団扇であおいだ。 僕は黙っています。 $ misimaRestClient.pl -kyit -s c < test.txt 森鷗外はかう言ひ,內田百閒を團扇であふいだ。 僕は默つてゐます。
GNU Emacs からの利用
misimaRestClient.
;;; misimaws.el (defvar misimaws-path "/usr/local/bin/misimaRestClient.pl" "Path for misimaws. Default: /usr/local/bin/misimaRestClient.pl") (set-default-coding-systems 'utf-8) (defun misimaws-region (start end) "Replace UTF-8 characters of specified region to old orthography.(UCS)" (interactive "r") (call-process-region start end misimaws-path t (list t nil) nil "-ykit" "-s" "c") ) (provide 'misimaws)
そして,.emacs 初期設定ファイルに以下を記述して,Emacs に評価させる(再起動してもよい)。
;; misima RESTful Web Service Client (require 'misimaws) (setq misimaws-path "~/bin/misimaRestClient.pl")
GNU Emacs の編集バッファで,変換したいテキスト・リージョンを選択し,

GNU Emacs 変換前

GNU Emacs 変換後
misimaRESTful Web Service はそのうち限定公開とするので,悪しからずご了承ください。
参考文献
[ 2015/02/02 付記 ]
misima RESTful Web Service は 2014/12 より友人のためだけの限定公開といたしました。上記ユーザ認証コードでは動作しません。
Emacs から misima RESTful Web Service を使うのなら,本記事の Perl クライアントを使うよりも Emacs-lisp だけで実装したものをお勧めする。本ブログ記事『misima RESTful Web Service for GNU Emacs, LaTeX』を参照いただきたい。

