自然言語処理100本ノック!!(10~19)をただ動かして感想を述べる。
最近週刊スピリッツで連載中のジャガーンという漫画にハマっています。
ジャガーン 1巻 :無料・試し読みも!コミック 漫画(まんが)・電子書籍のコミックシーモア
東京グールや、寄生獣と同じダークファンタジーに入る(と思われる)作品で、グロ、エロ、ラブロマンス、正義や芸術といった哲学主張が詰まっている作品で、やっぱ僕はこういうのが好きなんだなと
グロ描写で人間の生と死を身近に感じ、エロ描写で人間の本能とか、欲とかを認識して、ラブロマンスや、哲学的描写で人間の正義とかきれいごととかそういうものに浸る快楽とかも認識できる良い作品だと思います。
僕はやっぱり男の子でかっこいいもの好きなのと、動物としての人間らしさが描かれいるものがとても好きです。
そう、人間にはやはりエロを求めるところや、過度に自分が関わる汚いものから目をそむけ、きれいごとにいきるところとか、そういうとこから目をそむけず考えていくのって大事なんだなって(もう言葉がぐちゃぐちゃですが、)
ドラゴン桜の国語の芥川先生も言っていましたが、人間は毒を求めるし、それが人間なのだって感じですね。
僕が営業といか部活とかやってた経験上、自分の毒々しい部分、人間らしい性欲とか弱さを人に見せない人ほど、何かちょっと信用できない、壊れやすい人な気もします。(僕自身もきれいきれいな言葉、哲学とかばかりの生き方に長い間身を焦がした人間として)
人間って面白いですよね。機械学習の勉強はそういったことと関わりが深いところもあり、勉強するモチベーションの一つにもなります。
学問の最終ゴールは人間の再現って友達が言ってたな、とか思い出しつつ、
今日は人間の言語の解析の勉強をしていきます。
自然言語処理の勉強をしていきまし。
旅行でできなかったトレーニングを午後にあるミーティングの前にしたいので、時間を2時間半と決めて、やっていきます。
今日聞く音楽
今日も例のごとく、The Chain Smorkersを聴いていきます。
Chain Smorkersいいですね。なんか他のEDM(僕がEDMと認識してるのは、The Chemical Brothersとか、Avicciとか、Zeddとか、)と違ってちょっとエモいというか、(落合先生がエモいってよくTwitterで使うのでなんとなくエモいって言ったけどよく意味がわからないまま使う)
上品な感じがとても良いです。
今日聞くのは、僕が思うThe Chain Smorkersのエモい曲
The Chainsmokers - Honest (Audio)
The Chainsmokers – Paris (Lyrics)
The Chainsmokers - Young (Audio)
このジャケット?グラフィックもどことなく温かみというか、落合先生が表現していたぼんやりとくっきりという日本人的感性に近いというかそんな感じがしますね。
今日の勉強主題
今日もバイト先は一人でガリガリ勉強できそうな朝なので、
三年前のものですが、こちらをガリガリとやっていきたいと思います。
環境としては
Python 3.6.3, Jupyter notebook, Windows10 Bash on Ubuntu
で0番から順に解いていきます。
Markdown記法にしてコピペすればipynbファイル貼れるみたいなんですが、書いてから気づいて記法の変更ができないので、次のポストでJupyter notebookをはてなブログに載せる方法を調べます。
100本ノックの0~9までの準備運動は既にやっていたので次のポストでそれをはてなブログに乗せます。(多分そこだけは独力で解いたから著作権的にもNo Problemなはず。)
ここでは、10~下記サイトを読みながら、Importantなところ(よくわかんなかったところ、参考サイト)だけ書いていきます。
この人は全部独力でやって8ヶ月で解き切ったらしいけど、僕はまあ全体の概要なめなめして、使う時に理解に労力さけばいいっていうスタンスで、ほぼコピペで検証して、動くか動かないか、動かなかったらどういうものをして動くか、てことに重点を置いていきます。
10:テキストファイルの行数カウント
・概要
なんかPythonでやったのと、Bash on ubuntuのwcコマンドでやったのおんなじ行数にならねえ。encodingを指定する必要があった。
・参考
11:タブをスペースに置換
・概要
Python .replace(x,y)メソッド(xをyに置換)
・よくわからなかった
UNIXコマンドラインの計算のところで正規表現の理解が必要になりそうだけど、この先で詳しく触れそうなので今のところ放置
・参考
12:1行目をcol1.txt 2行目をcol2.txt
・概要
Python: with openでテキストを開く、新規に作って、Read とWrite
Ubuntu:cut > でt食って、 diffで2つのファイルの差を確認してくれう
参考サイドの全Pythonコードに僕のPC(Windows10)だとencodingでutf-8を指定しないとテキストファイルopenできなかった
(ちなみに元のテキストファイルが文字化けしているので僕はコマンドの検証は文字化けしたまま行っています(クソ)
・よくわからなかった
cut コマンドと diffコマンドの詳細は不明
--fieldsでテキストファイルの列()columを指定って感じかな
・参考
13:12の2つをMerge
・概要
空白(Space)削除、\t(タブ)挿入してマージ
Ubuntu:pasteコマンドで2つのテキストファイルのMerge、diffでCheck
・よくわからなかった
参考サイトにはPthonのスペース、タブ、改行などの文字コード、文字列リテラル("\t","\n",etc)のことが詳細書いてあるけど、C言語のprintfの中にあるやつと同じ感じだろうで放置
・参考
14:先頭N行を出力する(NはInput)
・概要
Python:inputをnにSubstractして、iをダミーにforループ、i ==nになったらBreak
Ubuntu:参考サイトはシェルスクリプトを使って、echo readでインプットを受け取ってる。
僕はシェルスクリプトを作るのが面倒なので(えぇ)普通にbashで
read n
head --lines=$n hightemp.txt
で先頭n行カット、出力成功を確認。
・よくわからなかった
せめてシェルスクリプトくらい作りたいけど、vimがバグってる+vimの使い方わからない。emacsを使う手もありが、インストールしてないし今のところはそこまで優先順位を感じないので放置
・参考
15:末尾N行の出力
・概要
Python: readlinesで各行をリスト化して、スライスで-nを使って末尾から取得、forループで出力
Ubuntu:tailコマンドで14と同様、readした後出力
・よくわからなかった
14と同じ感じ
・参考
16:ファイルのN等分
・概要
Python:rangeを上手く使って、分割の数だけ新規ファイルをopenで作成、書き込み、
Ubuntu:if then文などが出てきたのでBash上だけでできない。(と思った。)
・よくわからなかった
シェルスクリプト書ける環境は作ろうかー。
・参考
17:1列目の文字列の種類を出力
・概要
Python:set()で集合型を使うことによって、要素の重複をキャンセル
要素の追加はaddで、forループで回して行う。
Ubuntu:cutコマンドで、先頭columnを抽出、ソート、重複除外
上記のプログラムをpyファイルに保存して、それもbashで動かして、新しいテキストに出力を保存
diffで比較
cut --fields=1 hightemp.txt | sort | uniq > result_test.txtpython3 main.py | sort > result.txtdiff --report-identical-files result.txt result_test.txt
Files result.txt and result_test.txt are identical
って初めて言ってくれた。
・よくわからなかった
bashコマンドのsort uniqの使い方の詳細は放置
・参考
18:各業を3列目の数値の降順でソート
・概要
Python:lines = open(fname,encoding = "utf-8").readlines()と、エンコード方式を指定する必要があった、modeは、rにすると動かなかったが原因は不明。
Python リストの.sort()メソッドで2番目の値を降順reverse=Trueで
sort hightemp.txt --key=3,3 --numeric-sort --reverse > result_test.txtpython3 main.py > result.txt
diff --report-identical-files result.txt result_test.txt
No newline at end of fileと出力されたが、他は一致してる。
・よくわからなかった
・参考
19:1列目の文字列の出現頻度の降順でソート、出現頻度も出力する。
・概要
Python:18同様encodingの調整で動いた。
sort()引数なしで、0カラム(名前)の重複でソートして、
itertoolsのgroupbyでカウント、[("NAME",count)....]て感じのタプルのリストで出力してくれるので、再度sort()でindex[1]の要素(count)の降順でソート
出力
cut --fields=1 hightemp.txt | sort | uniq --count | sort --reverse
・よくわからなかった
・参考
完走した感想
とりあえず思考停止で動いて、ロジックの理解に努めた。
まあ、こんなツールもあるんだなって感じ、必要になった時に、過去のポストを見て、参照して使えるようにブログでまとめとけばいっかーって感じ。
引き続きノックを進めて、自然言語処理Userになるぞー!