NLP100
言語処理100本ノック をします
自分の振り返り用ですが、たぶん各問題の「調べた事」をヒントにして解き進めてみるのもアリかもしれません
進捗
- 3/15 はじめた
- 3/16 Ch01できた
- 3/25 Ch02できた
- 3/30 Ch03できた
- 4/2 Ch04できた
- 4/25 Ch05できた
- 4/30 Ch06できた
- 5/5 Ch07できた
- 6/13 Ch08できた
- 8/13 Ch09できた
- 8/14 Ch10できた 完走!😃
Ch01 準備運動
文字列の基本的な操作をします
No. | 調べた事 | その他 |
---|---|---|
00 | スライス | |
01 | スライス、zip() | |
02 | zip() | |
03 | str.split(),list | |
04 | enumerate() | |
05 | ||
06 | set | |
07 | Template | |
08 | ||
09 | random.shuffle(),join(list),リスト内包表記 |
Ch02 UNIXコマンドの基礎
データ処理の基礎を学びながらUNIXコマンドにも触れます
UNIXのコマンドはman hoge
で使い方を見るといい
No. | 調べた事 | UNIXコマンド |
---|---|---|
10 | open() | wc |
11 | str.replace() | sed,tr,expand |
12 | cut | |
13 | str.rstrip() | paste |
14 | sys.argv | head |
15 | io.IOBase.readlines() | tail |
16 | math.ceil() | split |
17 | cut,sort,uniq | |
18 | lambda | sort |
19 | itertools.groupby(),list.sort() | cut,sort,uniq |
Ch03 正規表現
Wikipediaの記事を用いて正規表現でよしなにします
re --- 正規表現操作 正規表現 HOWTO 分かりやすいpythonの正規表現の例(Qiita)
No. | 調べた事 | その他 |
---|---|---|
20 | gzip.open(),json.loads() | |
21 | dict,re,非貪欲マッチ,キャプチャ | |
22 | ||
23 | 後方参照 | |
24 | ||
25 | ||
26 | re.regex.sub() | |
27 | 否定後読み | |
28 | ||
29 | MediaWiki API,requests |
Ch04 形態素解析
「吾輩は猫である」をMeCabで形態素解析した結果データを用いて、軽く分析します
まずはがんばってMeCab(形態素解析エンジン)をインストールする
sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8 pip3 install mecab-python3
文字列をMeCabになげると形態素解析してくれるので出力を保存しておきます
mecab <neko.txt >neko.txt.mecab
みたいな感じで
No. | 調べた事 | その他 |
---|---|---|
30 | 形態素解析 | |
31 | ||
32 | ||
33 | サ変接続(名詞) | |
34 | ||
35 | 名詞の連接 | |
36 | collections.Counter | |
37 | matplotlib.pyplot.bar | |
38 | matplotlib.pyplot.hist | |
39 | matplotlib.pyplot.scatter、Zipfの法則 |
Ch05 係り受け解析
「吾輩は猫である」をCabochaで係り受け解析した結果データを用いて、軽く分析するようです
まずはがんばってCaboCha(係り受け解析器)をインストールする(これが難易度高めかも、無限にググった) CRF++のインストール まずはCRF++ をダウンロード
cd /mnt/c/Users/keisu/Desktop sudo cp CRF++-0.58.tar.gz /usr/share cd /usr/share sudo tar zxvf CRF++-0.58.tar.gz cd CRF++-0.58 sudo ./configure sudo make sudo make install
cabochaのインストール まずはCaboCha をダウンロード
cd /mnt/c/Users/keisu/Desktop sudo cp cabocha-0.60.tar.gz /usr/share cd /usr/share sudo tar zxvf cabocha-0.60.tar.gz cd cabocha-0.60 sudo /sbin/ldconfig sudo vim src/utils.cpp (238行目の ::unlink(filename); を ::remove(filename); に修正) sudo ./configure --with-mecab-config=`which mecab-config` --with-charset=utf8 sudo make clean sudo make sudo make install sudo /sbin/ldconfig
cabocha -f1 <neko.txt >neko.txt.cabocha
をする
CaboCha/南瓜とは Windows Subsystem for Linux上のUbuntuでmecabとcabochaを使う
No. | 調べた事 | その他 |
---|---|---|
40 | class、係り受け | |
41 | ||
42 | ||
43 | ||
44 | DOT言語、graphviz、pydot、係り受け木 | |
45 | 格パターン | |
46 | 格フレーム | |
47 | 機能動詞 | |
48 | ||
49 |
Ch06 英語テキストの処理
Ch04,05は日本語の分析でしたが、この章では英語を分析するみたいです
Stanford Core NLP公式 posタグ一覧(Qiita) Python3.7 xml.etree.ElementTree
Stanford Core NLPのダウンロード(53でnlp.txtを解析してxmlにするのに使う)
sudo apt install openjdk-8-jre sudo wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-10-05.zip sudo unzip stanford-corenlp-full-2018-10-05.zip
usage
cd stanford-corenlp-full-2018-10-05 sudo java -cp "*" -Xmx4g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file ./nlp.txt
No. | 調べた事 | その他 |
---|---|---|
50 | 文の区切りのスペースを\nに置換した | |
51 | ||
52 | stemming.porter2 | |
53 | Stanford Core NLP, xml形式, xml.etree.ElementTree | |
54 | ||
55 | NER(固有表現抽出) | |
56 | 共参照解析,参照表現・代表参照表現 | |
57 | 係り受け解析,collapsed-dependencies | |
58 | nsubj,dobj | |
59 | 句構造解析、S式 |
Ch07 データベース
jsonファイルをKVSとかドキュメント指向DBとかでどうにかするらしい
install redis in WSL Ubuntu Windows10 64bitでPythonからRedis(KVS)を使ってみる
Welcome to redis-py’s documentation! PythonでRedisを操作しよう (基本操作編) RedisのKeyを全て削除する(Qiita) Redisチートシート(コマンド編)(Qiita) redis-py – Redis Pythonクライアント
install redis
sudo apt-get install redis-server //sudo apt install redisでOK?(未確認) redis-cli -v //check version sudo service redis-server restart pip3 install redis
Install MongoDB Community Edition on Ubuntu 【期間限定】WSLのUbuntu 18.04でapt-keyコマンドを実行した時に「IPC connect call failed」のエラーになった時のワークアラウンド WSL (Ubuntu 16.04 TLS) に MongoDB をインストールする Ubuntu 18.04 LTS DesktopにMongoDBをインストール WSL の Ubuntu に MongoDB をインストールする
PyMongo 3.8.0 documentation » Tutorial PyMongo 3.8.0 documentation » API Documentation » pymongo – Python driver for MongoDB » collection – Collection level operations MongoDB コマンドメモとか書き(Qiita)
install MongoDB
curl -sL "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9DA31620334BD75D9DCB49F368818C72E52529D4" | sudo apt-key add echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list sudo apt-get update sudo apt-get install -y mongodb-org echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-org-shell hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections // /data/dbが無いと怒られたので作る sudo chmod 777 /var/lib/mongodb sudo chmod 777 /var/log/mongodb sudo mkdir /data sudo mkdir /data/db sudo chmod 777 /data sudo chmod 777 /data/db // mongod: unrecognized serviceと言われるので何とかする cd /tmp wget https://raw.githubusercontent.com/mongodb/mongo/master/debian/init.d -O mongod chmod +x ./mongod sudo mv mongod /etc/init.d/ sudo service mongod start mongo //これでプロンプトが起動できればOK
No. | 調べた事 | その他 |
---|---|---|
60 | redis,redis-py | |
61 | (redis)scan_iter | |
62 | ||
63 | ||
64 | mongodb,pymongo | |
65 | ||
66 | ||
67 | ||
68 | ||
69 | Go,Vue.js | 一応完成したがもっと作りこめる |
Ch08 機械学習
ついに来た ストップワードは https://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html と https://www.textfixer.com/tutorials/common-english-words.txt を交ぜて使用
No. | 調べた事 | その他 |
---|---|---|
70 | 極性分析 | |
71 | ストップワード | |
72 | 素性 | |
73 | ロジスティック回帰 | |
74 | ||
75 | ||
76 | ||
77 | 適合率、再現率、F1スコア | |
78 | 5分割交差検定 | |
79 |
Ch09 ベクトル空間法(Ⅰ)
1/100サンプリングのコーパスenwiki-20150112-400-r100-10576.txt.bz2を使っています sklearn.decomposition.TruncatedSVD
No. | 調べた事 | その他 |
---|---|---|
80 | ||
81 | ||
82 | ||
83 | ||
84 | Positive Pointwise Mutual Information、疎行列 | |
85 | 主成分分析、次元圧縮 | sklearn.decomposition.TruncatedSVDを使用 |
86 | 意味ベクトル | |
87 | コサイン類似度 | |
88 | ||
89 | 加法構成性 |
Ch10 ベクトル空間法(Ⅱ)
Python用のword2vecはpip3 install word2vec
で入れられる(ほかにもいろいろあるらしい)
word2vec
svn2github/word2vec ここに単語アナロジーの評価データquestions-words.txt
も入っている
スピアマンの順位相関係数(Wikipedia) Python3で配列の要素についてランキングを作って云々する
階層的クラスタリングと、任意の数のクラスタへの分割(qiita) PythonによるDendrogramの作成とlinkageの要素について(qiita) クラスター分析の手法②(階層クラスター分析)
t-SNEによるイケてる次元圧縮&可視化(qiita) scikit-learnでt-SNE散布図を描いてみる [Matplotlib] 注釈と矢印
No. | 調べた事 | その他 |
---|---|---|
90 | word2vec | |
91 | 単語アナロジー | |
92 | ||
93 | ||
94 | WordSimilarity-353 | |
95 | スピアマン相関係数 | scipy.rankdataを使用 |
96 | ||
97 | k-meansクラスタリング | |
98 | Ward法、階層型クラスタリング、デンドログラム | |
99 | t-SNE |