【C#】形態素解析 MeCab を WPFアプリで動かしてみる

1. きっかけ

とある学校の授業で形態素解析をやることになりました。Python で作るようにとのことでしたが、C#が大好きな私はついに手を出してしまいます。「MeCabWPFアプリで作ってみたい」と...。

2. Nugetの導入と実装

MeCab は Nugetにて導入できます。

f:id:takunology:20190625114353p:plain

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. 実行結果

文字を入力してボタンをクリックしてみますと、ラベルに形態素解析された結果が表示されます。

f:id:takunology:20190625114819p:plain

4. 感想とか

思ったより簡単でした。C# で動かせるのはありがたいことです。
パッケージを作ってくれた人、ありがとう。🙏

参考文献

blog.shibayan.jp