言語処理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でのご紹介などをいただき、本当に励みになりました。最後まで続けられたのは皆さんのおかげです。ありがとうございました。
投稿した記事が、後に続く方の参考になることがあれば幸いです。