Edited at

素人の言語処理100本ノック:まとめ

More than 1 year has passed since last update.

言語処理100本ノック 2015の挑戦記録のまとめです。


挑戦した環境

Ubuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。

問題00問題01だけはPython 2.7です。)


第1章: 準備運動


テキストや文字列を扱う題材に取り組みながら,プログラミング言語のやや高度なトピックを復習します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題00
スライス、print()

問題01
スライス

問題02
Anaconda、zip()itertools.zip_longest()、イテラブルの前に*をつけると引数にバラしてくれる、str.join()functools.reduce()

問題03

len()list.append()str.split()list.count()

問題04

enumerate()、Python3.3以降ではデフォルトでハッシュがランダム化される

問題05
n-gram、range()

問題06

set()set.union()set.intersection()set.difference()

問題07

str.format()string.Templatestring.Template.substitute()

問題08

chr()str.islower()input()、3項演算子

問題09
Typoglycemia、random.shuffle()


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


研究やデータ分析において便利なUNIXツールを体験します.これらの再実装を通じて,プログラミング能力を高めつつ,既存のツールのエコシステムを体感します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題10
[UNIXコマンド]manの日本語化、open()、シェルスクリプト、[UNIXコマンド]wc,chmod、ファイルの実行権限

問題11

str.replace()、[UNIXコマンド]sedtrexpand

問題12

io.TextIOBase.write()、[UNIXコマンド]cut,diff、UNIXコマンドの短いオプションと長いオプション

問題13
[UNIXコマンド]pastestr.rstrip()、Pythonの「空白文字」の定義

問題14
[UNIXコマンド]echo,read,head

問題15

io.IOBase.readlines()、[UNIXコマンド]tail

問題16
[UNIXコマンド]splitmath.ceil()str.format()//で切り捨ての除算ができる

問題17

set.add()、[UNIXコマンド]cut,sort,uniq

問題18
ラムダ式

問題19
リストの内包表記、itertools.groupby()list.sort()


第3章: 正規表現


Wikipediaのページのマークアップ記述に正規表現を適用することで,様々な情報・知識を取り出します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題20
JSONの操作、gzip.open()json.loads()

問題21
正規表現、raw string記法、raisere.compile()re.regex.findall()

問題22
[正規表現]貪欲マッチ,非貪欲マッチ

問題23
[正規表現]後方参照

問題24

問題25
[正規表現]肯定の先読み、sorted()

問題26
re.regex.sub()

問題27

問題28

問題29
Webサービスの利用、urllib.request.Request()urllib.request.urlopen()bytes.decode()


第4章: 形態素解析


夏目漱石の小説『吾輩は猫である』に形態素解析器MeCabを適用し,小説中の単語の統計を求めます.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題30
conda、pip、apt、[MeCab]インストール,使い方、形態素解析、ジェネレータ、yield

問題31
[形態素解析]表層形

問題32
[形態素解析]原形・基本形、リストの内包表記

問題33
[形態素解析]サ変接続の名詞、2重ループのリストの内包表記

問題34

問題35
[形態素解析]名詞の連接

問題36

collections.Countercollections.Counter.update()

問題37
[matplotlib]インストール,棒グラフ,日本語表示,軸の範囲,グリッド表示

問題38
[matplotlib]ヒストグラム

問題39
[matplotlib]散布図、Zipfの法則


第5章: 係り受け解析


『吾輩は猫である』に係り受け解析器CaboChaを適用し,係り受け木の操作と統語的な分析を体験します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題40
[CaboCha]インストール,使い方、__str__()__repr__()repr()

問題41
[係り受け解析]文節と係り受け

問題42

問題43

問題44
[pydot-ng]インストール,有向グラフ、Pythonで作られているモジュールのソースの確認方法

問題45
[係り受け解析]格、[UNIXコマンド]grep

問題46
[係り受け解析]格フレーム・格文法

問題47
[係り受け解析]機能動詞

問題48
[係り受け解析]名詞から根へのパス

問題49
[係り受け解析]名詞間の係り受けパス


第6章: 英語テキストの処理


Stanford Core NLPを用いた英語のテキスト処理を通じて,自然言語処理の様々な基盤技術を概観します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題50
ジェネレータ

問題51

問題52
語幹、ステミング、snowballstemmer:使い方

問題53
[Stanford Core NLP]インストール,使い方、subprocess.run()、XMLの解析、xml.etree.ElementTree.ElementTree.parse()xml.etree.ElementTree.ElementTree.iter()

問題54
[Stanford Core NLP]品詞,レンマ、XMLの解析、xml.etree.ElementTree.Element.findtext()

問題55
[Stanford Core NLP]固有表現、XPath、xml.etree.ElementTree.Element.iterfind()

問題56
[Stanford Core NLP]共参照

問題57
[Stanford Core NLP]係り受け、[pydot-ng]有向グラフ

問題58
[Stanford Core NLP]主語,述語,目的語

問題59
[Stanford Core NLP]句構造解析,S式、再帰呼び出し、sys.setrecursionlimit()threading.stack_size()


第7章: データベース


Key Value Store (KVS) やNoSQLによるデータベースの構築・検索を修得します.また,CGIを用いたデモ・システムを開発します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題60
[LevelDB]インストール,使い方、str.encode()bytes.decode()

問題61
[LevelDB]検索、Unicodeコードポイント、ord()

問題62
[LevelDB]列挙

問題63
JSONの操作、json.dumps()

問題64
[MongoDB]インストール,使い方,インタラクティブシェル,バルクインサート,インデックス

問題65
[MongoDB]検索,ObjectId、JSON形式の変換表にない型の扱い

問題66

問題67

問題68
[MongoDB]ソート

問題69
Webサーバー、CGI、HTMLエスケープ、html.escape()html.unescape()、[MongoDB]複数条件の検索


第8章: 機械学習


評判分析器(ポジネガ分析器)を機械学習で構築します.さらに,手法の評価方法を学びます.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題70
[機械学習]自動分類,ラベル,教師あり学習・教師なし学習

問題71
ストップワード、アサーション、assert

問題72
[機械学習]素性

問題73
[NumPy]インストール,行列演算、[機械学習]ロジスティック回帰,ベクトル化,仮説関数,シグモイド関数,目的関数,最急降下法,学習率と繰り返し回数

問題74
[機械学習]予測

問題75
[機械学習]素性の重み、[NumPy]ソートした結果のインデックス取得

問題76

問題77
正解率、適合率、再現率、F1スコア

問題78
[機械学習]5分割交差検定

問題79
[matplotlib]折れ線グラフ


第9章: ベクトル空間法 (I)


大規模なコーパスから単語文脈共起行列を求め,単語の意味を表すベクトルを学習します.その単語ベクトルを用い,単語の類似度やアナロジーを求めます.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題80
単語のベクトル化、bz2.open()

問題81
[単語ベクトル]複合語の対処

問題82

問題83
オブジェクトの直列化・シリアライズ、pickle.dump()pickle.load()

問題84
[単語ベクトル]単語文脈行列,PPMI(正の相互情報量)、[SciPy]インストール,疎行列の扱い,直列化、collections.OrderedDict

問題85
主成分分析(PCA)、[scikit-learn]インストール,PCA

問題86

問題87
コサイン類似度

問題88

問題89
加法構成性、アナロジー


第10章: ベクトル空間法 (II)


word2vecを用いて単語の意味を表すベクトルを学習し,正解データを用いて評価します.さらに,クラスタリングやベクトルの可視化を体験します.


投稿へのリンク
主に学んだこと、コメントで教えていただいたことなど

問題90
[word2vec]インストール,使い方

問題91

問題92

問題93

問題94

問題95
スピアマンの順位相関係数、インスタンスへの動的メンバー追加、**でべき乗ができる

問題96

問題97
クラシフィケーション、クラスタリング、K-Means、[scikit-learn]K-Means

問題98
階層的クラスタリング、Ward法、デンドログラム、[SciPy]Ward法,デンドログラム

問題99
t-SNE、[scikit-learn]t-SNE、[matplotlib]ラベル付き散布図


100本ノックを終えて

8ヶ月もかかってしまいましたが、なんとか100本ノックに耐えることができました。このような素晴らしい課題をデータ・コーパス付きで公開されている岡崎先生に大変感謝しております。

また皆さんから、コメント、編集リクエスト、いいね、ストック、フォロー、ブログやSNSでのご紹介などをいただき、本当に励みになりました。最後まで続けられたのは皆さんのおかげです。ありがとうございました。

投稿した記事が、後に続く方の参考になることがあれば幸いです。