はじめに
言語処理100本ノックは東北大学が公開している自然言語処理の問題集です。
とても良質なコンテンツで企業の研修や勉強会で使われています。
そんな言語処理100本ノックが2020年に改定されてました。昨今の状況を鑑みて、深層ニューラルネットワークに関する問題が追加されました。(その他にも細かい変更があります)
この記事では、言語処理100本ノック2020にPythonで取り組んでいきます。
他にも色々な解法があると思うので、一つの解答例としてご活用ください!
全100問の解説に戻る
10. 行数のカウント
行数をカウントせよ.確認にはwcコマンドを用いよ.
この章はPandasを使ってみようと思います。
1 | import pandas as pd |
pandasで表形式のデータを読み込む際はread_csvを用います。read_csvはdelimiterを適切に指定することで、csvファイル以外にも使えます。また、header=Noneをつけないとファイルの一行目がヘッダーとして読み込まれてしまうので注意しましょう。
1 | wc popular-names.txt |
11. タブをスペースに置換
タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.
1 | import pandas as pd |
保存する際はto_csvを使います。その際にsepで区切り文字を指定します。保存する際に、DataFrameのヘッダーやインデックスが出力されないように注意します。
1 | sed 's/\t/ /g' popular-names.txt > replaced.txt |
12. 1列目をcol1.txtに,2列目をcol2.txtに保存
各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.
1 | import pandas as pd |
ilocを使うことで行や列を指定して取得することができます。
1 | cut -f 1 popular-names.txt > col1.txt |
13. col1.txtとcol2.txtをマージ
12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.
1 | import pandas as pd |
concatで結合ができます。横方向に連結したいのでaxis=1を指定します。
1 | paste col1.txt col2.txt > col1_2.txt |
14. 先頭からN行を出力
自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.
1 | import pandas as pd |
headで指定した行数を確認することができます。
1 | head -n 5 popular-names.txt |
15. 末尾のN行を出力
自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ.
1 | import pandas as pd |
Pandasで先頭から取得する場合はhead、末尾から取得する場合はtailを使います。UNIXコマンドと同様ですね。
1 | tail -n 5 popular-names.txt |
16. ファイルをN分割する
自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.
1 | N = 3 |
Pythonで切り上げ除算をする際は以下のように実装すると良いです。
1 | step = - (-len(df) // N) |
1 | split -n 3 popuar-names.txt |
17. 1列目の文字列の異なり
1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはcut, sort, uniqコマンドを用いよ.
1 | import pandas as pd |
uniqueを使うことで集合を求めることができます。
1 | cut -f 1 popular-names.txt | sort | uniq |
uniqはソートされていることを前提としています。そのため、前処理としてsortが必要です。
18. 各行を3コラム目の数値の降順にソート
各行を3コラム目の数値の逆順で整列せよ(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題はコマンドで実行した時の結果と合わなくてもよい).
1 | import pandas as pd |
sort_valuesでソートできます。
1 | cut -f 3 popular-names.txt | sort -n -r |
sortはデフォルトでは文字列としてソートをするため、-nオプションで数値としてソートする必要があります。-rオプションで降順ソートになります。
19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる
各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ.
1 | import pandas as pd |
value_countsを用いることで出現頻度の高い順に並べ替えることができます。その後の処理はUNIXコマンドと結果を合わせるためにnameをソートしています。
1 | cut -f 1 popular-names.txt | sort | uniq -c | sort -n -r |
uniqは-cオプションでカウントすることができます。
最後に
全100問の解説に戻る
記事情報
- 投稿日:2020年5月9日
- 最終更新日:2020年5月9日
