LoginSignup
2
2

More than 5 years have passed since last update.

Janomeを使った日本語の分析処理 part1

Posted at

この記事はCloudAnalytics Advent Calendarの7日目です。

ここでは3日目に準備したCloudantのデータを利用して、Data Science Experience上のNotebookを利用し、SparkのRDDの扱いと記事タイトルに含まれる日本語文をJanomeを利用して簡単な集計処理を扱います。※記事が長くなってしまったので分割します・・・

Node-REDとCloudantの準備と今回利用するデータは3日目の記事を参考にしてください。
また、今回のNotebookの環境はDataScienceExperienceを利用しています。
DSXの詳細は1日目の記事を参照ください。

Cloudantの接続の準備

下記の図のadd data assetsから用意したCloudantへの接続を作成します。

スクリーンショット 2016-12-12 10.54.18.png

右側のパネルが開いたらConnectionsのタブを選択し、
Create Connectionから新しい接続を作成します。
スクリーンショット 2016-12-12 10.58.54.png

Create Connectionの画面を開いて必要な項目を設定していきます。
* Name:何かわかりやすい名前をつけます。
* Description:この接続の説明
* Service Category:Bluemix上のデータサービス又はその他の外部サービス。今回はData Serviceを選択します。
* Service Instance:Service Categoryに応じた内容がDropBoxで選択可能です。Bluemix上のCloudantを利用する場合は自動で列挙されます。
* Select:Service Instanceに応じて項目が変化しますが、Cloudantを利用する場合はService Instanceで選択したCloudantのDataBaseが列挙されます。ここでは作成してあるrssのDatabaseを選択しています。

各項目の設定1
スクリーンショット 2016-12-12 11.02.19.png

各項目の設定2
スクリーンショット 2016-12-12 11.05.19.png

Createボタンを押せば下記のようにCloudantのrssデータベースへの接続が作成されます。

スクリーンショット 2016-12-12 11.08.11.png

以上でCloudantの準備が完了しました。とっても簡単ですね。

Notebookの作成

次に分析を行うため、新しいNotebookを作成します。
プロジェクトの画面からadd notebooksを選択し、新しいNotebookを追加します。
スクリーンショット 2016-12-12 11.12.16.png

1日目に説明した内容と重複しますが、簡単に。
* Name:ノートブックの名称(現在日本語名での作成は避けた方が無難)
* Description:ノートブックの説明
* Language:今回はPython3.5を利用します。
* Spark version:SparkのVersionです。2.0を利用します。
* Spark Service:利用するSparkServiceの選択です。

スクリーンショット 2016-12-12 11.17.23.png

LanguageではPythonの2系も選択可能ですが、
今回は日本語の取り扱いを行う為、操作が簡単な3.5を選択しています。

Data Science Experienceについては1日目の記事を参考にしてください。

Janomeの準備

作成を行うと自動的にNotebookが開かれます。
日本語の形態素解析を行うために、Pythonで利用可能な形態素解析器のJanomeのインストールを行います。

JanomeのHP

Data Science Experience上ではpipを使った操作が可能です。
最初のセルに下記コードを入力し、実行しましょう

!pip install janome

コードの実行などJupyterの基本的な使い方は1日目の記事を参照してください。

実行するとJanomeがインストールされます。
スクリーンショット 2016-12-12 11.27.57.png

Janomeのインストールが終わった後、正常にJanomeが使えるか、簡単なテストをおこなってみます。
新しいセルに書きコードを入力し、実行しましょう。

from janome.tokenizer import Tokenizer
t = Tokenizer()
tokens = t.tokenize("すもももももももものうち")
for token in tokens:
    print(token)

コピペする際はインデントに注意してください。
正常に形態素解析された結果が出力されればOKです。
スクリーンショット 2016-12-12 11.32.43.png

Cloudantの接続コード

Janomeの準備ができたら、Cloudantからデータを取得するコードを書いていきます。
まずはCloudantの認証データをセルに埋めます。
先ほど登録したCloudantの情報を呼び出します。
右上のfind and add dataのメニューを開き、
Connectionsから先ほど登録したnews_rssを探します。
スクリーンショット 2016-12-12 11.36.16.png

新しいセルを選択した状態でinsert to codeを押すと、セルに必要な情報が自動的に記述されます。
スクリーンショット 2016-12-12 11.48.50.png

入力されたセルを実行して、credentials_1の変数を利用可能にします。
次にSparkSQLを利用してDataFrameの作成を行います。
新しいセルに下記のコードを入力し、実行します。

from pyspark.sql import SQLContext
#SQLContext
sqlContext = SQLContext(sc)
#load rss from cloudant
rss = sqlContext.read.format("com.cloudant.spark").\
option("cloudant.host",credentials_1["host"]).\
option("cloudant.username", credentials_1["username"]).\
option("cloudant.password",credentials_1["password"]).\
load("rss")

sqlContextにCloudantのフォーマットを指定し、先ほどのcredentials情報からhost名、接続ユーザー、パスワードを指定し、rssテーブルからデータをロードしています。

ここでAnother instance of Derby may have already booted the database・・・の例外が発生する場合、notebookのkernelのリスタートを行い再度最初のセルからコードを実行し直してください。内部でapache Derbyが利用されているようですが、connectionのハンドリングがうまくいかないケースがある模様・・・

以下のコードを実行し、ロードしたデータのスキーマを確認します。

rss.printSchema()

スクリーンショット 2016-12-12 12.01.28.png

最後にデータの中身を確認してみます。
以下のコードを実行し、データを表示させます。

rss.show()

スクリーンショット 2016-12-12 12.10.46.png

以上でpart1は終了です。part2からPySparkとJanomeを利用して日本語を操作していきます。

2
2
0

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
2
2