今回は、Yahoo が公開しているWebAPI の中から、日本語形態素解析 を利用してみたいと思います。
使用例として、「高橋みなみ」を、苗字と名前の間にスペースを挿入して「高橋 みなみ」と返す関数を作ってみます。
用意するものは、API キーだけです(無償で登録できます)。登録すると、「アプリケーションの管理」ページに API キーが表示されますので、これをコードの中で利用します。下記に示すコードの中の「アプリケーションID」を、登録した API キーに置き換えてください。
さっそく、dna ファイルを記述してみましょう。
(こんな感じ↓)
<DnaLibrary RuntimeVersion="v4.0" Language="CS"> <![CDATA[ using System.Collections.Generic; using System.Text; using System.Xml; using System.Xml.Linq; using System.Net; using ExcelDna.Integration; public static class MA { [ExcelFunction(Name="MAParse")] 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[0]); } else { for (int i = 0; i < str_list.Count; i++) { sb.Append(str_list[i]); if (i < str_list.Count - 1) { sb.Append(" "); } } } return sb.ToString(); } } ]]> </DnaLibrary>
これだけです(笑)
さっそく実行してみましょう♪ (Excel-DNA が初めての方は(その1)をお読みください)
セルA1 に「高橋みなみ」、セルA3 に「=MAParse(A1)」 と入力してみます。
(こんな感じ↓)
「高橋みなみ」さんは、ちゃんと分割されましたね^^ では、「板野友美」さんはどうでしょう?
(こんな感じ↓)
最後に、「上戸彩」さんはどうでしょう?
(こんな感じ↓)
あれ?上戸さんは、うまく分割できなかったようですね^^
そんな時は、大きな名簿でも簡単に抽出して手作業で修正できるように※印を付けるようにしてみました♪
ところで・・・「丙栞」さんは、ちゃんと分割できましたが、これ何と読むのでしょう?PHONETIC 関数ではふり仮名が出ませんね^^ 今日利用した「日本語形態素解析API」 は、読み仮名も返しますので、これを利用して振り仮名を振ることができます(今回は “surface” タグを利用しましたが、”reading” タグで読み仮名が取得できます)。
実装して遊んでみてくださいね^^
では、また(笑)
ダウンロードはこちら⇒ MAParse.zip