Neo4jとPythonが初めてで、IPythonを使ってテストデータベースにノードとリレーションシップを設定しようとしています。私はpy2neo v 3.1.2を使用しています。私が取り組もうとしている問題は、単語countをプロパティとするリンクを介して文章IDを含む単語の集合にグラフの集合を表すことです。Neo4j経由のグラフ作成に時間がかかりすぎる
String(num)とWord(val)の両方に関連するNeo4j制約を追加しました。関連するコードをここに与えられます。
from py2neo import Graph, Node, Path
import re
graph = Graph("http://neo4j:[email protected]:7474/db/data/")
f1 = open("test.txt", "r")
cnt = 0
for line in f1:
cnt = cnt+1
line=line.lower()
line = re.sub(r'[^\w\s]','',line)
wordlist = line.split()
lgth = len(wordlist)
wordfreq = [wordlist.count(w) for w in wordlist]
dct = dict(zip(wordlist,wordfreq))
str = Node("String", num=cnt, length = lgth)
graph.merge(str)
for k, v in dct.items():
wrd = Node("Word", val=k)
graph.merge(wrd)
property_dict = {"wrdcnt": v}
relate = Path(str, ("CONTAINS",property_dict),wrd)
graph.merge(relate)
1000行の小さなコレクションはのNeo4jのグラフのように移入するために約10分かかります。私は私のPythonコードで何かを間違ってやっていると確信して、同じことが大幅にスピードアップすることができます。意味のある洞察に感謝します。
あなたの解析だけをベンチマークしましたか?また、あなたはかなりの量のマージを行っています。おそらく、あなたの質問を編集して、インポート時にあなたが実行しているコアのCypherクエリを表示してください。 –
私は解析をベンチマークしました。pythonコードがサブ秒でジップします – user6948456