Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Neo4jとProlog

342 views

Published on

グラフDBの Neo4jをいじっていたらこれPrologでできるよと… やってみました.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Neo4jとProlog

  1. 1. Neo4jとProlog SocioInfo #14 飯尾 淳
  2. 2. SocioInfo Copyright © Jun Iio 2 映画データベースの例 これを original.cypher として保存
  3. 3. SocioInfo Copyright © Jun Iio 3 Prologプログラムに変換 ● ここにCypherスクリプトがあるじゃろ? ( ^ω^) ⊃ original.cypher ⊂ これをこうして… ( ^ω^) ≡⊃ cat original.cypher | (シェル 芸)> movie.pl ⊂≡ こうじゃ! ( ^ω^) ⊃ movie.pl ⊂ ● 解説 – (x)-[:RELATION]->(y) という関係が,prologでい うところの relation(x, y) という述語に相当する
  4. 4. SocioInfo Copyright © Jun Iio 4 ワンライナー ● cat original.cypher | sed -e 's/{.*}//g' -e 's/CREATE//g'   -e 's/ //g' -e 's/,//g' | grep '-' | sed -e 's/(([A-Za-z]*))-[:(.*)]->(([A- Za-z]*)(.*)/2 1 3/g' | awk '{printf "%s(p_%s,m_%s).n", tolower($1), $2, $3}' > movie.pl ※1 定数は小文字で 始めるので…
  5. 5. SocioInfo Copyright © Jun Iio 5 ※1の時点でのデータ (Keanu)-[:ACTED_IN]->(TheMatrix) (Carrie)-[:ACTED_IN]->(TheMatrix) (Laurence)-[:ACTED_IN]->(TheMatrix) (Hugo)-[:ACTED_IN]->(TheMatrix) (AndyW)-[:DIRECTED]->(TheMatrix) (LanaW)-[:DIRECTED]->(TheMatrix) (JoelS)-[:PRODUCED]->(TheMatrix) (Emil)-[:ACTED_IN]->(TheMatrix) (Keanu)-[:ACTED_IN]->(TheMatrixReloaded) (Carrie)-[:ACTED_IN]->(TheMatrixReloaded)
  6. 6. SocioInfo Copyright © Jun Iio 6 できあがり(movie.pl) acted_in(p_Keanu,m_TheMatrix). acted_in(p_Carrie,m_TheMatrix). acted_in(p_Laurence,m_TheMatrix). acted_in(p_Hugo,m_TheMatrix). directed(p_AndyW,m_TheMatrix). directed(p_LanaW,m_TheMatrix). produced(p_JoelS,m_TheMatrix). acted_in(p_Emil,m_TheMatrix). acted_in(p_Keanu,m_TheMatrixReloaded). acted_in(p_Carrie,m_TheMatrixReloaded). CREATE …は 「事実」の 宣言に相当
  7. 7. SocioInfo Copyright © Jun Iio 7 確認 ● 昨日の問題5 – 「TheMatrixを作ったディレクターが作成した映画 は,なーんだ?」 ● match … は,prolog では 「?- … .」 に相当 ● 解答例: – ?- directed(X, m_TheMatrix), directed(X, Y). ● 余計な情報が出てきちゃうので… – ?- directed(X, m_TheMatrix), directed(X, Y),   write(Y), nl, fail.

×