LoginSignup
530
574

More than 1 year has passed since last update.

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

Last updated at Posted at 2017-05-03

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

:warning:これは言語処理100本ノック 2020の挑戦記録ではありません。古い2015年版が対象です。ご注意ください:bangbang:

挑戦した環境

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でのご紹介などをいただき、本当に励みになりました。最後まで続けられたのは皆さんのおかげです。ありがとうございました。

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

530
574
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
530
574