Daily programming #0041

言語処理100本ノック 2015の#39をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

39. Zipfの法則[Golang]

Question

単語の出現頻度順位を横軸,その出現頻度を縦軸として,両対数グラフをプロットせよ.

Code

100knock #39

Output

f:id:re3turn:20210209002720p:plain

Comment

Zipfの法則とは?

なるほどわからん

今までのコードを使えばとりあえずできそうだったので、先人のコード公式のサンプルを参考にしつつ作成した。

Daily programming #0040

言語処理100本ノック 2015の#38をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

38. ヒストグラム[Golang]

Question

単語の出現頻度のヒストグラム(横軸に出現頻度,縦軸に出現頻度をとる単語の種類数を棒グラフで表したもの)を描け.

Code

100knock #38

Output

f:id:re3turn:20210209002819p:plain

階級幅20で出力しているが単語の出現頻度の大部分が1〜50回あたりなので分かりづらいグラフになっている。

f:id:re3turn:20210209002851p:plain

思い切って出現頻度100回以下の単語を除外してみたが少しはヒストグラムらしいグラフになった。

Comment

問題の意図が読み取れなくて難儀した。

日本語は難しい。

形態素解析が細かすぎるのかこれをヒストグラムにする意味はあるのだろうかと思いながらコード書いてました。

Gonum Plotヒストグラムにはplotutil.Color効かないんですかね?

Daily programming #0039

言語処理100本ノック 2015の#37をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

37. 頻度上位10語[Golang]

Question

出現頻度が高い10語とその出現頻度をグラフ(例えば棒グラフなど)で表示せよ.

Code

100knock #37

Output

f:id:re3turn:20210209002943p:plain

Gonum Plotは日本語非対応なので棒グラフのラベルは出力されない。

Comment

しばらくできていなかったが今日から再開する。

Gonum Plotというグラフを描画するパッケージを使用した。

使用方法は公式のドキュメント及び先人のコードを参考にした。

Daily programming #0038

言語処理100本ノック 2015の#36をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

36. 単語の出現頻度[Golang]

Question

文章中に出現する単語とその出現頻度を求め,出現頻度の高い順に並べよ.

Code

100knock #36

Output

$ ./main ../neko.txt.mecab
9107 の
7484 。
6772 、
6698 て
6384 は
6159 に
6068 を
5476 と
5259 が
3916 た
3775 で

出力結果は大量に出力されるため、例として最初から10個分を出力した。

Comment

単語をすべて1つのスライスに格納し、#19とほぼ同様の手順で重複要素をカウントして、出現頻度と文字列をスライスに格納。

あとはそれをsort.SliceStableでソートして出力した。

Daily programming #0037

言語処理100本ノック 2015の#35をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

35. 名詞の連接[Golang]

Question

名詞の連接(連続して出現する名詞)を最長一致で抽出せよ.

Code

100knock #35

Output

$ ./main ../neko.txt.mecab
[した所 人間中 一番獰悪 時妙 一毛 その後猫 一度 邸内 書生以外 四五遍]

出力結果は大量に出力されるため、例として最初から10個分を出力した。

Comment

名詞が連続している間スライスに格納し、2つ以上連続していれば結合して保存用のスライスに格納していった。

今思えば結合せずにスライスごと格納したほうが後々使いやすい気がした。

Daily programming #0036

言語処理100本ノック 2015の#34をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

34. 「AのB」[Golang]

Question

2つの名詞が「の」で連結されている名詞句を抽出せよ.

Code

100knock #34

Output

$ ./main ../neko.txt.mecab
[彼の掌 掌の上 書生の顔 はずの顔 顔の真中 穴の中 書生の掌 掌の裏 何の事 肝心の母親]

出力結果は大量に出力されるため、例として最初から10個分を出力した。

Comment

「の」を起点にして前後が名詞のものを抽出した。

1文ごとになどの指定はないのですべて1つのスライスに格納した。

Daily programming #0035

言語処理100本ノック 2015の#33をやっていく。

第4章: 形態素解析の前提

夏目漱石の小説『吾輩は猫である』の文章(neko.txt)をMeCabを使って形態素解析し,その結果をneko.txt.mecabというファイルに保存せよ.このファイルを用いて,以下の問に対応するプログラムを実装せよ.

なお,問題37, 38, 39はmatplotlibもしくはGnuplotを用いるとよい.

このあたりの記述を参考にMeCab、およびmecab-ipadic-NEologdをインストールし、neko.txt.mecabを作成する。

neko.txt.mecabのサイズが大きいためglot.ioではそのまま実行できないため、第4章は実行結果を記載する方針とする。

33. サ変名詞[Golang]

Question

サ変接続の名詞をすべて抽出せよ.

Code

100knock #33

Output

$ ./main ../neko.txt.mecab
[見当 記憶 そうだ 話 装飾 突起 運転 記憶 ようやく 分別]

出力結果は大量に出力されるため、例として最初から10個分を出力した。

Comment

これも#31とあまりかわらない。

1文ごとになどの指定はないので1つのスライスに格納した。