言語処理100本ノック 2015の挑戦記録のまとめです。
これは言語処理100本ノック 2020の挑戦記録ではありません。古い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.Template、string.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コマンド]sed、tr、expand
|
| 問題12 |
io.TextIOBase.write()、[UNIXコマンド]cut,diff、UNIXコマンドの短いオプションと長いオプション |
| 問題13 | [UNIXコマンド]paste、str.rstrip()、Pythonの「空白文字」の定義 |
| 問題14 | [UNIXコマンド]echo,read,head
|
| 問題15 |
io.IOBase.readlines()、[UNIXコマンド]tail
|
| 問題16 | [UNIXコマンド]split、math.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記法、raise、re.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.Counter、collections.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でのご紹介などをいただき、本当に励みになりました。最後まで続けられたのは皆さんのおかげです。ありがとうございました。
投稿した記事が、後に続く方の参考になることがあれば幸いです。