Excel-DNA で XLL をつくる(その13)

 今回は、Yahoo が公開しているWebAPI の中から、日本語形態素解析 を利用してみたいと思います。
使用例として、「高橋みなみ」を、苗字と名前の間にスペースを挿入して「高橋 みなみ」と返す関数を作ってみます。

 用意するものは、API キーだけです(無償で登録できます)。登録すると、「アプリケーションの管理」ページに API キーが表示されますので、これをコードの中で利用します。下記に示すコードの中の「アプリケーションID」を、登録した API キーに置き換えてください。

 さっそく、dna ファイルを記述してみましょう。

(こんな感じ↓)

<DnaLibrary RuntimeVersion="v4.0"  Language="CS">
<!&#91;CDATA&#91;

using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Net;
using ExcelDna.Integration;

    public static class MA
    {
        &#91;ExcelFunction(Name="MAParse")&#93;
        public static string MAParse(string target)
        {
            const string ApplicationID = "アプリケーションID";  // API キー
            const string ZIP_URL =
            "http://jlp.yahooapis.jp/MAService/V1/parse?appid=" 
                       + ApplicationID + "&results=ma&sentence=";

            List<string> str_list = new List<string>();
            StringBuilder sb = new StringBuilder();

            var sol = new WebClient().DownloadData(ZIP_URL + target);
            var elm = XElement.Parse(Encoding.UTF8.GetString(sol));

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(elm.ToString());

            foreach (XmlNode item in xml.GetElementsByTagName("surface"))
            {
                str_list.Add(item.InnerText);
            }

            if (str_list.Count == 1)
            {
                sb.Append("※");          // 分割出来なかった場合は ※印を追加する
                sb.Append(str_list&#91;0&#93;);
            }
            else
            {
                for (int i = 0; i < str_list.Count; i++)
                {
                    sb.Append(str_list&#91;i&#93;);
                    if (i < str_list.Count - 1)
                    {
                        sb.Append(" ");
                    }
                }
            }
            return sb.ToString();
        }
    }
&#93;&#93;>
</DnaLibrary>

これだけです(笑)
さっそく実行してみましょう♪ (Excel-DNA が初めての方は(その1)をお読みください)
セルA1 に「高橋みなみ」、セルA3 に「=MAParse(A1)」 と入力してみます。

(こんな感じ↓)

「高橋みなみ」さんは、ちゃんと分割されましたね^^ では、「板野友美」さんはどうでしょう?

(こんな感じ↓)

 最後に、「上戸彩」さんはどうでしょう?

(こんな感じ↓)

 あれ?上戸さんは、うまく分割できなかったようですね^^
そんな時は、大きな名簿でも簡単に抽出して手作業で修正できるように※印を付けるようにしてみました♪

 ところで・・・「丙栞」さんは、ちゃんと分割できましたが、これ何と読むのでしょう?PHONETIC 関数ではふり仮名が出ませんね^^ 今日利用した「日本語形態素解析API」 は、読み仮名も返しますので、これを利用して振り仮名を振ることができます(今回は “surface” タグを利用しましたが、”reading” タグで読み仮名が取得できます)。
実装して遊んでみてくださいね^^

では、また(笑)

ダウンロードはこちら⇒ MAParse.zip

This entry was posted in Excel, .NetFramework and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *