気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
実は、現在新たに企画・開発を進めているソフトが有るのですが、そのソフトでは Yahoo APIの「日本語形態素解析」を
利用します。このAPIは日本語の文章を言語要素(意味のある最小単位)に分割してくれます。

このAPIは数あるWeb APIの中でもかなり魅力的で、パワフルなものだと私は思っています。
先日リリースさせて頂いた[Youtubeビューワー]の検索機能でもこれを利用することを検討しています。

そこでこのAPIをC#から利用する方法をTipsとして紹介します。
ソースコードは以下です。


    //解析する文字列はURLエンコードする
    String postString = String.Format("appid={0}&results=uniq&uniq_filter=1|2|4|9|10|11|12&sentence={1}", 
              [アプリケーションID], HttpUtility.UrlEncode([解析する文章]));

    //UTF8でバイト配列にエンコードする
    byte[] postData = Encoding.UTF8.GetBytes(postString);

    //Webリクエストを生成する
    WebRequest webReq = WebRequest.Create("http://jlp.yahooapis.jp/MAService/V1/parse");
    webReq.Method = "POST";
    webReq.ContentType = "application/x-www-form-urlencoded";
    webReq.ContentLength = postData.Length;

    //Postするデータを出力する
    using (Stream writer = webReq.GetRequestStream())
    {
        writer.Write(postData, 0, postData.Length);
    }

    //結果をうけとってDOMオブジェクトにする
    WebResponse webRes = webReq.GetResponse();

    XmlDocument resultXml = new XmlDocument();

    using (StreamReader reader = new StreamReader(webRes.GetResponseStream()))
    {
        resultXml.Load(reader);
    }

    //結果XML中の[word]タグのリストを取得する
    XmlNodeList wordList = resultXml.GetElementsByTagName("word");

    //[word]以下のノードに含まれる内容をコンソールに出力する
    foreach (XmlNode wordNode in wordList)
    {
        foreach (XmlNode resultNode in wordNode.ChildNodes)
        {
            Console.WriteLine("node_name:{0} value:{1}", resultNode.Name, resultNode.InnerText);
        }
    }


このAPIは[形態素解析]と[形態素の出現頻度]を結果として返してくれるのですが、サンプルでは結果を出現頻度に限定するようにパラメータ指定をしています。
HttpリクエストはPOSTで送信しています。GETだと、送信できる文章の文字数がかなり限られてしまうのでPOSTがいいと思います。POSTだと100KBまでOKだそうです。
結果解析にはDOMを使用しています。今回は結果を[形態素の出現頻度]に絞っているのでシンプルですが、両方取得する場合は後もう一ひねりいりますね。

同じくこのAPIを利用を検討している方で、もし参考になりそうだったらうれしいです。

近々このAPIを利用したソフトの内容をブログにアップします。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/14-1fac0d36

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。