Yahoo! Japanの日本語形態素解析Web APIを使う †Yahoo! Japanの日本語形態素解析Web APIは、日本語形態素解析ができるWebサービスです。現在の最新バージョンは、1です。 日本語形態素解析Web APIは、RESTのみに対応しています。GETとPOSTどちらでも可能です。結果はXMLで返されます。なおRESTについては、.NETプログラミング研究 第73号の「RESTを使ったWebサービスにアクセスする」をご覧ください。 日本語形態素解析Web APIを利用するには、様々な制限があります。まず、あらかじめアプリケーションIDを登録しておく必要があります。アプリケーションIDを登録する方法は、「Yahoo!デベロッパーネットワーク ヘルプ - アプリケーションIDとは」にあります。 また、クレジットの表示が義務付けられています。詳しくは、「Yahoo!デベロッパーネットワーク - クレジットの表示」をご覧ください。 さらに、1つのアプリケーションIDにつき24時間以内で50000件のリクエストまでです。また、1つのリクエストのサイズは最大で100KBです。 これらの制限については、ご使用前にかならずご自分でご確認ください。 とりあえず使ってみる †日本語形態素解析Web APIで取得できる結果には、2種類あります。通常の形態素解析の結果と、形態素の出現頻度情報(形態素解析の結果から同一形態素の出現数を求めたもの)の結果です。これらの結果はどちらかだけ取得することも、両方を一度に取得することもできます。なお2つの結果の違いについては、後述します。 まずはとりあえず使ってみましょう。以下の例では、resultsパラメータを"ma"にして、通常の形態素解析の結果のみを取得しています。なお、以下のコードで"<あなたのアプリケーションID>"の部分は必ずご自分のアプリケーションIDに変更してください。
このコードを実行した結果は、以下のようになります。(実際に返されるデータには改行が入りませんが、見やすくするために整形しています。) <?xml version="1.0" encoding="UTF-8" ?> <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"> <ma_result> <total_count>15</total_count> <filtered_count>15</filtered_count> <word_list> <word> <surface>今日</surface> <reading>きょう</reading> <pos>名詞</pos> </word> <word> <surface>は</surface> <reading>は</reading> <pos>助詞</pos> </word> <word> <surface>いい</surface> <reading>いい</reading> <pos>形容詞</pos> </word> <word> <surface>天気</surface> <reading>てんき</reading> <pos>名詞</pos> </word> <word> <surface>です</surface> <reading>です</reading> <pos>助動詞</pos> </word> <word> <surface>。</surface> <reading>。</reading> <pos>特殊</pos> </word> <word> <surface>明日</surface> <reading>あした</reading> <pos>名詞</pos> </word> <word> <surface>も</surface> <reading>も</reading> <pos>助詞</pos> </word> <word> <surface>いい</surface> <reading>いい</reading> <pos>形容詞</pos> </word> <word> <surface>天気</surface> <reading>てんき</reading> <pos>名詞</pos> </word> <word> <surface>に</surface> <reading>に</reading> <pos>助詞</pos> </word> <word> <surface>なる</surface> <reading>なる</reading> <pos>動詞</pos> </word> <word> <surface>でしょ</surface> <reading>でしょ</reading> <pos>助動詞</pos> </word> <word> <surface>う</surface> <reading>う</reading> <pos>助動詞</pos> </word> <word> <surface>。</surface> <reading>。</reading> <pos>特殊</pos> </word> </word_list> </ma_result> </ResultSet> resultsパラメータを"uniq"にして、出現頻度情報の結果のみを取得したときは、以下のような結果が返されます。 <?xml version="1.0" encoding="UTF-8" ?> <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"> <uniq_result> <total_count>15</total_count> <filtered_count>15</filtered_count> <word_list> <word> <count>2</count> <surface>。</surface> <reading/> <pos>特殊</pos> </word> <word> <count>2</count> <surface>いい</surface> <reading/> <pos>形容詞</pos> </word> <word> <count>2</count> <surface>天気</surface> <reading/> <pos>名詞</pos> </word> <word> <count>1</count> <surface>う</surface> <reading/> <pos>助動詞</pos> </word> <word> <count>1</count> <surface>でしょ</surface> <reading/> <pos>助動詞</pos> </word> <word> <count>1</count> <surface>です</surface> <reading/> <pos>助動詞</pos> </word> <word> <count>1</count> <surface>なる</surface> <reading/> <pos>動詞</pos> </word> <word> <count>1</count> <surface>に</surface> <reading/> <pos>助詞</pos> </word> <word> <count>1</count> <surface>は</surface> <reading/> <pos>助詞</pos> </word> <word> <count>1</count> <surface>も</surface> <reading/> <pos>助詞</pos> </word> <word> <count>1</count> <surface>今日</surface> <reading/> <pos>名詞</pos> </word> <word> <count>1</count> <surface>明日</surface> <reading/> <pos>名詞</pos> </word> </word_list> </uniq_result> </ResultSet> さらに、resultsパラメータを"ma,uniq"にして、通常の形態素解析の結果と出現頻度情報の結果の両方を取得したときは、以下のような結果が返されます。 <?xml version="1.0" encoding="UTF-8" ?> <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:jp:jlp" xsi:schemaLocation="urn:yahoo:jp:jlp http://jlp.yahooapis.jp/MAService/V1/parseResponse.xsd"> <ma_result> <total_count>15</total_count> <filtered_count>15</filtered_count> <word_list> <word> <surface>今日</surface> <reading>きょう</reading> <pos>名詞</pos> </word> <word> <surface>は</surface> <reading>は</reading> <pos>助詞</pos> </word> <word> <surface>いい</surface> <reading>いい</reading> <pos>形容詞</pos> </word> <word> <surface>天気</surface> <reading>てんき</reading> <pos>名詞</pos> </word> <word> <surface>です</surface> <reading>です</reading> <pos>助動詞</pos> </word> <word> <surface>。</surface> <reading>。</reading> <pos>特殊</pos> </word> <word> <surface>明日</surface> <reading>あした</reading> <pos>名詞</pos> </word> <word> <surface>も</surface> <reading>も</reading> <pos>助詞</pos> </word> <word> <surface>いい</surface> <reading>いい</reading> <pos>形容詞</pos> </word> <word> <surface>天気</surface> <reading>てんき</reading> <pos>名詞</pos> </word> <word> <surface>に</surface> <reading>に</reading> <pos>助詞</pos> </word> <word> <surface>なる</surface> <reading>なる</reading> <pos>動詞</pos> </word> <word> <surface>でしょ</surface> <reading>でしょ</reading> <pos>助動詞</pos> </word> <word> <surface>う</surface> <reading>う</reading> <pos>助動詞</pos> </word> <word> <surface>。</surface> <reading>。</reading> <pos>特殊</pos> </word> </word_list> </ma_result> <uniq_result> <total_count>15</total_count> <filtered_count>15</filtered_count> <word_list> <word> <count>2</count> <surface>。</surface> <reading/> <pos>特殊</pos> </word> <word> <count>2</count> <surface>いい</surface> <reading/> <pos>形容詞</pos> </word> <word> <count>2</count> <surface>天気</surface> <reading/> <pos>名詞</pos> </word> <word> <count>1</count> <surface>う</surface> <reading/> <pos>助動詞</pos> </word> <word> <count>1</count> <surface>でしょ</surface> <reading/> <pos>助動詞</pos> </word> <word> <count>1</count> <surface>です</surface> <reading/> <pos>助動詞</pos> </word> <word> <count>1</count> <surface>なる</surface> <reading/> <pos>動詞</pos> </word> <word> <count>1</count> <surface>に</surface> <reading/> <pos>助詞</pos> </word> <word> <count>1</count> <surface>は</surface> <reading/> <pos>助詞</pos> </word> <word> <count>1</count> <surface>も</surface> <reading/> <pos>助詞</pos> </word> <word> <count>1</count> <surface>今日</surface> <reading/> <pos>名詞</pos> </word> <word> <count>1</count> <surface>明日</surface> <reading/> <pos>名詞</pos> </word> </word_list> </uniq_result> </ResultSet> 日本語形態素解析Web APIが返す結果の説明 †results=ma の時は、形態素解析の結果がma_resultという要素で返されます。その中にあるtotal_count要素は、形態素の総数を表します。filtered_count要素は、filterリクエストパラメータにマッチした形態素の数を表します。上記の例のようにリクエスト時にfilterを指定しなかったときは、total_countとfiltered_countの数は同じになります。(filterについては、この後のリクエストパラメータの項で説明します。) word_list要素は、形態素のリストを表します。word_list要素内には形態素の数だけword要素が含まれます。 results=ma の時はword_listの形態素の順番が元の文章のままですが、results=uniq の時は、countの多い形態素が上位に行くなど、順番が元の文章とは大きく変わります。 上記の例ではword要素内の要素は3つだけですが、リクエストパラメータによっては、最大で5つになります。results=uniq の時に返されるuniq_result要素では、さらにcount要素が加わり、最大で6つになります。 word要素内に入る可能性がある要素と、その意味を以下に表で説明します。公式サイトの説明を参考にしていますが、そちらに書かれていないことも予想で書いています。
リクエスト時に指定できるパラメータ †以下に、リクエスト時に指定できるパラメータを表にして説明します。この説明も公式サイトの説明を参考にしていますが、そちらに書かれていないことも予想で書いています。
結果を解析して表示する †結果を解析して表示する例を示します。XMLの解析にはXmlDocumentを使用します。ここでは、通常の形態素解析の結果のみを取得しています。 また、以前の例では省略していたresponseパラメータを指定して、形態素のすべての情報を取得しています。
結果は、以下のようになります。 ===== ma_result ===== total_count:15 filtered_count:15 surface:今日 reading:きょう pos:名詞 baseform:今日 feature:名詞,名詞,*,今日,きょう,今日 surface:は reading:は pos:助詞 baseform:は feature:助詞,係助詞,*,は,は,は surface:いい reading:いい pos:形容詞 baseform:いい feature:形容詞,形容,基本形,いい,いい,いい surface:天気 reading:てんき pos:名詞 baseform:天気 feature:名詞,名詞,*,天気,てんき,天気 surface:です reading:です pos:助動詞 baseform:です feature:助動詞,助動詞です,基本形,です,です,です surface:。 reading:。 pos:特殊 baseform:。 feature:特殊,句点,*,。,。,。 surface:明日 reading:あした pos:名詞 baseform:明日 feature:名詞,名詞,*,明日,あした,明日 surface:も reading:も pos:助詞 baseform:も feature:助詞,係助詞,*,も,も,も surface:いい reading:いい pos:形容詞 baseform:いい feature:形容詞,形容,基本形,いい,いい,いい surface:天気 reading:てんき pos:名詞 baseform:天気 feature:名詞,名詞,*,天気,てんき,天気 surface:に reading:に pos:助詞 baseform:に feature:助詞,格助詞,*,に,に,に surface:なる reading:なる pos:動詞 baseform:なる feature:動詞,ラ五,基本形,なる,なる,なる surface:でしょ reading:でしょ pos:助動詞 baseform:です feature:助動詞,助動詞です,未然形,でしょ,でしょ,です surface:う reading:う pos:助動詞 baseform:う feature:助動詞,助動詞,*,う,う,う surface:。 reading:。 pos:特殊 baseform:。 feature:特殊,句点,*,。,。,。 "results=uniq"にして出現頻度情報の結果を取得するコードは、ほとんど上記のコードと同じになりますので紹介しませんが、その時の結果は以下のようになります。 ===== uniq_result ===== total_count:15 filtered_count:15 count:2 surface:。 reading: pos:特殊 baseform:。 feature:特殊,*,*,。,,。 count:2 surface:いい reading: pos:形容詞 baseform:いい feature:形容詞,*,*,いい,,いい count:2 surface:天気 reading: pos:名詞 baseform:天気 feature:名詞,*,*,天気,,天気 count:1 surface:う reading: pos:助動詞 baseform:う feature:助動詞,*,*,う,,う count:1 surface:でしょ reading: pos:助動詞 baseform:です feature:助動詞,*,*,でしょ,,です count:1 surface:です reading: pos:助動詞 baseform:です feature:助動詞,*,*,です,,です count:1 surface:なる reading: pos:動詞 baseform:なる feature:動詞,*,*,なる,,なる count:1 surface:に reading: pos:助詞 baseform:に feature:助詞,*,*,に,,に count:1 surface:は reading: pos:助詞 baseform:は feature:助詞,*,*,は,,は count:1 surface:も reading: pos:助詞 baseform:も feature:助詞,*,*,も,,も count:1 surface:今日 reading: pos:名詞 baseform:今日 feature:名詞,*,*,今日,,今日 count:1 surface:明日 reading: pos:名詞 baseform:明日 feature:名詞,*,*,明日,,明日 最後に †今年の.NETプログラミング研究はこれが最後です。今年一年お付き合いいただきありがとうございました。来年もよろしくお願いいたします。それでは皆様、良いお年を。 コメント †
|