この前までは、ディープラーニングという切り口で自然言語処理を勉強していました。
しかし、自然言語処理はもっと多くのタスクをカバーする学問分野で、必ずしもディープラーニングが出てくるとは限りません。 そんなわけで、今回はピュアな自然言語処理の初心者として勉強していきます。
参考にさせていただいたのはこちら。

- 作者: 柳井孝介,庄司美沙
- 出版社/メーカー: 翔泳社
- 発売日: 2019/01/23
- メディア: Kindle版
- この商品を含むブログを見る
基本的にはこの本の内容に沿ってやっていきますが、ツールとかを切り替えて自分専用のツールとして遊んでいきたいと思います。
やりたいこと
今回の目標は"自然言語処理で遊ぶ前の準備をすること"です。
そのために、
- 環境構築
- テキストデータの取得
- DBへの格納
をやっていきます。
環境構築
今回やろうとしている概要はこんな感じです。

SQLiteを使う理由があまり良くわからなかったのと、単純にElasticSearchを使ってみたかったという不順な理由で変更しました。
ということで、ElasticSearchの準備だけすれば事足りそうです。
ElasticSearchの導入についてはこの辺りをご参照ください。
一応Dockerを使った環境構築の手順だけ残しておきます。
ディレクトリ構成
こんな感じにしていただければと思います。
. ├── Elasticsearch │ ├── Dockerfile ├── Kibana │ └── Dockerfile └── docker-compose.yml
※ElasticSearchのバージョンとsudachiのバージョンを必ず合わせてください。
docker-compose.yml
version: '2'
services:
elasticsearch:
build: elasticsearch
volumes:
- <host dir>:/usr/share/elasticsearch/data
ports:
- 9200:9200
expose:
- 9300
kibana:
build: kibana
ports:
- 5601:5601
volumes:
elasticsearch-data:
driver: localElasticSearch
Dockerfile(ElasticSearch)
FROM docker.elastic.co/elasticsearch/elasticsearch:6.6.0 RUN elasticsearch-plugin install analysis-kuromoji
Dockerfile(Kibana)
FROM docker.elastic.co/kibana/kibana:6.6.0ElasticSearch
ビルド
docker-compose up
その他
java環境が必要になるので、必要に応じてjava環境をインストールしてください。
テキストデータの収集
使用するデータの選定と、スクレイピングについて見ていきます。
機械学習関係データセット一覧
参考までに、機械学習関係(自然言語に限らず)のデータセットをまとめてくださっている方がいました。
非常に参考になります。ありがとうございます。
スクレイピング
Webページなどから特定の必要な部分だけを抜き取る行為をスクレイピングといいます。 ネット上のデータを機械学習等に使用するために取得したりしますが、マナーとかお作法があるので注意が必要です。
スクレイピングによって大量データをダウンロードする行為は、ウェブサービス運営側からするとサーバーに対する攻撃に見えたりします。
そのため、サービス提供者側からコンテンツに対するルールを書いたrobots.txtを公開していることがあります。
(SEO対策なんかでもこれが効いてくるらしいです)
https://ja.wikipedia.org/robots.txt
(はてなブログ)
https://hatenablog.com/robots.txt
そんなわけで、まずこの辺を確認して、禁止事項を確認しましょう。 この辺はマナーとかモラルの問題ですね。
後は、基本的なpythonのスクリプトを組めば済むので割愛します。 詳しくは本買って読んでください。
DBへの格納
データの下準備
今回は手作業でダウンロードしちゃいました。 こちらの手順どおりにやれば、記事をダウンロードできます。
mapping template
こんな感じにDevToolsから投入しました。
{
"settings": {
"analysis": {
"analyzer": {
"kuromoji_analyzer": {
"type": "custom",
"tokenizer": "kuromoji_tokenizer"
}
}
}
}
}
格納スクリプト(Python)
あんまりたくさんデータを扱うとMacbookでは厳しいので、縮小スケールでやっていきます。 データは適当に自分のブログ突っ込んでみます。これなら著作権もクソもないでしょう。
この記事がちょうど同じことをやっていたので、参考にやってみました。
ElasticSearchを使っているので、格納はこんな感じになります。そのまま拝借しました。
kibanaで確認する
参考までに、kibanaで見るとこんな感じ。
(アクセス)

突っ込めてますね。
何はともあれ、めでたしめでたし。
おまけ
適当にkibanaでvisualizeいじったらできました。

まあまあ想定通りのワードクラウドですね。
感想
今回は準備段階なので、NLPはあんまり関係無かったですね。 でも、NLPをやるには必要な工程なので、そういう意味ではNLPの一部ではあるかと思います。
それにしても、ちょっと本の内容から応用しようと思うだけでも大変ですね。 結構時間かかりました。 遊び半分でやるもんじゃないですね。反省。