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()
02zip()
03str.split(),list
04enumerate()
05
06set
07Template
08
09random.shuffle(),join(list),リスト内包表記

Ch02 UNIXコマンドの基礎

データ処理の基礎を学びながらUNIXコマンドにも触れます

UNIXのコマンドはman hogeで使い方を見るといい

No.調べた事UNIXコマンド
10open()wc
11str.replace()sed,tr,expand
12cut
13str.rstrip()paste
14sys.argvhead
15io.IOBase.readlines()tail
16math.ceil()split
17cut,sort,uniq
18lambdasort
19itertools.groupby(),list.sort()cut,sort,uniq

Ch03 正規表現

Wikipediaの記事を用いて正規表現でよしなにします

re --- 正規表現操作  正規表現 HOWTO  分かりやすいpythonの正規表現の例(Qiita) 

pythonで、とっても便利な正規表現を!(Qiita) 

正規表現の先読み・後読みを極める! 

正規表現:最短一致でマッチさせる表現 

MediaWiki API:Imageinfo 

No.調べた事その他
20gzip.open(),json.loads()
21dict,re,非貪欲マッチ,キャプチャ
22
23後方参照
24
25
26re.regex.sub()
27否定後読み
28
29MediaWiki 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みたいな感じで

MeCab (和布蕪)とは 

No.調べた事その他
30形態素解析
31
32
33サ変接続(名詞)
34
35名詞の連接
36collections.Counter
37matplotlib.pyplot.bar
38matplotlib.pyplot.hist
39matplotlib.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.調べた事その他
40class、係り受け
41
42
43
44DOT言語、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
52stemming.porter2
53Stanford Core NLP, xml形式, xml.etree.ElementTree
54
55NER(固有表現抽出)
56共参照解析,参照表現・代表参照表現
57係り受け解析,collapsed-dependencies
58nsubj,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) 

mongoDBに接続できない 

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.調べた事その他
60redis,redis-py
61(redis)scan_iter
62
63
64mongodb,pymongo
65
66
67
68
69Go,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スコア
785分割交差検定
79

Ch09 ベクトル空間法(Ⅰ)

1/100サンプリングのコーパスenwiki-20150112-400-r100-10576.txt.bz2を使っています sklearn.decomposition.TruncatedSVD 

No.調べた事その他
80
81
82
83
84Positive 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で配列の要素についてランキングを作って云々する 

k平均法(Wikipedia) 

階層的クラスタリングと、任意の数のクラスタへの分割(qiita)  PythonによるDendrogramの作成とlinkageの要素について(qiita)  クラスター分析の手法②(階層クラスター分析) 

t-SNEによるイケてる次元圧縮&可視化(qiita)  scikit-learnでt-SNE散布図を描いてみる  [Matplotlib] 注釈と矢印 

No.調べた事その他
90word2vec
91単語アナロジー
92
93
94WordSimilarity-353
95スピアマン相関係数scipy.rankdataを使用
96
97k-meansクラスタリング
98Ward法、階層型クラスタリング、デンドログラム
99t-SNE