DoboWiki
Top
> .NETプログラミング研究/99 をテンプレートにして作成
.NETプログラミング研究/99 をテンプレートにして作成
開始行:
#title(MeCabのラッパークラスを使用して形態素解析を行う)
#navi(.NETプログラミング研究)
#contents
*MeCabのラッパークラスを使用して形態素解析を行う [#y31a0c...
前回は分かち書きの方法を紹介しましたが、今回は形態素解析...
前回の繰り返しになりますが、形態素解析を行う方法として、...
+形態素解析ツールをインストールして使う
+Webサービスを使う
形態素解析ツールには、[[KAKASHI>http://kakasi.namazu.org/...
Webサービスで形態素解析を行うというのは、具体的には、Yaho...
今回は、MeCabのラッパークラスを実際に試してみます。
**MeCabをインストールする [#x5a99627]
まずはMeCabをインストールして使ってみましょう。「[[Browse...
このパッケージを実行すると、MeCabをインストールすることが...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
早速MeCabを起動してみましょう。すると、DOS窓が表示されま...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
ここに日本語の文章を打ち込み、エンターキーを押すと、形態...
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
この出力フォーマットは、以下のとおりです。
#pre{{
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,...
}}
もし、単語と単語の間にスペースを挿入した文字列(わかち書...
#pre{{
今日 は いい 天気 です 。
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
もし読みだけを出力して欲しいのであれば、「-Oyomi」オプシ...
#pre{{
キョウハイイテンキデス。
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
複数の候補を出力して欲しいのであれば、「-N#NUM」オプショ...
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,...
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
MeCabの説明は、以上としておきます。より詳しくは、MeCabに...
**MeCabのラッパークラスを使用する [#idf8efa1]
私が調べた限りでは、現在公開されているMaCabのラッパークラ...
-[[MeCabSharp - Meteor Factory>http://mf3.dotpp.net/?Soft...
-[[MeCab.NET プロジェクト日本語トップページ - SourceForge...
-[[mecab/cabocha用C#ラッパーライブラリ mutterofstar : Vec...
この内、MeCabSharpとMeCab.NETは、私の環境(Windows 7 32bi...
**mutterofstarを使用する [#b9314e3e]
mutterofstarは[[CaboCha>http://chasen.org/~taku/software/...
***準備 [#o07b3dc9]
mutterofstarは現在[[Vector>http://www.vector.co.jp/soft/w...
mutterofstarをダウンロード後、このライブラリを使用できる...
+mutterofstarを使用したいプロジェクトをVisual Studioで開...
+mutterofstarのパッケージに含まれているmutterofstar.dllを...
+MeCabをインストールしたフォルダのbinフォルダ内にあるlibm...
***簡単な使い方 [#k901581a]
これで準備は整いました。早速コードを書いてみましょう。CMe...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'CMecabオブジェクトの作成
Dim mecab As New mutterofstar.NLP.CMecab()
'150文字以上の文章を解析するときは、MaxLengthプロパティを...
'mecab.MaxLength = 1000
'解析する
If mecab.Analyze(text) Then
'成功したときは、結果を表示する
Console.WriteLine(mecab.ResultString)
Else
'失敗したときは、エラーメッセージを表示する
Console.WriteLine("エラー:" + mecab.Error)
End If
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//CMecabオブジェクトの作成
mutterofstar.NLP.CMecab mecab = new mutterofstar.NLP.CMec...
//150文字以上の文章を解析するときは、MaxLengthプロパティ...
//mecab.MaxLength = 1000;
//解析する
if (mecab.Analyze(text))
{
//成功したときは、結果を表示する
Console.WriteLine(mecab.ResultString);
}
else
{
//失敗したときは、エラーメッセージを表示する
Console.WriteLine("エラー:" + mecab.Error);
}
mecab.Dispose();
}}
このコードを実行したときに出力される結果は、MeCabをパラメ...
もしパラメータを指定してMeCabを起動したときの結果を取得し...
例えば、読みを解析したいのであれば、次のように"-Oyomi"を...
#code(vbnet){{
Dim text As String = "今日はいい天気です。"
'読みを解析する
Dim mecab As New mutterofstar.NLP.CMecab("-Oyomi")
If mecab.Analyze(text) Then
Console.WriteLine(mecab.ResultString)
Else
Console.WriteLine("エラー:" + mecab.Error)
End If
mecab.Dispose()
}}
#code(csharp){{
string text = "今日はいい天気です。";
//読みを解析する
mutterofstar.NLP.CMecab mecab = new mutterofstar.NLP.CMec...
if (mecab.Analyze(text))
{
Console.WriteLine(mecab.ResultString);
}
else
{
Console.WriteLine("エラー:" + mecab.Error);
}
mecab.Dispose();
}}
***出力結果を自動的に解析する [#xd0d6870]
mutterofstarの独特の機能として、MeCabの出力の結果を解析し...
CMecabクラスのAnalyzeメソッドを呼び出すときに、自動的に結...
次の例では、この方法を使って、解析結果の形態素を列挙して...
#code(vbnet){{
Dim text As String = "今日はいい天気ですね。"
Dim mecab As New mutterofstar.NLP.CMecab()
'結果を自動的に解析する
mecab.EnabledResultAnalyze = True
If mecab.Analyze(text) Then
For Each w As mutterofstar.NLP.CWord In mecab.Result....
Console.WriteLine("基本形:{0}", w.Basis)
Console.WriteLine("活用形:{0}", w.InflectedForms)
Console.WriteLine("活用型:{0}", w.InflectedType)
Console.WriteLine("品詞-表記:{0}", w.Pos_String)
Console.WriteLine(" 品詞:{0}", w.Pos(0))
Console.WriteLine(" 品詞細分類1:{0}", w.Pos(1))
Console.WriteLine(" 品詞細分類2:{0}", w.Pos(2))
Console.WriteLine(" 品詞細分類3:{0}", w.Pos(3))
Console.WriteLine("発音:{0}", w.Pronunciation)
Console.WriteLine("読み:{0}", w.Read)
Console.WriteLine("未知語か:{0}", w.Unknown)
Console.WriteLine("表記:{0}", w.Word)
Console.WriteLine("----------------------")
Next
End If
mecab.Dispose()
}}
#code(csharp){{
string text = "今日はいい天気ですね。";
mutterofstar.NLP.CMecab mecab = new mutterofstar.NLP.CMec...
//結果を自動的に解析する
mecab.EnabledResultAnalyze = true;
if (mecab.Analyze(text))
{
foreach (mutterofstar.NLP.CWord w in mecab.Result.Wor...
{
Console.WriteLine("基本形:{0}", w.Basis);
Console.WriteLine("活用形:{0}", w.InflectedForms);
Console.WriteLine("活用型:{0}", w.InflectedType);
Console.WriteLine("品詞-表記:{0}", w.Pos_String);
Console.WriteLine(" 品詞:{0}", w.Pos[0]);
Console.WriteLine(" 品詞細分類1:{0}", w.Pos[1]);
Console.WriteLine(" 品詞細分類2:{0}", w.Pos[2]);
Console.WriteLine(" 品詞細分類3:{0}", w.Pos[3]);
Console.WriteLine("発音:{0}", w.Pronunciation);
Console.WriteLine("読み:{0}", w.Read);
Console.WriteLine("未知語か:{0}", w.Unknown);
Console.WriteLine("表記:{0}", w.Word);
Console.WriteLine("----------------------");
}
}
mecab.Dispose();
}}
mutterofstarの説明は以上です。もっと知りたいという方は、m...
**MeCab.NETを使用する [#i3bf59e4]
MeCab.NETは現在[[SourceForge.JP>http://sourceforge.jp/pro...
前述したとおり、MeCab.NETはそのままでは使用できませんでし...
パッケージに含まれているライブラリのソースではその点は変...
しかしそれでも、私の環境では、サンプルで形態素解析を行お...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
ネットで検索してみると、この問題について、「[[C#でMecabを...
この解決法によりコードを修正するには、_Mecabクラスの
#code(csharp){{
[DllImport("libmecab")]
private static extern string mecab_sparse_tostr(IntPtr pt...
protected string _mecab_sparse_tostr(string str)
{
return mecab_sparse_tostr(this.ptrMecab, str);
}
}}
の部分を
#code(csharp){{
[DllImport("libmecab")]
private static extern IntPtr mecab_sparse_tostr(IntPtr pt...
protected string _mecab_sparse_tostr(string str)
{
IntPtr s = mecab_sparse_tostr(this.ptrMecab, str);
return Marshal.PtrToStringAnsi(s);
}
}}
のように書き換えます。これでVista以降でもエラーを出さずに...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
他のメソッドも同様の問題が生じると思いますので、他のメソ...
補足:上記のような修正をしても、MeCab.NETの「対象のフレー...
***簡単な使い方 [#v712becb]
MeCab.NETを使用した簡単な例を示します。なおmutterofstarと...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'Mecabオブジェクトの作成
Dim mecab As New MecabDotNet.Mecab()
'解析する
Dim result As String = mecab.mecab_sparse_tostr(text)
'結果を表示する
Console.WriteLine(result)
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//Mecabオブジェクトの作成
MecabDotNet.Mecab mecab = new MecabDotNet.Mecab();
//解析する
string result = mecab.mecab_sparse_tostr(text);
//結果を表示する
Console.WriteLine(result);
mecab.Dispose();
}}
**MeCabSharpを使用する [#p8f45551]
[[MeCabSharp>http://mf3.dotpp.net/?Software%2FMeCabSharp]...
MeCabSharpを使うには、mutterofstarの時と同じような準備が...
***コンパイルする [#c06fb32f]
実際にMeCabSharpを使ってみたところ、Visual Studioから実行...
私が行ったコンパイルの手順は以下のとおりです。
+[[Download SWIG>http://www.swig.org/download.html]]から...
+[[MeCabのダウンロードページ>http://sourceforge.net/proje...
+そのフォルダ内にできるswigフォルダ(C:\mecab-0.98\swig)...
+make.batの上の部分を自分の環境に合わせてテキストエディタ...
#pre{{
@echo off
set swig="C:\swigwin\swig.exe"
set prefix=MeCab
set sdk=C:\Program Files\MeCab\sdk
set compiler=cl
set csc=csc
set path=%sdk%;%path%
}}
+コマンドプロンプトを起動し、make.batのあるフォルダ(C:\m...
+vsvars32.batを実行します(「C:\Program Files\Microsoft V...
+コマンドプロンプトで「make mecabcxx」を実行します。する...
+コマンドプロンプトに表示される指示に従って、MeCab_wrap.c...
+コマンドプロンプトで「make mecabdll」を実行します。する...
+コマンドプロンプトで「make mecabcsharp」を実行します。す...
+以上で、「C:\mecab-0.98\swig」に「MeCab.dll」と「MeCabSh...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
***簡単な使い方 [#ha94c3a5]
このように作成されたライブラリの使い方は、MeCabのサイトに...
文章を解析し、結果を文字列として取得するには、Tagger.pars...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'Taggerオブジェクトの作成
Dim mecab As New MeCab.Tagger()
'解析する
Dim result As String = mecab.parse(text)
'結果を表示
Console.WriteLine(result)
'後始末
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//Taggerオブジェクトの作成
MeCab.Tagger mecab = new MeCab.Tagger();
//解析する
string result = mecab.parse(text);
//結果を表示
Console.WriteLine(result);
//後始末
mecab.Dispose();
}}
上の例では、MeCabをパラメータなしで実行した時と同じ結果を...
以下の例では、分かち書きを取得しています。
#code(vbnet){{
Dim text As String = "今日はいい天気です。"
'分かち書きを取得する
Dim mecab As New MeCab.Tagger("-O wakati")
Dim result As String = mecab.parse(text)
Console.WriteLine(result)
mecab.Dispose()
}}
#code(csharp){{
string text = "今日はいい天気です。";
//分かち書きを取得する
MeCab.Tagger mecab = new MeCab.Tagger("-O wakati");
string result = mecab.parse(text);
Console.WriteLine(result);
mecab.Dispose();
}}
***形態素を順番に取得する [#sb4b469b]
Tagger.parseToNodeメソッドを使って解析すると、Nodeオブジ...
Nodeクラスの各プロパティの意味については、「[[スクリプト...
以下に、parseToNodeメソッドを使って、形態素の情報を順番に...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'Taggerオブジェクトの作成
Dim mecab As New MeCab.Tagger()
'形態素をNodeオブジェクトで取得
Dim node As MeCab.Node = mecab.parseToNode(text)
While node IsNot Nothing
Console.WriteLine("形態素の文字列情報:{0}", node.surf...
Console.WriteLine("CSVで表記された素性情報:{0}", node...
Dim fs As String() = node.feature.Split(","c)
Console.WriteLine(" 品詞:{0}", fs(0))
Console.WriteLine(" 品詞細分類1:{0}", fs(1))
Console.WriteLine(" 品詞細分類2:{0}", fs(2))
Console.WriteLine(" 品詞細分類3:{0}", fs(3))
Console.WriteLine(" 活用形:{0}", fs(4))
Console.WriteLine(" 活用型:{0}", fs(5))
Console.WriteLine(" 原型:{0}", fs(6))
If fs.Length > 7 Then
Console.WriteLine(" 読み:{0}", fs(7))
Console.WriteLine(" 発音:{0}", fs(8))
End If
Select Case node.stat
Case 0
Console.WriteLine("形態素種類:通常")
Exit Select
Case 1
Console.WriteLine("形態素種類:未知語")
Exit Select
Case 2
Console.WriteLine("形態素種類:文頭")
Exit Select
Case 3
Console.WriteLine("形態素種類:文末")
Exit Select
End Select
Console.WriteLine("累積コスト:{0}", node.cost)
Console.WriteLine("------------------------")
'次の形態素を取得
node = node.[next]
End While
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//Taggerオブジェクトの作成
MeCab.Tagger mecab = new MeCab.Tagger();
//形態素をNodeオブジェクトで取得
MeCab.Node node = mecab.parseToNode(text);
while (node != null)
{
Console.WriteLine("形態素の文字列情報:{0}", node.surf...
Console.WriteLine("CSVで表記された素性情報:{0}", node...
string[] fs = node.feature.Split(',');
Console.WriteLine(" 品詞:{0}", fs[0]);
Console.WriteLine(" 品詞細分類1:{0}", fs[1]);
Console.WriteLine(" 品詞細分類2:{0}", fs[2]);
Console.WriteLine(" 品詞細分類3:{0}", fs[3]);
Console.WriteLine(" 活用形:{0}", fs[4]);
Console.WriteLine(" 活用型:{0}", fs[5]);
Console.WriteLine(" 原型:{0}", fs[6]);
if (fs.Length > 7)
{
Console.WriteLine(" 読み:{0}", fs[7]);
Console.WriteLine(" 発音:{0}", fs[8]);
}
switch (node.stat)
{
case 0:
Console.WriteLine("形態素種類:通常");
break;
case 1:
Console.WriteLine("形態素種類:未知語");
break;
case 2:
Console.WriteLine("形態素種類:文頭");
break;
case 3:
Console.WriteLine("形態素種類:文末");
break;
}
Console.WriteLine("累積コスト:{0}", node.cost);
Console.WriteLine("------------------------");
//次の形態素を取得
node = node.next;
}
mecab.Dispose();
}}
上のコードを実行すると、次のように出力されます。
#pre{{
形態素の文字列情報:
CSVで表記された素性情報:BOS/EOS,*,*,*,*,*,*,*,*
品詞:BOS/EOS
品詞細分類1:*
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:*
読み:*
発音:*
形態素種類:文頭
累積コスト:0
------------------------
形態素の文字列情報:今日
CSVで表記された素性情報:名詞,副詞可能,*,*,*,*,今日,キョウ...
品詞:名詞
品詞細分類1:副詞可能
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:今日
読み:キョウ
発音:キョー
形態素種類:通常
累積コスト:3947
------------------------
形態素の文字列情報:は
CSVで表記された素性情報:助詞,係助詞,*,*,*,*,は,ハ,ワ
品詞:助詞
品詞細分類1:係助詞
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:は
読み:ハ
発音:ワ
形態素種類:通常
累積コスト:4822
------------------------
形態素の文字列情報:いい
CSVで表記された素性情報:形容詞,自立,*,*,形容詞・イイ,基本...
品詞:形容詞
品詞細分類1:自立
品詞細分類2:*
品詞細分類3:*
活用形:形容詞・イイ
活用型:基本形
原型:いい
読み:イイ
発音:イイ
形態素種類:通常
累積コスト:7936
------------------------
形態素の文字列情報:天気
CSVで表記された素性情報:名詞,一般,*,*,*,*,天気,テンキ,テ...
品詞:名詞
品詞細分類1:一般
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:天気
読み:テンキ
発音:テンキ
形態素種類:通常
累積コスト:10214
------------------------
形態素の文字列情報:です
CSVで表記された素性情報:助動詞,*,*,*,特殊・デス,基本形,で...
品詞:助動詞
品詞細分類1:*
品詞細分類2:*
品詞細分類3:*
活用形:特殊・デス
活用型:基本形
原型:です
読み:デス
発音:デス
形態素種類:通常
累積コスト:11527
------------------------
形態素の文字列情報:。
CSVで表記された素性情報:記号,句点,*,*,*,*,。,。,。
品詞:記号
品詞細分類1:句点
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:。
読み:。
発音:。
形態素種類:通常
累積コスト:8137
------------------------
形態素の文字列情報:
CSVで表記された素性情報:BOS/EOS,*,*,*,*,*,*,*,*
品詞:BOS/EOS
品詞細分類1:*
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:*
読み:*
発音:*
形態素種類:文末
累積コスト:6601
------------------------
}}
このように、はじめに「文頭」という形態素が、そして最後に...
***複数の候補を取得する(N-Best解を取得する) [#a77f8ca3]
MeCabを"-N#NUM"パラメータを指定して実行した時のように、複...
以下の例では、MeCabに「-N3」というパラメータを指定して実...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'"-l 1"オプションを指定してTaggerオブジェクトを作成
Dim mecab As New MeCab.Tagger("-l 1")
'"-N3"と同じ結果を取得する
Console.WriteLine(mecab.parseNBest(3, text))
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//"-l 1"オプションを指定してTaggerオブジェクトを作成
MeCab.Tagger mecab = new MeCab.Tagger("-l 1");
//"-N3"と同じ結果を取得する
Console.WriteLine(mecab.parseNBest(3, text));
mecab.Dispose();
}}
結果は、以下のようになります。
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,...
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
}}
または、parseNBestInitメソッドを呼び出すことにより、next...
下の例では、確からしいものから順番に結果を3つ取得していま...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'"-l 1"オプションを指定してTaggerオブジェクトを作成
Dim mecab As New MeCab.Tagger("-l 1")
'確からしいものから順番に解析結果を得るための初期化をする
If mecab.parseNBestInit(text) Then
'確からしいものから順番に3つ取得する
For i As Integer = 0 To 2
Console.WriteLine(mecab.[next]())
Console.WriteLine("----------------")
Next
End If
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//"-l 1"オプションを指定してTaggerオブジェクトを作成
MeCab.Tagger mecab = new MeCab.Tagger("-l 1");
//確からしいものから順番に解析結果を得るための初期化をする
if (mecab.parseNBestInit(text))
{
//確からしいものから順番に3つ取得する
for (int i = 0; i < 3; i++)
{
Console.WriteLine(mecab.next());
Console.WriteLine("----------------");
}
}
mecab.Dispose();
}}
結果は、以下のようになります。
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
----------------
今日 名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
----------------
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,...
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
----------------
}}
***エラー処理 [#jd0131a4]
MeCab.Taggerのコンストラクタや、解析でエラーが発生したと...
**次回予告 [#j7365965]
今回は以上です。ここで紹介した以外に良い方法(あるいは良...
次回は、Yahoo! Japanの日本語形態素解析Webサービスを使って...
**コメント [#y3456878]
- mutterofstarの作者です.ふと思い出して検索してみたら,...
- 作者様ご自身からコメントをいただき、とてもうれしいです...
- mutterofstarは,ホスティング先の都合で公開サイトがつぶ...
- お返事ありがとうございました。復活された時は、ぜひ教え...
- こちらかな? 自然言語処理支援ライブラリ saezuri lite htt...
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2010-1...
終了行:
#title(MeCabのラッパークラスを使用して形態素解析を行う)
#navi(.NETプログラミング研究)
#contents
*MeCabのラッパークラスを使用して形態素解析を行う [#y31a0c...
前回は分かち書きの方法を紹介しましたが、今回は形態素解析...
前回の繰り返しになりますが、形態素解析を行う方法として、...
+形態素解析ツールをインストールして使う
+Webサービスを使う
形態素解析ツールには、[[KAKASHI>http://kakasi.namazu.org/...
Webサービスで形態素解析を行うというのは、具体的には、Yaho...
今回は、MeCabのラッパークラスを実際に試してみます。
**MeCabをインストールする [#x5a99627]
まずはMeCabをインストールして使ってみましょう。「[[Browse...
このパッケージを実行すると、MeCabをインストールすることが...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
早速MeCabを起動してみましょう。すると、DOS窓が表示されま...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
ここに日本語の文章を打ち込み、エンターキーを押すと、形態...
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
この出力フォーマットは、以下のとおりです。
#pre{{
表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,...
}}
もし、単語と単語の間にスペースを挿入した文字列(わかち書...
#pre{{
今日 は いい 天気 です 。
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
もし読みだけを出力して欲しいのであれば、「-Oyomi」オプシ...
#pre{{
キョウハイイテンキデス。
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
複数の候補を出力して欲しいのであれば、「-N#NUM」オプショ...
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,...
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
}}
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
MeCabの説明は、以上としておきます。より詳しくは、MeCabに...
**MeCabのラッパークラスを使用する [#idf8efa1]
私が調べた限りでは、現在公開されているMaCabのラッパークラ...
-[[MeCabSharp - Meteor Factory>http://mf3.dotpp.net/?Soft...
-[[MeCab.NET プロジェクト日本語トップページ - SourceForge...
-[[mecab/cabocha用C#ラッパーライブラリ mutterofstar : Vec...
この内、MeCabSharpとMeCab.NETは、私の環境(Windows 7 32bi...
**mutterofstarを使用する [#b9314e3e]
mutterofstarは[[CaboCha>http://chasen.org/~taku/software/...
***準備 [#o07b3dc9]
mutterofstarは現在[[Vector>http://www.vector.co.jp/soft/w...
mutterofstarをダウンロード後、このライブラリを使用できる...
+mutterofstarを使用したいプロジェクトをVisual Studioで開...
+mutterofstarのパッケージに含まれているmutterofstar.dllを...
+MeCabをインストールしたフォルダのbinフォルダ内にあるlibm...
***簡単な使い方 [#k901581a]
これで準備は整いました。早速コードを書いてみましょう。CMe...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'CMecabオブジェクトの作成
Dim mecab As New mutterofstar.NLP.CMecab()
'150文字以上の文章を解析するときは、MaxLengthプロパティを...
'mecab.MaxLength = 1000
'解析する
If mecab.Analyze(text) Then
'成功したときは、結果を表示する
Console.WriteLine(mecab.ResultString)
Else
'失敗したときは、エラーメッセージを表示する
Console.WriteLine("エラー:" + mecab.Error)
End If
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//CMecabオブジェクトの作成
mutterofstar.NLP.CMecab mecab = new mutterofstar.NLP.CMec...
//150文字以上の文章を解析するときは、MaxLengthプロパティ...
//mecab.MaxLength = 1000;
//解析する
if (mecab.Analyze(text))
{
//成功したときは、結果を表示する
Console.WriteLine(mecab.ResultString);
}
else
{
//失敗したときは、エラーメッセージを表示する
Console.WriteLine("エラー:" + mecab.Error);
}
mecab.Dispose();
}}
このコードを実行したときに出力される結果は、MeCabをパラメ...
もしパラメータを指定してMeCabを起動したときの結果を取得し...
例えば、読みを解析したいのであれば、次のように"-Oyomi"を...
#code(vbnet){{
Dim text As String = "今日はいい天気です。"
'読みを解析する
Dim mecab As New mutterofstar.NLP.CMecab("-Oyomi")
If mecab.Analyze(text) Then
Console.WriteLine(mecab.ResultString)
Else
Console.WriteLine("エラー:" + mecab.Error)
End If
mecab.Dispose()
}}
#code(csharp){{
string text = "今日はいい天気です。";
//読みを解析する
mutterofstar.NLP.CMecab mecab = new mutterofstar.NLP.CMec...
if (mecab.Analyze(text))
{
Console.WriteLine(mecab.ResultString);
}
else
{
Console.WriteLine("エラー:" + mecab.Error);
}
mecab.Dispose();
}}
***出力結果を自動的に解析する [#xd0d6870]
mutterofstarの独特の機能として、MeCabの出力の結果を解析し...
CMecabクラスのAnalyzeメソッドを呼び出すときに、自動的に結...
次の例では、この方法を使って、解析結果の形態素を列挙して...
#code(vbnet){{
Dim text As String = "今日はいい天気ですね。"
Dim mecab As New mutterofstar.NLP.CMecab()
'結果を自動的に解析する
mecab.EnabledResultAnalyze = True
If mecab.Analyze(text) Then
For Each w As mutterofstar.NLP.CWord In mecab.Result....
Console.WriteLine("基本形:{0}", w.Basis)
Console.WriteLine("活用形:{0}", w.InflectedForms)
Console.WriteLine("活用型:{0}", w.InflectedType)
Console.WriteLine("品詞-表記:{0}", w.Pos_String)
Console.WriteLine(" 品詞:{0}", w.Pos(0))
Console.WriteLine(" 品詞細分類1:{0}", w.Pos(1))
Console.WriteLine(" 品詞細分類2:{0}", w.Pos(2))
Console.WriteLine(" 品詞細分類3:{0}", w.Pos(3))
Console.WriteLine("発音:{0}", w.Pronunciation)
Console.WriteLine("読み:{0}", w.Read)
Console.WriteLine("未知語か:{0}", w.Unknown)
Console.WriteLine("表記:{0}", w.Word)
Console.WriteLine("----------------------")
Next
End If
mecab.Dispose()
}}
#code(csharp){{
string text = "今日はいい天気ですね。";
mutterofstar.NLP.CMecab mecab = new mutterofstar.NLP.CMec...
//結果を自動的に解析する
mecab.EnabledResultAnalyze = true;
if (mecab.Analyze(text))
{
foreach (mutterofstar.NLP.CWord w in mecab.Result.Wor...
{
Console.WriteLine("基本形:{0}", w.Basis);
Console.WriteLine("活用形:{0}", w.InflectedForms);
Console.WriteLine("活用型:{0}", w.InflectedType);
Console.WriteLine("品詞-表記:{0}", w.Pos_String);
Console.WriteLine(" 品詞:{0}", w.Pos[0]);
Console.WriteLine(" 品詞細分類1:{0}", w.Pos[1]);
Console.WriteLine(" 品詞細分類2:{0}", w.Pos[2]);
Console.WriteLine(" 品詞細分類3:{0}", w.Pos[3]);
Console.WriteLine("発音:{0}", w.Pronunciation);
Console.WriteLine("読み:{0}", w.Read);
Console.WriteLine("未知語か:{0}", w.Unknown);
Console.WriteLine("表記:{0}", w.Word);
Console.WriteLine("----------------------");
}
}
mecab.Dispose();
}}
mutterofstarの説明は以上です。もっと知りたいという方は、m...
**MeCab.NETを使用する [#i3bf59e4]
MeCab.NETは現在[[SourceForge.JP>http://sourceforge.jp/pro...
前述したとおり、MeCab.NETはそのままでは使用できませんでし...
パッケージに含まれているライブラリのソースではその点は変...
しかしそれでも、私の環境では、サンプルで形態素解析を行お...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
ネットで検索してみると、この問題について、「[[C#でMecabを...
この解決法によりコードを修正するには、_Mecabクラスの
#code(csharp){{
[DllImport("libmecab")]
private static extern string mecab_sparse_tostr(IntPtr pt...
protected string _mecab_sparse_tostr(string str)
{
return mecab_sparse_tostr(this.ptrMecab, str);
}
}}
の部分を
#code(csharp){{
[DllImport("libmecab")]
private static extern IntPtr mecab_sparse_tostr(IntPtr pt...
protected string _mecab_sparse_tostr(string str)
{
IntPtr s = mecab_sparse_tostr(this.ptrMecab, str);
return Marshal.PtrToStringAnsi(s);
}
}}
のように書き換えます。これでVista以降でもエラーを出さずに...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
他のメソッドも同様の問題が生じると思いますので、他のメソ...
補足:上記のような修正をしても、MeCab.NETの「対象のフレー...
***簡単な使い方 [#v712becb]
MeCab.NETを使用した簡単な例を示します。なおmutterofstarと...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'Mecabオブジェクトの作成
Dim mecab As New MecabDotNet.Mecab()
'解析する
Dim result As String = mecab.mecab_sparse_tostr(text)
'結果を表示する
Console.WriteLine(result)
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//Mecabオブジェクトの作成
MecabDotNet.Mecab mecab = new MecabDotNet.Mecab();
//解析する
string result = mecab.mecab_sparse_tostr(text);
//結果を表示する
Console.WriteLine(result);
mecab.Dispose();
}}
**MeCabSharpを使用する [#p8f45551]
[[MeCabSharp>http://mf3.dotpp.net/?Software%2FMeCabSharp]...
MeCabSharpを使うには、mutterofstarの時と同じような準備が...
***コンパイルする [#c06fb32f]
実際にMeCabSharpを使ってみたところ、Visual Studioから実行...
私が行ったコンパイルの手順は以下のとおりです。
+[[Download SWIG>http://www.swig.org/download.html]]から...
+[[MeCabのダウンロードページ>http://sourceforge.net/proje...
+そのフォルダ内にできるswigフォルダ(C:\mecab-0.98\swig)...
+make.batの上の部分を自分の環境に合わせてテキストエディタ...
#pre{{
@echo off
set swig="C:\swigwin\swig.exe"
set prefix=MeCab
set sdk=C:\Program Files\MeCab\sdk
set compiler=cl
set csc=csc
set path=%sdk%;%path%
}}
+コマンドプロンプトを起動し、make.batのあるフォルダ(C:\m...
+vsvars32.batを実行します(「C:\Program Files\Microsoft V...
+コマンドプロンプトで「make mecabcxx」を実行します。する...
+コマンドプロンプトに表示される指示に従って、MeCab_wrap.c...
+コマンドプロンプトで「make mecabdll」を実行します。する...
+コマンドプロンプトで「make mecabcsharp」を実行します。す...
+以上で、「C:\mecab-0.98\swig」に「MeCab.dll」と「MeCabSh...
#embed(<a href="https://www.flickr.com/photos/dobondotnet...
***簡単な使い方 [#ha94c3a5]
このように作成されたライブラリの使い方は、MeCabのサイトに...
文章を解析し、結果を文字列として取得するには、Tagger.pars...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'Taggerオブジェクトの作成
Dim mecab As New MeCab.Tagger()
'解析する
Dim result As String = mecab.parse(text)
'結果を表示
Console.WriteLine(result)
'後始末
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//Taggerオブジェクトの作成
MeCab.Tagger mecab = new MeCab.Tagger();
//解析する
string result = mecab.parse(text);
//結果を表示
Console.WriteLine(result);
//後始末
mecab.Dispose();
}}
上の例では、MeCabをパラメータなしで実行した時と同じ結果を...
以下の例では、分かち書きを取得しています。
#code(vbnet){{
Dim text As String = "今日はいい天気です。"
'分かち書きを取得する
Dim mecab As New MeCab.Tagger("-O wakati")
Dim result As String = mecab.parse(text)
Console.WriteLine(result)
mecab.Dispose()
}}
#code(csharp){{
string text = "今日はいい天気です。";
//分かち書きを取得する
MeCab.Tagger mecab = new MeCab.Tagger("-O wakati");
string result = mecab.parse(text);
Console.WriteLine(result);
mecab.Dispose();
}}
***形態素を順番に取得する [#sb4b469b]
Tagger.parseToNodeメソッドを使って解析すると、Nodeオブジ...
Nodeクラスの各プロパティの意味については、「[[スクリプト...
以下に、parseToNodeメソッドを使って、形態素の情報を順番に...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'Taggerオブジェクトの作成
Dim mecab As New MeCab.Tagger()
'形態素をNodeオブジェクトで取得
Dim node As MeCab.Node = mecab.parseToNode(text)
While node IsNot Nothing
Console.WriteLine("形態素の文字列情報:{0}", node.surf...
Console.WriteLine("CSVで表記された素性情報:{0}", node...
Dim fs As String() = node.feature.Split(","c)
Console.WriteLine(" 品詞:{0}", fs(0))
Console.WriteLine(" 品詞細分類1:{0}", fs(1))
Console.WriteLine(" 品詞細分類2:{0}", fs(2))
Console.WriteLine(" 品詞細分類3:{0}", fs(3))
Console.WriteLine(" 活用形:{0}", fs(4))
Console.WriteLine(" 活用型:{0}", fs(5))
Console.WriteLine(" 原型:{0}", fs(6))
If fs.Length > 7 Then
Console.WriteLine(" 読み:{0}", fs(7))
Console.WriteLine(" 発音:{0}", fs(8))
End If
Select Case node.stat
Case 0
Console.WriteLine("形態素種類:通常")
Exit Select
Case 1
Console.WriteLine("形態素種類:未知語")
Exit Select
Case 2
Console.WriteLine("形態素種類:文頭")
Exit Select
Case 3
Console.WriteLine("形態素種類:文末")
Exit Select
End Select
Console.WriteLine("累積コスト:{0}", node.cost)
Console.WriteLine("------------------------")
'次の形態素を取得
node = node.[next]
End While
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//Taggerオブジェクトの作成
MeCab.Tagger mecab = new MeCab.Tagger();
//形態素をNodeオブジェクトで取得
MeCab.Node node = mecab.parseToNode(text);
while (node != null)
{
Console.WriteLine("形態素の文字列情報:{0}", node.surf...
Console.WriteLine("CSVで表記された素性情報:{0}", node...
string[] fs = node.feature.Split(',');
Console.WriteLine(" 品詞:{0}", fs[0]);
Console.WriteLine(" 品詞細分類1:{0}", fs[1]);
Console.WriteLine(" 品詞細分類2:{0}", fs[2]);
Console.WriteLine(" 品詞細分類3:{0}", fs[3]);
Console.WriteLine(" 活用形:{0}", fs[4]);
Console.WriteLine(" 活用型:{0}", fs[5]);
Console.WriteLine(" 原型:{0}", fs[6]);
if (fs.Length > 7)
{
Console.WriteLine(" 読み:{0}", fs[7]);
Console.WriteLine(" 発音:{0}", fs[8]);
}
switch (node.stat)
{
case 0:
Console.WriteLine("形態素種類:通常");
break;
case 1:
Console.WriteLine("形態素種類:未知語");
break;
case 2:
Console.WriteLine("形態素種類:文頭");
break;
case 3:
Console.WriteLine("形態素種類:文末");
break;
}
Console.WriteLine("累積コスト:{0}", node.cost);
Console.WriteLine("------------------------");
//次の形態素を取得
node = node.next;
}
mecab.Dispose();
}}
上のコードを実行すると、次のように出力されます。
#pre{{
形態素の文字列情報:
CSVで表記された素性情報:BOS/EOS,*,*,*,*,*,*,*,*
品詞:BOS/EOS
品詞細分類1:*
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:*
読み:*
発音:*
形態素種類:文頭
累積コスト:0
------------------------
形態素の文字列情報:今日
CSVで表記された素性情報:名詞,副詞可能,*,*,*,*,今日,キョウ...
品詞:名詞
品詞細分類1:副詞可能
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:今日
読み:キョウ
発音:キョー
形態素種類:通常
累積コスト:3947
------------------------
形態素の文字列情報:は
CSVで表記された素性情報:助詞,係助詞,*,*,*,*,は,ハ,ワ
品詞:助詞
品詞細分類1:係助詞
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:は
読み:ハ
発音:ワ
形態素種類:通常
累積コスト:4822
------------------------
形態素の文字列情報:いい
CSVで表記された素性情報:形容詞,自立,*,*,形容詞・イイ,基本...
品詞:形容詞
品詞細分類1:自立
品詞細分類2:*
品詞細分類3:*
活用形:形容詞・イイ
活用型:基本形
原型:いい
読み:イイ
発音:イイ
形態素種類:通常
累積コスト:7936
------------------------
形態素の文字列情報:天気
CSVで表記された素性情報:名詞,一般,*,*,*,*,天気,テンキ,テ...
品詞:名詞
品詞細分類1:一般
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:天気
読み:テンキ
発音:テンキ
形態素種類:通常
累積コスト:10214
------------------------
形態素の文字列情報:です
CSVで表記された素性情報:助動詞,*,*,*,特殊・デス,基本形,で...
品詞:助動詞
品詞細分類1:*
品詞細分類2:*
品詞細分類3:*
活用形:特殊・デス
活用型:基本形
原型:です
読み:デス
発音:デス
形態素種類:通常
累積コスト:11527
------------------------
形態素の文字列情報:。
CSVで表記された素性情報:記号,句点,*,*,*,*,。,。,。
品詞:記号
品詞細分類1:句点
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:。
読み:。
発音:。
形態素種類:通常
累積コスト:8137
------------------------
形態素の文字列情報:
CSVで表記された素性情報:BOS/EOS,*,*,*,*,*,*,*,*
品詞:BOS/EOS
品詞細分類1:*
品詞細分類2:*
品詞細分類3:*
活用形:*
活用型:*
原型:*
読み:*
発音:*
形態素種類:文末
累積コスト:6601
------------------------
}}
このように、はじめに「文頭」という形態素が、そして最後に...
***複数の候補を取得する(N-Best解を取得する) [#a77f8ca3]
MeCabを"-N#NUM"パラメータを指定して実行した時のように、複...
以下の例では、MeCabに「-N3」というパラメータを指定して実...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'"-l 1"オプションを指定してTaggerオブジェクトを作成
Dim mecab As New MeCab.Tagger("-l 1")
'"-N3"と同じ結果を取得する
Console.WriteLine(mecab.parseNBest(3, text))
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//"-l 1"オプションを指定してTaggerオブジェクトを作成
MeCab.Tagger mecab = new MeCab.Tagger("-l 1");
//"-N3"と同じ結果を取得する
Console.WriteLine(mecab.parseNBest(3, text));
mecab.Dispose();
}}
結果は、以下のようになります。
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,...
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
}}
または、parseNBestInitメソッドを呼び出すことにより、next...
下の例では、確からしいものから順番に結果を3つ取得していま...
#code(vbnet){{
'形態素解析する文章
Dim text As String = "今日はいい天気です。"
'"-l 1"オプションを指定してTaggerオブジェクトを作成
Dim mecab As New MeCab.Tagger("-l 1")
'確からしいものから順番に解析結果を得るための初期化をする
If mecab.parseNBestInit(text) Then
'確からしいものから順番に3つ取得する
For i As Integer = 0 To 2
Console.WriteLine(mecab.[next]())
Console.WriteLine("----------------")
Next
End If
mecab.Dispose()
}}
#code(csharp){{
//形態素解析する文章
string text = "今日はいい天気です。";
//"-l 1"オプションを指定してTaggerオブジェクトを作成
MeCab.Tagger mecab = new MeCab.Tagger("-l 1");
//確からしいものから順番に解析結果を得るための初期化をする
if (mecab.parseNBestInit(text))
{
//確からしいものから順番に3つ取得する
for (int i = 0; i < 3; i++)
{
Console.WriteLine(mecab.next());
Console.WriteLine("----------------");
}
}
mecab.Dispose();
}}
結果は、以下のようになります。
#pre{{
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
----------------
今日 名詞,副詞可能,*,*,*,*,今日,コンニチ,コンニチ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
----------------
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,...
天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
----------------
}}
***エラー処理 [#jd0131a4]
MeCab.Taggerのコンストラクタや、解析でエラーが発生したと...
**次回予告 [#j7365965]
今回は以上です。ここで紹介した以外に良い方法(あるいは良...
次回は、Yahoo! Japanの日本語形態素解析Webサービスを使って...
**コメント [#y3456878]
- mutterofstarの作者です.ふと思い出して検索してみたら,...
- 作者様ご自身からコメントをいただき、とてもうれしいです...
- mutterofstarは,ホスティング先の都合で公開サイトがつぶ...
- お返事ありがとうございました。復活された時は、ぜひ教え...
- こちらかな? 自然言語処理支援ライブラリ saezuri lite htt...
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2010-1...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]