Node-REDで日本語の分かち書きをやってみた

先日のenebular meetupで、日本語の文章の分かち書きの話が出たので、日本語の形態素解析ができるノードを探してみました。MecabやChasenなどが有名だと思いますが、javascriptのライブラリで色々調べるとkuromoji.jsというのがあるようです。

Node-REDのノードとしても公開されていましたので、早速使ってみたいと思います。とても簡単だったので、Node-RED初めての方でもできるかと思います。

シンプルにつなげてみる

まずは、injectノードとDebugノードの間に接続します。

最初に作ったフロー

結果はこのようになります。素材は、青空文庫の「セロ弾きのゴーシュ」の最初の文章から引用しています。

分かち書きされた結果が配列になっています。

配列のままだと、扱いにくいので、分割してみましょう。

配列を分割する

分割するにはsplitノードを使います。

Splitノード

こんな感じで繋ぎます。

配列データを分割するフロー

Injectノードをクリックしてみると、こんな結果になります。

実行結果

分かち書きされた単語のみならず、品詞の名前などの情報もあるようです。
とりあえず名詞だけ取り出してみたいと思います。

名詞を取り出す

名詞だけを取り出すには、分割されたメッセージのなかで、名詞を含んだデータだけフローを通過させればよいです。条件によって通過させるゲートの役割を担うのは、switchノードです。

Switchノード

こんな感じで、品詞が格納される場所は、msg.payload.posだということがわかるので、

pos属性


Switchノードのプロパティを、msg.payload.posの中身のデータが「名詞」という文字列に一致した場合にのみという条件にします。

switchノードのプロパティ
Switchノードのプロパティ

作ったフローはこちらです。

名詞のみ取り出すフロー

実行してみるとDebugタブに表示されるのは名詞を含んだデータだけになりました。

実行結果

次に、分かち書きされた単語のみを取り出すことにします。

単語を取り出す

単語を取り出すには、changeノードを使います。

changeノード


単語に相当する箇所のパスをコピーして、changeノードのルールに追加します。

単語データのパス
changeノードのプロパティ
Changeノードのプロパティ

作ったフローはこちらです。

単語を取り出すフロー

設定を保存して、Injectノードを実行します。

実行結果

これで単語が取り出せました。

これらのフローを全部一緒にすれば、文章から名詞だけを取り出すフローが完成します。

完成したフローはこちらです。

完成したフロー

実行結果はこちらです。

まとめ


Node-REDで日本語の文章の分かち書きにより、名詞だけを取り出すことに成功しました。

Node-REDは、徐々に処理を追加して、自分の目的にあったデータの処理ができますので、プログラミング初心者の方でも簡単に扱うことができると思います。

今回作ったフローはDiscoverに公開していますので、興味のあるかたはぜひインポートしてみてください。

https://enebular.com/discover/flow/e0749f75-d361-4c11-a8ac-68f2cbe239ba