HYT MachineWorks

やったこととか思いついたことをメモしておくブログです。

自然言語処理100本ノックをWindowsで 第二章を解く

自然言語処理100本ノックとは、

東北大学の乾・岡崎研究室にて公開されている自然言語処理の問題集です。

www.cl.ecei.tohoku.ac.jp

前回に引き続いて第二章をこなしました。

第2章: UNIXコマンドの基礎

github.com

コードは、私のGitHubリポジトリにアップロードしています。

二章分は下のリンクから

https://github.com/hytmachineworks/NLP_100/tree/master/codes/chapter_02

引っかかった点

1.BashWindows上で使う

windows上でunixのコマンドを使うのに、以前紹介したmsys2を使うか、windows10であれば、Windows Subsystem for Linuxubuntu等をインストールする必要があります。どちらでもいいと思いますが、私は、試してみたかったのもあってwindows10でubuntuでやりました。ですが、導入に現状ではInsider Programに参加してビルドを上げる必要があるのと、windows側のデータをubuntuからみるときは

Windows
C:\nlp100\

Linux
/mnt/c/nlp/

 といった感じで参照する必要があると言うか直接弄るのはダメっぽいので気軽にやるならmsys2の方がいいと思いました。

hytmachineworks.hatenablog.com

 

2.16問目のファイルをN分割する

 普通に行数を数えて余りを分散してやればOKと思ったら、コマンドでやったときの答えと全く合わなくて落ち込んだ。

結局、

全体のバイトを数える
   ↓
Nで割って平均を求める

   ↓
平均を超えるまで行のバイトを計算
   ↓
行途中の場合は、足した時と足さなかったときでそれぞれの残りの行の平均のバイトを計算して平均値に近い方を採用

ってやったら一致した。なんか回りくどいやり方だから全部おわったら見直したい。

3.小技

19問で使っている

from collections import Counter
→Counter(リスト)とかやるとダブってる要素の数の辞書にしてくれる神

from operator import itemgetter
→sorted(二次元の配列, key=itemgetter(0, 1), reverse=True)ってやると2つをキーにしてソートしてくれる神

は、かなり使えるので覚えておいて損は無いと思う。

 

続けて3章をやって行きます。

解きました。

hytmachineworks.hatenablog.com