static void UseSoftWakachi() { Console.WriteLine("----------------------------------------------------------------------"); Console.WriteLine("Example of using Soft-Wakachi :"); Console.WriteLine(); using (var tagger = NMeCabIpaDic.CreateTagger()) { var theta = 1f / 800f / 2f; // 温度パラメータ var nodes = tagger.ParseSoftWakachi("本部長", theta); // ソフトわかち解を取得 foreach (var node in nodes.Where(n => n.Prob > 0.1f)) // 周辺確率>0.1の形態素ノードだけを処理 { Console.WriteLine($"表層形 :{node.Surface}"); Console.WriteLine($"読み :{node.Reading}"); Console.WriteLine($"品詞 :{node.PartsOfSpeech}"); Console.WriteLine($"周辺確率:{node.Prob}"); Console.WriteLine(); } // さらに、周辺確率の上位から表層形の異なるものの5件までを取得 var searchWords = nodes.OrderByDescending(n => n.Prob) .Select(n => n.Surface) .Distinct() .Take(5); Console.WriteLine($"上位ワード:{string.Join(",", searchWords)}"); } }
public MainWindow() { InitializeComponent(); try { var started = DateTime.UtcNow; Tagger = NMeCabIpaDic.CreateTagger(); ElapsedTime.DataContext = DateTime.UtcNow - started; OutputGrid.ItemsSource = new MeCabIpaDicNode[0]; // to initialize the DataGrid column header } catch (Exception exception) { MessageBox.Show(exception.ToString(), "Exception"); throw; } }
static void UseNotBeAwareOfDictionaly() { Console.WriteLine("----------------------------------------------------------------------"); Console.WriteLine("Example of using not be aware of dictionary :"); Console.WriteLine(); using (var tagger = NMeCabIpaDic.CreateTagger()) // Taggerインスタンスを生成 { var nodes = tagger.Parse("皇帝の新しい心"); // 形態素解析を実行 foreach (var node in nodes) // 形態素ノード配列を順に処理 { Console.WriteLine($"表層形:{node.Surface}"); Console.WriteLine($"読み :{node.Reading}"); Console.WriteLine($"品詞 :{node.PartsOfSpeech}"); Console.WriteLine(); } } }
static void UseNBest() { Console.WriteLine("----------------------------------------------------------------------"); Console.WriteLine("Example of using N-Best :"); Console.WriteLine(); using (var tagger = NMeCabIpaDic.CreateTagger()) { var results = tagger.ParseNBest("東京大学"); // Nベスト解を取得 foreach (var nodes in results.Take(5)) // 上位から5件までの解を処理 { foreach (var node in nodes) // 形態素ノード配列を順に処理 { Console.WriteLine($"表層形:{node.Surface}"); Console.WriteLine($"読み :{node.Reading}"); Console.WriteLine($"品詞 :{node.PartsOfSpeech}"); Console.WriteLine(); } Console.WriteLine("----------------"); } } }
static void UseLattice() { Console.WriteLine("----------------------------------------------------------------------"); Console.WriteLine("Example of using Lattice :"); Console.WriteLine(); using (var tagger = NMeCabIpaDic.CreateTagger()) { var prm = new MeCabParam() { LatticeLevel = MeCabLatticeLevel.Two, Theta = 1f / 800f / 2f }; var lattice = tagger.ParseToLattice("東京大学", prm); // ラティスを取得 // ラティスから、ベスト解を取得し処理 foreach (var node in lattice.GetBestNodes()) { Console.Write(node.Surface); Console.CursorLeft = 10; Console.Write(node.Feature); Console.WriteLine(); } Console.WriteLine("--------"); // ラティスから、2番目と3番目のベスト解を取得し処理 foreach (var result in lattice.GetNBestResults().Skip(1).Take(2)) { foreach (var node in result) { Console.Write(node.Surface); Console.CursorLeft = 10; Console.Write(node.Feature); Console.WriteLine(); } Console.WriteLine("----"); } Console.WriteLine("--------"); // ラティスから、開始位置別の形態素を取得し処理 for (int i = 0; i < lattice.BeginNodeList.Length - 1; i++) { for (var node = lattice.BeginNodeList[i]; node != null; node = node.BNext) { if (node.Prob <= 0.001f) { continue; } Console.CursorLeft = i * 2; Console.Write(node.Surface); Console.CursorLeft = 10; Console.Write(node.Prob.ToString("F3")); Console.CursorLeft = 16; Console.Write(node.Feature); Console.WriteLine(); } } Console.WriteLine("--------"); // ラティスから、最終的な累積コストのみを取得し表示 Console.WriteLine(lattice.EosNode.Cost); } }