NMeCabの使い方に付いて記載します。
NMeCabは、形態素解析をするMeCabをライブラリ化したものなので、MeCabと同じような使い方になります。
・NMeCabをインポートします。
メソッド
- Parse
- ParseToNode
- ParseNBest
- ParseNBestToNode
プロパティ
・AllMorphs(該当する全ての形態素を出力)
- true:一致する可能性のある全ての形態素を出力
- false:ベスト解のみ
・LatticeLevel(索性レベルを指定する)
- 0 : 最適解のみが出力可能なレベル(デフォルト、高速)
- 1 : N-best解が出力可能なレベル(中速)
- 2 : ソフトわかち書きが可能なレベル(低速)
・OutPutFormatType(解析結果のフォーマット)
- “lattice”:(デファルト)
- ‘wakati”:分かち書き出力
- “dump”:全情報を出力
- “none” :何もしない
- “em”:?
・Partial(制約付き解析)
- MeCabでは、文章の中の「この部分は名詞として」、「この部分は動詞として」といった指定をした上で解析するはずですが、現在うまく動作しません。
・Theta(係数)
Parseメソッドによる解析
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim text = "庭に鶏が2羽います" Dim tagger = MeCabTagger.Create() TextBox1.Text = tagger.Parse(text) End Sub
実行結果
庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 2 名詞,数,*,*,*,*,2,ニ,ニ 羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ い 動詞,自立,*,*,一段,連用形,いる,イ,イ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス EOS
ParseToNodeメソッドによる解析
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim text = "庭に鶏が2羽います" Dim tagger = MeCabTagger.Create() Dim node = tagger.ParseToNode(text) While (node IsNot Nothing) ListBox1.Items.Add(node.Surface + ControlChars.Tab + node.Feature) node = node.Next End While End Sub
実行結果
庭に鶏が2羽います BOS/EOS,*,*,*,*,*,*,*,* 庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 2 名詞,数,*,*,*,*,2,ニ,ニ 羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ い 動詞,自立,*,*,一段,連用形,いる,イ,イ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
ParseNBestメソッドによる解析
N-Best 解の出力
確からしいものから指定個解析結果を出力 します。
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim text = "庭に鶏が2羽います" Dim tagger = MeCabTagger.Create() tagger.LatticeLevel = NMeCab.MeCabLatticeLevel.One TextBox1.Text = tagger.ParseNBest(2, text) End Sub
・LatticeLevelプロパティをOne、Twoにする必要があります。デファルトはZeroです。
実行結果
庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 2 名詞,数,*,*,*,*,2,ニ,ニ 羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ い 動詞,自立,*,*,一段,連用形,いる,イ,イ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス EOS 庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 2 名詞,数,*,*,*,*,2,ニ,ニ 羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ い 動詞,非自立,*,*,一段,連用形,いる,イ,イ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス EOS
ParseNBestToNodeメソッドによる解析
・このメソッドは通常使うことはないと思われます。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim text = "庭に鶏が2羽います" Dim param As NMeCab.MeCabParam = New NMeCab.MeCabParam() param.LoadDicRC() param.LatticeLevel = NMeCab.MeCabLatticeLevel.One param.OutputFormatType = "lattice" Dim tagger = NMeCab.MeCabTagger.Create(param) Dim os As System.Text.StringBuilder = New System.Text.StringBuilder() Dim writer As NMeCab.Core.Writer = New NMeCab.Core.Writer() writer.OutputFormatType = param.OutputFormatType Dim cnt = 2 '必要な解析結果の個数 For Each node As NMeCab.MeCabNode In tagger.ParseNBestToNode(text) writer.Write(os, node) cnt = cnt - 1 If cnt = 0 Then Exit For Next TextBox1.Text = os.ToString End Sub