中国語学習×グラフデータベース(4) - データをPython側に取り込んでみる

何となくグラフデータベース側の構造を決めたので、さっそくデータを取り込んでみる。基本的な考え方は、データをアップロードして、Nodeを作ってから、Node間のRelationshipは、ある特定の条件に合致するものを後から紐付ける感じ。

CSVファイルからの取り込み

このあたりは、普通のPythonの世界ですね。元々FileMakerに入っていたデータをCSVファイルとして書き出しておいたところからスタート。実際には、Jupyter Notebookを使っている場合は、以下のようなコードをセルに入れて実行ボタンを押す。

import csv
word_list = []
with open('chinesewords_20160219.csv', encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        word_list.append(row)
print('{} words stored in word_list'.format(len(word_list)))

csv.Dictreader()を使っているので、元となるCSVファイルの1行目には項目名が入っている必要あり。各行データは辞書(Dictionary)に変換され、それがListの中に格納されるイメージ。

5809 words stored in word_list

一応、エントリ数を数えて何件取り込んだかを確認する。念のため書いておくと、この時点ではまだPythonのメモリ上にデータが保存されているだけで、Neo4jには何もしていない。

テキストファイル取り込みの場合は、行末の改行コードに注意

引き続いて、短文を取り込んでみる。短文は項目が1つしかないのでCSVではなくてテキストファイル形式で保存されている。よって、取り込むソースコードとその実行結果は、こんな感じ。

sentence_list = []
with open('chinese_sentences20160218.txt', encoding='utf-8') as textfile:
    sentence_list = [row.rstrip() for row in textfile]
print('{} sentences stored in sentenc_list'.format(len(sentence_list)))
569 sentences stored in sentenc_list

さらっとやっているが、実際には行末の改行コードを取り除くのを忘れたりして、少し試行錯誤した。row.strip()のところは、もっとシンプルにrow[:-1]でも良かったはず。改行コードが取り除けているかを確認するには、こんな感じ。

sentence_list[-1]
'那么大的鱼,根本钓不到。'

取り除けていない場合は、文の最後に不細工な感じで"\n"という文字が残ってしまう。

ここまで出来れば、あとはNeo4jにデータを取り込めば良いが、長くなったので記事を改める。

(つづく)

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

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