中国語学習×グラフデータベース(5) - py2neoからNeo4jに接続

前回さんざん引っ張って、CSV/TEXTからPythonに取り込むところで終わったけど、今度こそNeo4jに登場してもらわねばw。

Neo4jを起動する

コマンドラインからも起動できるけど、個人的にはGUIから起動する方が好き。

f:id:deutschina:20160226142751p:plain

スクショはWindows版だけれども、Macでも同じような画面が出る。データベースを保存したい場所を選択して、Startボタン押すと「Browse to http://localhost:7474」というような緑色の表示に変わるので、そのリンクをクリックするとブラウザが立ち上がる。こんな画面が出てくればOK。

f:id:deutschina:20160226143417p:plain

ちなみに、赤枠のところにCypherクエリなどを入れると、結果がその下に出てくるような感じになる。初回は、ユーザ/パスワードを変更してくれと言われるので好きなモノに変更する。(設定でユーザ認証なしにも出来る)

PythonからNeo4jへ接続

やっとかよwという声が聞こえてきそうである。こんなソースをJupyter Notebookに入れて実行してみる。

from py2neo import Graph, authenticate
from py2neo import Node, Relationship
authenticate('localhost:7474', 'neo4j', 'xxxxx')
graph = Graph()    #http://localhost:7474

特に何も出ないが、エラーも出ていないのでOK。'xxxxx'のところは当然パスワードを入れる。以降は、graph.なんちゃらと書いてあれば、Neo4j側に何らかの操作を加えていると思えば良い。

ちなみに、これからしくじって、何もかも嫌になったときのために、最初にすべてのデータを消すための操作を書いておこう。

graph.delete_all()

一応解説しておくと、py2neoのGraphクラスにあるdelte_all()というメソッドを呼ぶと、Cypherに全部消してねというクエリが渡されて実行されるという意味だ。

あとは、データの投入と行きたいのだが、もう1ステップだけ。グラフデータベースでは主キーみたいな考え方がRDBMSほど厳格ではないので、同じ値を持つノードが複数できてしまう事がある。そこを出来るだけ避けたいので、こんなコマンドを実行してみる。

graph.schema.create_uniqueness_constraint("Category", "category")
graph.schema.create_uniqueness_constraint("Sentence", "sentence")

CategoryというラベルのついたNodeにおいては、categoryという値が重複したNodeを作らせない、Sentenceにおける属性sentenceも重複を許さないという意味になる。単語(Word)については迷ったが、ここで指定するのはやめた。理由は「多読字の存在」。同じ字でも読み方が違う場合には、Nodeを分けた方が良いという考えたから。変わりに、Nordを登録するときはいろいろ気をつける必要がある。

そのあたりは次の記事で。

(つづく)

グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門

グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門