言語処理100本ノック 2015の挑戦記録のまとめです。解説は以下のQiitaへのリンクを参照してください。
Ubuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。 (問題00と問題01だけはPython 2.7です。)
テキストや文字列を扱う題材に取り組みながら,プログラミング言語のやや高度なトピックを復習します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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() |
研究やデータ分析において便利なUNIXツールを体験します.これらの再実装を通じて,プログラミング能力を高めつつ,既存のツールのエコシステムを体感します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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() |
Wikipediaのページのマークアップ記述に正規表現を適用することで,様々な情報・知識を取り出します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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() |
夏目漱石の小説『吾輩は猫である』に形態素解析器MeCabを適用し,小説中の単語の統計を求めます.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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の法則 |
『吾輩は猫である』に係り受け解析器CaboChaを適用し,係り受け木の操作と統語的な分析を体験します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題40 | [CaboCha]インストール,使い方、__str__() 、__repr__() 、repr() |
問題41 | [係り受け解析]文節と係り受け |
問題42 | |
問題43 | |
問題44 | [pydot-ng]インストール,有向グラフ、Pythonで作られているモジュールのソースの確認方法 |
問題45 | [係り受け解析]格、[UNIXコマンド]grep |
問題46 | [係り受け解析]格フレーム・格文法 |
問題47 | [係り受け解析]機能動詞 |
問題48 | [係り受け解析]名詞から根へのパス |
問題49 | [係り受け解析]名詞間の係り受けパス |
Stanford Core NLPを用いた英語のテキスト処理を通じて,自然言語処理の様々な基盤技術を概観します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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() |
Key Value Store (KVS) やNoSQLによるデータベースの構築・検索を修得します.また,CGIを用いたデモ・システムを開発します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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]複数条件の検索 |
評判分析器(ポジネガ分析器)を機械学習で構築します.さらに,手法の評価方法を学びます.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題70 | [機械学習]自動分類,ラベル,教師あり学習・教師なし学習 |
問題71 | ストップワード、アサーション、assert |
問題72 | [機械学習]素性 |
問題73 | [NumPy]インストール,行列演算、[機械学習]ロジスティック回帰,ベクトル化,仮説関数,シグモイド関数,目的関数,最急降下法,学習率と繰り返し回数 |
問題74 | [機械学習]予測 |
問題75 | [機械学習]素性の重み、[NumPy]ソートした結果のインデックス取得 |
問題76 | |
問題77 | 正解率、適合率、再現率、F1スコア |
問題78 | [機械学習]5分割交差検定 |
問題79 | [matplotlib]折れ線グラフ |
大規模なコーパスから単語文脈共起行列を求め,単語の意味を表すベクトルを学習します.その単語ベクトルを用い,単語の類似度やアナロジーを求めます.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題80 | 単語のベクトル化、bz2.open() |
問題81 | [単語ベクトル]複合語の対処 |
問題82 | |
問題83 | オブジェクトの直列化・シリアライズ、pickle.dump() 、pickle.load() |
問題84 | [単語ベクトル]単語文脈行列,PPMI(正の相互情報量)、[SciPy]インストール,疎行列の扱い,直列化、collections.OrderedDict |
問題85 | 主成分分析(PCA)、[scikit-learn]インストール,PCA |
問題86 | |
問題87 | コサイン類似度 |
問題88 | |
問題89 | 加法構成性、アナロジー |
word2vecを用いて単語の意味を表すベクトルを学習し,正解データを用いて評価します.さらに,クラスタリングやベクトルの可視化を体験します.
Qiitaへのリンク | 主に学んだこと、コメントで教えていただいたことなど |
---|---|
問題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]ラベル付き散布図 |