1. きっかけ
とある学校の授業で形態素解析をやることになりました。Python で作るようにとのことでしたが、C#が大好きな私はついに手を出してしまいます。「MeCab をWPFアプリで作ってみたい」と...。
2. Nugetの導入と実装
MeCab は Nugetにて導入できます。
XAMLはこのように書きました。
<Window x:Class="MeCab.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:MeCab" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Label Content="" HorizontalAlignment="Left" Margin="176,109,0,0" VerticalAlignment="Top" Height="267" Width="450" x:Name="label"/> <Button Content="Button" HorizontalAlignment="Left" Margin="356,42,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> <TextBox HorizontalAlignment="Left" Height="24" Margin="176,80,0,0" TextWrapping="Wrap" Text="ここに何か文字を入力してみます" VerticalAlignment="Top" Width="450" x:Name="textbox" AcceptsReturn="True"/> </Grid> </Window>
ロジック側はこのように書きました。
using NMeCab; using System.Windows; namespace MeCab { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { label.Content = ""; var mecab = MeCabTagger.Create(); var node = mecab.ParseToNode(textbox.Text); while (node != null) { label.Content += node.Surface + "\n" + node.Feature; node = node.Next; } } } }
3. 実行結果
文字を入力してボタンをクリックしてみますと、ラベルに形態素解析された結果が表示されます。
4. 感想とか
思ったより簡単でした。C# で動かせるのはありがたいことです。
パッケージを作ってくれた人、ありがとう。🙏