この記事は「Elixir Advent Calendar 2022」4日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
以前、言語処理100本ノックをElixirでやってみるを途中までやってまして、
言語処理100本ノックにElixirでチャレンジ! 1−4まで
言語処理100本ノックにElixirでチャレンジ! 5
で、実は記事にはしてないけど第3章までは終わってたので、今回久々に第4章から始めてみよう。
ちなみに、私はこの領域はからっきしなので、最近ElixirコミュニティでML系の記事がいっぱい上がってるので勉強させてもらおうっと。
第4章: 形態素解析
30. 形態素解析結果の読み込み
形態素解析結果(neko.txt.mecab)を読み込むプログラムを実装せよ.ただし,各形態素は表層形(surface),基本形(base),品詞(pos),品詞細分類1(pos1)をキーとするマッピング型に格納し,1文を形態素(マッピング型)のリストとして表現せよ.第4章の残りの問題では,ここで作ったプログラムを活用せよ.
まぁ、よくわからんけど、
夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.
と書かれてたので、早速、こちらの準備をしようかなと。今回の記事は準備までで終わりそう。
まずは、Mecabをインストールするところから。という事で私はmac環境なので brew install でインストールしました。
$ brew install mecab mecab-ipadic
で、こんな有名なツールなら誰かモジュール作ってるだろう?と検索したら早速見つかったので、それを実装してみます。
まずはmix プロジェクトを作成します。
mix new handred_knok
早速モジュールを追加してみます。
defp deps do
[
{:mecab, "~> 1.0"}
]
end
早速試しに動かしてみます。
Mecab.parse("今日は晴れです")
[
%{
"conjugation" => "",
"conjugation_form" => "",
"lexical_form" => "今日",
"part_of_speech" => "名詞",
"part_of_speech_subcategory1" => "副詞可能",
"part_of_speech_subcategory2" => "",
"part_of_speech_subcategory3" => "",
"pronunciation" => "キョー",
"surface_form" => "今日",
"yomi" => "キョウ"
},
%{
"conjugation" => "",
"conjugation_form" => "",
"lexical_form" => "は",
"part_of_speech" => "助詞",
"part_of_speech_subcategory1" => "係助詞",
"part_of_speech_subcategory2" => "",
"part_of_speech_subcategory3" => "",
"pronunciation" => "ワ",
"surface_form" => "は",
"yomi" => "ハ"
},
%{
"conjugation" => "",
"conjugation_form" => "",
"lexical_form" => "晴れ",
"part_of_speech" => "名詞",
"part_of_speech_subcategory1" => "一般",
"part_of_speech_subcategory2" => "",
"part_of_speech_subcategory3" => "",
"pronunciation" => "ハレ",
"surface_form" => "晴れ",
"yomi" => "ハレ"
},
%{
"conjugation" => "基本形",
"conjugation_form" => "特殊・デス",
"lexical_form" => "です",
"part_of_speech" => "助動詞",
"part_of_speech_subcategory1" => "",
"part_of_speech_subcategory2" => "",
"part_of_speech_subcategory3" => "",
"pronunciation" => "デス",
"surface_form" => "です",
"yomi" => "デス"
},
%{
"conjugation" => "",
"conjugation_form" => "",
"lexical_form" => "",
"part_of_speech" => "",
"part_of_speech_subcategory1" => "",
"part_of_speech_subcategory2" => "",
"part_of_speech_subcategory3" => "",
"pronunciation" => "",
"surface_form" => "EOS",
"yomi" => ""
}
]
お、なんか良さげ。
という事で、この続きは長くなるので次回にします。
簡単Elixirシリーズじゃ無いけど、基本的に小ネタの記事はサクッとがコンセプトで書いていきます。w