読み仮名アプリ
先日公開された Yahoo の日本語形態素解析 Web サービスを使って読み仮名振りアプリを作ってみました。手抜きだけどね:)
事前準備として、アプリケーションID登録フォームでアプリケーションIDを取る必要があります。Yahoo のアカウントがあれば、ポチっとその場で取れるので楽。下の読み仮名サービスクラスの appid の --- を取ったIDで置き換えてください。
WinForm なプロジェクトを新規作成して、テキストボックス2つとボタン1つを置きます。ボタンの名前は buttonExec にして、テキストボックスは1,2のままで。テキストボックスは1が入力用、2が変換結果の読み仮名表示用です。デザイナでボタンをダブルクリックして buttonExec_Click を生成しておきます。
フォームのコードはこれだけ。
using System; using System.Windows.Forms; namespace Keitaiso { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void buttonExec_Click( object sender, EventArgs e ) { YomiganaService yomigana = new YomiganaService( this.textBox1.Text ); this.textBox2.Text = yomigana.Exec(); } } }
あとは読み仮名サービスクラス。REST は WebClient だけでさらっと書けていいねぇ。POST も書いてみたけどエラーが返ってきてうまく動かなかったので GET のみ公開。
using System; using System.Text; using System.Net; using System.IO; using System.Xml; namespace Keitaiso { public class YomiganaService { // 取得したIDで置き換えてください const string appid = "appid=---"; private string _text; public string Text { get { return this._text; } } private string _yomigana; public string Yomigana { get { return this._yomigana; } } public YomiganaService( string text ) { if ( 50 * 1024 <= text.Length ) throw new ArgumentOutOfRangeException( "text", "長すぎ" ); this._text = text; this._yomigana = ""; } public string Exec() { using ( WebClient wc = new WebClient() ) { const string serviceUrl = "http://api.jlp.yahoo.co.jp/MAService/V1/parse?"; const string separator = "&"; const string results = "results=ma"; const string maResponse = "ma_response=reading"; const string maFilter = "ma_filter=1|2|3|4|5|6|7|8|9|10|11|12|13"; const string request = serviceUrl + appid + separator + results + separator + maResponse + separator + maFilter + separator; string sentence = "sentence=" + this._text; wc.Encoding = Encoding.UTF8; string result = wc.DownloadString( request + sentence ); this._yomigana = Parse( result ); } return this._yomigana; } private string Parse( string xmlText ) { StringBuilder sb = new StringBuilder(); using ( StringReader sr = new StringReader( xmlText ) ) using ( XmlReader reader = XmlReader.Create( sr ) ) { while ( reader.ReadToFollowing( "reading" ) ) { sb.Append( reader.ReadElementString() ); } } return sb.ToString(); } } }
これでできあがり。
MeCab で読み仮名振りをよくやってるんですが、Yahoo も試してみたくて作りました。自分で辞書をいじれないってのはきつい制限だと思うけど、まあ試してみるかと思って。遊んでみてください。
#「十六夜」が「16よる」とか帰ってきたw そんなもんかw