python、GINZA、neo4j Desktopによる日本語文章のグラフ登録と検索

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/5d92fb0c-059b-4273-b709-43fb0e99b330.png)

# 初めに
前回の投稿に続き、私が作りたい「テキスト検索アプリ」の一部の機能が作成できたので、
経験したことや知識を共有させていただきます。
今回は日本語の文章をグラフDBに登録するアプリのソースやneo4jでの検索方法を紹介します。
日本語の形態素解析、依存構造解析、エンティティ認識にja_ginza、グラフ情報を格納するDBとしてneo4jを使いました。
※テキスト解析、グラフ、ベクトルについて業務で使ってない素人なので、認識誤りがあったらすいません。

# 準備
下記のインストールが必要です。

1.VSCodeなどのテキストエディタ
2.Python(Version 3.12)
3.spacy(Version 3.8.4)
4.ja_ginza(Version 5.2.0)
5.neo4j Desktop(Version 1.6.1)

# neo4j Desktopの使い方
1.test1というDBを作成する
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/778781df-ad0a-44f7-af7a-bd7871d001f3.png)
neo4j Desktopを起動し、右上の「Add」ボタンをクリックし、DB名やパスワードを入力する。

2.DBを起動する
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/e6e6db20-516b-4ffd-b6a3-f4c1f027dbae.png)
作成したDBをクリックすると「Start」ボタンが表示されるのでクリックする。

3.neo4j Browserを起動する
![7..png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/bcb23178-4c61-4311-b211-d934f3292b80.png)
DBが起動すると「Open」ボタンが青に変わりクリックするとリストが表示され、その中の「Neo4j Browser」をクリックすると、別のウインドウでneo4j Browserが表示される。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/a2d2c4fb-85d6-459d-90fd-57193e14344a.png)

# 今回使った日本語の文章を記載したファイルの内容
```ner_data.txt
太郎は明子を好きです。
明子は次郎を好きです。
次郎は太郎の弟です。
AS社はソフトウェアを製造・販売している。
明子はAS社に勤めてます。
太郎はAS社からソフトウェアを3万円で買いました。
```

# 実行ソース
```test.py
from nlp import Nlp
from neo4jConnection import Neo4jConnection

if __name__ == "__main__":

    # 初期化
    instance_nlp = Nlp()
    instance_neo4j = Neo4jConnection()

    # DB接続
    if instance_neo4j.connect("bolt://localhost:7687", "neo4j", "xxxxxxxx"):
        # 入力データをファイルからリード
        with open(instance_nlp.DATA_DIR + 'ner_data.txt', 'r', encoding='utf-8') as file:
            text = file.read()

            # 形態素分析の実行
            print('[ginza分析結果]')
            sentences = instance_nlp.ginza(text)

            # 形態素分析の実行結果をグラフ情報登録用のCypherに翻訳
            graphs = instance_nlp.makeCypherEntry('ner_data.txt', sentences)
            print('[データ登録Cypher]')
            for g in graphs:
                print(g)
                instance_neo4j.queryEntry(g)

        # DB切断
        instance_neo4j.disConnect()
```

:::note warn
注意
1.DB接続のポート(7687)は各自の環境に合うものを記載して下さい。私はポートを間違えて「コンピュータから拒否されました」エラーで少しはまりました。

2.DBのユーザID(neo4j)、パスワード(xxxxxxxx)は製品アプリの場合は、ハードコーディングを避ける記載が好ましいです。

3.グラフ情報登録用Cypher１つごとDBに登録する。
:::

```neo4jConnection.py
from neo4j import GraphDatabase

# Neo4jに接続するクラスを定義
class Neo4jConnection:
    # コンストラクタ
    def __init__(self):

        self._driver = None

    # DB接続
    def connect(self, uri, user, password):
        try:
            self._driver = GraphDatabase.driver(uri, auth=(user, password))
            # 確認用クエリ（データベースに接続できるかチェック）
            with self._driver.session() as session:
                session.run("RETURN 1")
            return True
        except Exception as e:
            print(e)        
            return False

    # DB切断
    def disConnect(self):
        self._driver.close()

    # クエリ
    def queryEntry(self, query, parameters=None):
        with self._driver.session() as session:
            session.execute_write(lambda tx: tx.run(query))
```

```nlp.py
import spacy
from spacy.language import Language
from spacy.tokens import Span

class Nlp:
    # コンストラクタ
    def __init__(self):
        # NLPモデルの読み込み
        self.nlp_g = spacy.load("ja_ginza")

    def ginza(self, text):

        sentences = self.nlp_g(text)

        # 抽出されたエンティティを表示
        for s in sentences:
            print(f"text:{s.text},lemma_:{s.lemma_},pos_:{s.pos_},tag_:{s.tag_},dep_:{s.dep_},head.text:{s.head.text},ent_type_:{s.ent_type_},i:{s.i},is_alpha:{s.is_alpha},is_stop:{s.is_stop}")

        return sentences

    def makeCypherEntry(self, selentences):
        # 各自で実装ください。ヒントは下記に記載します。
```

# NlpクラスmakeCypherEntryメソッドの実装のヒント：私の仮説
1.ginza解析結果のis_stopがtrueで一連の単語が終端したことを示す。
2.ginza解析結果のdep_が'PUNCT'やginza解析結果のtag_が'補助記号-句点'は文末を示す。
3.ginza解析結果のdep_が'ROOT'は述語を示す。
4.ginza解析結果のdep_が'nsubj'は主語を示す。
5.ginza解析結果のdep_が'obj'は目的語を示す。
6.ginza解析結果のdep_が'obl'や'nmod'は文の目的語を補完する情報を示す。
7.ginza解析結果のlemma_は述語の基本形の動詞を示す。(text='買いました' : lemma_='買う')
8.ginza解析結果のent_type_は主語や目的語のタイプを示す。(今回はginza解析結果が''の場合、'unknown'で代用した)
9.上記までで取得した情報からノードとエッジの登録文のリストを作成し、戻り値として返す。(今回は登録文としてCREATE(ノードやエッジの新規登録のみ)でなくMERGE(ノードやエッジが存在すれば更新、存在しなければ新規登録)を使った)

# VSCodeで登録アプリ(test.py)実行時のダンプ
```
[ginza分析結果]
text:太郎,lemma_:太郎,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:nsubj,head.text:好き,ent_type_:Person,i:0,is_alpha:True,is_stop:False
text:は,lemma_:は,pos_:ADP,tag_:助詞-係助詞,dep_:case,head.text:太郎,ent_type_:,i:1,is_alpha:True,is_stop:True
text:明子,lemma_:明子,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:obj,head.text:好き,ent_type_:Person,i:2,is_alpha:True,is_stop:False
text:を,lemma_:を,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:明子,ent_type_:,i:3,is_alpha:True,is_stop:True
text:好き,lemma_:好き,pos_:ADJ,tag_:形状詞-一般,dep_:ROOT,head.text:好き,ent_type_:,i:4,is_alpha:True,is_stop:False
text:です,lemma_:です,pos_:AUX,tag_:助動詞,dep_:aux,head.text:好き,ent_type_:,i:5,is_alpha:True,is_stop:True
text:。,lemma_:。,pos_:PUNCT,tag_:補助記号-句点,dep_:punct,head.text:好き,ent_type_:,i:6,is_alpha:False,is_stop:False
text:
,lemma_:
,pos_:NUM,tag_:空白,dep_:compound,head.text:明子,ent_type_:,i:7,is_alpha:False,is_stop:False
text:明子,lemma_:明子,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:nsubj,head.text:好き,ent_type_:,i:8,is_alpha:True,is_stop:False
text:は,lemma_:は,pos_:ADP,tag_:助詞-係助詞,dep_:case,head.text:明子,ent_type_:,i:9,is_alpha:True,is_stop:True
text:次郎,lemma_:次郎,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:obj,head.text:好き,ent_type_:Person,i:10,is_alpha:True,is_stop:False
text:を,lemma_:を,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:次郎,ent_type_:,i:11,is_alpha:True,is_stop:True
text:好き,lemma_:好き,pos_:ADJ,tag_:形状詞-一般,dep_:ROOT,head.text:好き,ent_type_:,i:12,is_alpha:True,is_stop:False
text:です,lemma_:です,pos_:AUX,tag_:助動詞,dep_:aux,head.text:好き,ent_type_:,i:13,is_alpha:True,is_stop:True
text:。,lemma_:。,pos_:PUNCT,tag_:補助記号-句点,dep_:punct,head.text:好き,ent_type_:,i:14,is_alpha:False,is_stop:False
text:
,lemma_:
,pos_:NUM,tag_:空白,dep_:compound,head.text:次郎,ent_type_:,i:15,is_alpha:False,is_stop:False
text:次郎,lemma_:次郎,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:nsubj,head.text:弟,ent_type_:Person,i:16,is_alpha:True,is_stop:False
text:は,lemma_:は,pos_:ADP,tag_:助詞-係助詞,dep_:case,head.text:次郎,ent_type_:,i:17,is_alpha:True,is_stop:True
text:太郎,lemma_:太郎,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:nmod,head.text:弟,ent_type_:Person,i:18,is_alpha:True,is_stop:False
text:の,lemma_:の,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:太郎,ent_type_:,i:19,is_alpha:True,is_stop:True
text:弟,lemma_:弟,pos_:NOUN,tag_:名詞-普通名詞-一般,dep_:ROOT,head.text:弟,ent_type_:,i:20,is_alpha:True,is_stop:False
text:です,lemma_:です,pos_:AUX,tag_:助動詞,dep_:cop,head.text:弟,ent_type_:,i:21,is_alpha:True,is_stop:True
text:。,lemma_:。,pos_:PUNCT,tag_:補助記号-句点,dep_:punct,head.text:弟,ent_type_:,i:22,is_alpha:False,is_stop:False
text:
,lemma_:
,pos_:NUM,tag_:空白,dep_:ROOT,head.text:
,ent_type_:,i:23,is_alpha:False,is_stop:False
text:AS,lemma_:AS,pos_:NOUN,tag_:名詞-普通名詞-一般,dep_:compound,head.text:社,ent_type_:,i:24,is_alpha:True,is_stop:False
text:社,lemma_:社,pos_:NOUN,tag_:名詞-普通名詞-助数詞可能,dep_:nsubj,head.text:販売,ent_type_:,i:25,is_alpha:True,is_stop:False
text:は,lemma_:は,pos_:ADP,tag_:助詞-係助詞,dep_:case,head.text:社,ent_type_:,i:26,is_alpha:True,is_stop:True
text:ソフトウェア,lemma_:ソフトウェア,pos_:NOUN,tag_:名詞-普通名詞-一般,dep_:obj,head.text:販売,ent_type_:,i:27,is_alpha:True,is_stop:False      
text:を,lemma_:を,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:ソフトウェア,ent_type_:,i:28,is_alpha:True,is_stop:True
text:製造,lemma_:製造,pos_:VERB,tag_:名詞-普通名詞-サ変可能,dep_:compound,head.text:販売,ent_type_:,i:29,is_alpha:True,is_stop:False
text:・,lemma_:・,pos_:SYM,tag_:補助記号-一般,dep_:compound,head.text:販売,ent_type_:,i:30,is_alpha:False,is_stop:False
text:販売,lemma_:販売,pos_:VERB,tag_:名詞-普通名詞-サ変可能,dep_:ROOT,head.text:販売,ent_type_:,i:31,is_alpha:True,is_stop:False
text:し,lemma_:する,pos_:AUX,tag_:動詞-非自立可能,dep_:aux,head.text:販売,ent_type_:,i:32,is_alpha:True,is_stop:True
text:て,lemma_:て,pos_:SCONJ,tag_:助詞-接続助詞,dep_:mark,head.text:販売,ent_type_:,i:33,is_alpha:True,is_stop:True
text:いる,lemma_:いる,pos_:VERB,tag_:動詞-非自立可能,dep_:fixed,head.text:て,ent_type_:,i:34,is_alpha:True,is_stop:True
text:。,lemma_:。,pos_:PUNCT,tag_:補助記号-句点,dep_:punct,head.text:販売,ent_type_:,i:35,is_alpha:False,is_stop:False
text:
,lemma_:
,pos_:NUM,tag_:空白,dep_:compound,head.text:明子,ent_type_:,i:36,is_alpha:False,is_stop:False
text:明子,lemma_:明子,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:nsubj,head.text:勤め,ent_type_:,i:37,is_alpha:True,is_stop:False
text:は,lemma_:は,pos_:ADP,tag_:助詞-係助詞,dep_:case,head.text:明子,ent_type_:,i:38,is_alpha:True,is_stop:True
text:AS,lemma_:AS,pos_:NOUN,tag_:名詞-普通名詞-一般,dep_:compound,head.text:社,ent_type_:,i:39,is_alpha:True,is_stop:False
text:社,lemma_:社,pos_:NOUN,tag_:名詞-普通名詞-助数詞可能,dep_:obl,head.text:勤め,ent_type_:,i:40,is_alpha:True,is_stop:False
text:に,lemma_:に,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:社,ent_type_:,i:41,is_alpha:True,is_stop:True
text:勤め,lemma_:勤める,pos_:VERB,tag_:動詞-一般,dep_:ROOT,head.text:勤め,ent_type_:,i:42,is_alpha:True,is_stop:False
text:て,lemma_:てる,pos_:AUX,tag_:助動詞,dep_:aux,head.text:勤め,ent_type_:,i:43,is_alpha:True,is_stop:True
text:ます,lemma_:ます,pos_:AUX,tag_:助動詞,dep_:aux,head.text:勤め,ent_type_:,i:44,is_alpha:True,is_stop:True
text:。,lemma_:。,pos_:PUNCT,tag_:補助記号-句点,dep_:punct,head.text:勤め,ent_type_:,i:45,is_alpha:False,is_stop:False
text:
,lemma_:
,pos_:NUM,tag_:空白,dep_:ROOT,head.text:
,ent_type_:,i:46,is_alpha:False,is_stop:False
text:太郎,lemma_:太郎,pos_:PROPN,tag_:名詞-固有名詞-人名-名,dep_:nsubj,head.text:買い,ent_type_:Person,i:47,is_alpha:True,is_stop:False
text:は,lemma_:は,pos_:ADP,tag_:助詞-係助詞,dep_:case,head.text:太郎,ent_type_:,i:48,is_alpha:True,is_stop:True
text:AS,lemma_:AS,pos_:NOUN,tag_:名詞-普通名詞-一般,dep_:compound,head.text:社,ent_type_:,i:49,is_alpha:True,is_stop:False
text:社,lemma_:社,pos_:NOUN,tag_:名詞-普通名詞-助数詞可能,dep_:obl,head.text:買い,ent_type_:,i:50,is_alpha:True,is_stop:False
text:から,lemma_:から,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:社,ent_type_:,i:51,is_alpha:True,is_stop:True
text:ソフトウェア,lemma_:ソフトウェア,pos_:NOUN,tag_:名詞-普通名詞-一般,dep_:obj,head.text:買い,ent_type_:,i:52,is_alpha:True,is_stop:False      
text:を,lemma_:を,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:ソフトウェア,ent_type_:,i:53,is_alpha:True,is_stop:True
text:3万,lemma_:3万,pos_:NUM,tag_:名詞-数詞,dep_:compound,head.text:円,ent_type_:Money,i:54,is_alpha:False,is_stop:False
text:円,lemma_:円,pos_:NOUN,tag_:名詞-普通名詞-助数詞可能,dep_:obl,head.text:買い,ent_type_:Money,i:55,is_alpha:True,is_stop:False
text:で,lemma_:で,pos_:ADP,tag_:助詞-格助詞,dep_:case,head.text:円,ent_type_:,i:56,is_alpha:True,is_stop:True
text:買い,lemma_:買う,pos_:VERB,tag_:動詞-一般,dep_:ROOT,head.text:買い,ent_type_:,i:57,is_alpha:True,is_stop:False
text:まし,lemma_:ます,pos_:AUX,tag_:助動詞,dep_:aux,head.text:買い,ent_type_:,i:58,is_alpha:True,is_stop:False
text:た,lemma_:た,pos_:AUX,tag_:助動詞,dep_:aux,head.text:買い,ent_type_:,i:59,is_alpha:True,is_stop:True
text:。,lemma_:。,pos_:PUNCT,tag_:補助記号-句点,dep_:punct,head.text:買い,ent_type_:,i:60,is_alpha:False,is_stop:False
text:
,lemma_:
,pos_:NUM,tag_:空白,dep_:ROOT,head.text:
,ent_type_:,i:61,is_alpha:False,is_stop:False

[登録Cypher]
MERGE (n0:Person {name:'太郎'}) ON CREATE SET n0.vector=[-0.2106115072965622, -0.11719610542058945, 0.2813989520072937, 0.00996147096157074, -0.1804388165473938, 0.10936879366636276, 0.41256293654441833, 0.31228888034820557, 0.3112154006958008, 0.1385888010263443, 0.020292062312364578, 0.009421046823263168, -0.1905181109905243, -0.06253637373447418, 0.044488947838544846, -0.19789427518844604, -0.01980665884912014, -0.11420885473489761, 0.035298921167850494, 0.04272640496492386, 0.4232092797756195, -0.013531751930713654, 0.012020817957818508, -0.2357516884803772, -0.4452211856842041, -0.30947208404541016, -0.0013552280142903328, 0.3587712049484253, -0.18464040756225586, -0.3172908425331116, 0.20732975006103516, 0.12417087703943253, 0.1760205626487732, -0.23735861480236053, -0.001135135069489479, 0.2770546078681946, 0.012646045535802841, -0.18743261694908142, 0.0733693391084671, 0.274662047624588, 0.09410813450813293, -0.28002482652664185, -0.042828530073165894, 0.20990519225597382, -0.29970628023147583, -0.011200692504644394, 0.11947488784790039, -0.012052875012159348, 0.0022450496908277273, 0.28580695390701294, -0.07016704231500626, 0.2983679175376892, -0.2857915759086609, -0.29562920331954956, 0.30090171098709106, 0.12963223457336426, 0.1427115797996521, 0.1606137603521347, -0.2982638478279114, -0.006517490372061729, -0.1788012981414795, 0.49330824613571167, -0.5815352201461792, -0.07760810106992722, 0.05163995549082756, -0.19510489702224731, 0.10089409351348877, -0.24961990118026733, -0.10925478488206863, 0.02562079019844532, -0.22961992025375366, -0.18947023153305054, -0.08725348860025406, 0.15791986882686615, -0.16811414062976837, 0.013610891997814178, -0.20522522926330566, 0.23502205312252045, -0.16181445121765137, -0.4245959520339966, -0.42804500460624695, 0.005081175826489925, -0.08057728409767151, -0.10770393162965775, 0.004946935921907425, 0.19629475474357605, -0.03179384022951126, 0.12894007563591003, 0.552328884601593, 0.22428420186042786, 0.17483961582183838, -0.05577933043241501, 0.41140493750572205, 0.33211731910705566, 0.37893956899642944, -0.2503437101840973, 0.2463565468788147, -0.0448957160115242, -0.21340586245059967, 1.407063364982605, 0.13293689489364624, 0.025447798892855644, 0.007259072735905647, -0.2677081525325775, -0.0803259015083313, -0.031318750232458115, 0.026775624603033066, -0.5300508141517639, -0.4344254732131958, 0.21178597211837769, -0.013338793069124222, -0.12196996062994003, -0.12158681452274323, 0.06337612122297287, -0.15003348886966705, 0.11047447472810745, -0.2596037685871124, 0.2388259768486023, -0.20965686440467834, -0.27292072772979736, -0.19829151034355164, -0.2317531406879425, 0.22770173847675323, 0.3492024838924408, -0.043256159871816635, -0.5198546648025513, 0.35584843158721924, 0.11558285355567932, 0.14646866917610168, 0.22283835709095, 0.11227208375930786, 0.14859992265701294, -0.2699131965637207, 0.5551730394363403, -0.08578541874885559, -0.007958877831697464, 0.2998240292072296, 0.14008085429668427, -0.10139539837837219, -0.18924954533576965, -0.23706582188606262, 0.04098602011799812, -0.1589546501636505, 0.060914378613233566, 0.21303382515907288, -0.18952295184135437, -0.1332319676876068, -0.3685764670372009, -0.03557080402970314, 0.324972540140152, -0.084566131234169, -0.1936897337436676, -0.06593646854162216, 0.21488574147224426, 0.14681385457515717, -0.38307124376296997, 0.05852566659450531, 0.048914071172475815, 0.4902215898036957, 0.311909019947052, -0.3577539026737213, 0.1066463366150856, -0.07553469389677048, 0.07805828005075455, -0.3274804651737213, -0.14907848834991455, -0.5526140928268433, 0.18515834212303162, 0.04838185757398605, -0.11541759967803955, 0.4402194321155548, 0.18437038362026215, -0.40562593936920166, 0.07048608362674713, -0.032581478357315063, -0.22690677642822266, -0.2981760501861572, -0.0767308846116066, -0.18718907237052917, 0.4265635013580322, 0.16607539355754852, 0.1396556943655014, -0.3070601224899292, -0.05425009876489639, -0.04938943684101105, -0.18003308773040771, -0.013830989599227905, 0.22738149762153625, 0.24582061171531677, -0.1743190586566925, 0.11690639704465866, 0.04416750743985176, 0.1304713785648346, 0.10832177102565765, -0.24093860387802124, -0.20693626999855042, 0.3729458153247833, 0.17722785472869873, 0.305472195148468, 0.008574560284614563, -0.4364769160747528, 0.21684470772743225, -0.04368645325303078, -0.46985870599746704, 0.11968891322612762, -0.351434588432312, -0.13627874851226807, 0.05646679922938347, -0.003568503074347973, 0.16360357403755188, 0.25797051191329956, -0.29076066613197327, -0.410119891166687, 0.28796714544296265, 0.20315703749656677, 0.061739902943372726, 0.12573502957820892, -0.0013405987992882729, -0.233321875333786, 0.07262054085731506, 0.49020230770111084, -0.35200971364974976, -0.08292123675346375, -0.3514377772808075, 0.39799556136131287, -0.4775390326976776, -0.05955621227622032, -0.03551620617508888, -0.01084975153207779, -0.06957556307315826, 0.20427465438842773, 0.24723346531391144, -0.21056842803955078, -0.016282526776194572, -0.27533602714538574, -0.11686504632234573, 0.33741357922554016, -0.12384124100208282, 0.15946683287620544, 0.14047104120254517, -0.16098381578922272, -0.2432321310043335, 0.15501603484153748, 0.2475898265838623, -0.24153539538383484, -0.14339494705200195, -0.14386457204818726, 0.8434216976165771, -0.38257426023483276, 0.3437471389770508, 0.18606960773468018, -0.2954410910606384, -0.30164116621017456, 0.14969389140605927, 0.2932886481285095, 0.012421058490872383, -0.3854062855243683, 0.05551278218626976, 0.15192098915576935, 0.298009991645813, 0.3620585799217224, 0.03291294723749161, -0.20762214064598083, 0.21726280450820923, 0.40285342931747437, -0.23165030777454376, -0.007051646709442139, 0.024592041969299316, 0.02324795350432396, 0.17483706772327423, -0.15875282883644104, 0.11279016733169556, -0.29338538646698, -0.2662122845649719, 0.16358515620231628, -0.066329225897789, 0.2885802984237671, -0.5040294528007507, 0.11293739080429077, 0.34767383337020874, -0.3356795907020569, -0.2714221775531769, -0.042890749871730804, 0.20228731632232666, 0.0733591616153717, -0.2265622764825821, -0.16010285913944244, -0.30959320068359375, -0.1575392633676529, -0.11056043952703476, -0.03588081896305084, -0.050169751048088074, 0.08677853643894196, -0.0267029982060194, 0.12398207932710648, -0.3147507905960083, 0.12196502089500427, 0.5111790895462036, 0.07903558760881424, 0.04635661840438843, 0.06143385171890259, -0.5633187294006348, 0.32154759764671326, -0.36572423577308655, 0.06081700325012207, -0.20594295859336853, -0.20284518599510193, 0.004818633198738098, 0.01451256312429905, 0.15039724111557007, 0.07883056998252869, -0.32439708709716797, 0.07455694675445557, -0.041297830641269684, 0.09243437647819519, 0.36084529757499695, -0.014919927343726158, -0.09591460227966309, 0.6272990703582764, -0.7628309726715088, 0.20350372791290283, -0.16192665696144104, -0.13296152651309967, 0.5065715909004211, -0.2613382339477539, 0.059430260211229324, -0.007443413138389587, 0.10355095565319061, 0.04453269764780998, -0.07539539039134979, -0.17812573909759521, -0.05229005590081215, -0.08753401786088943, -0.07507027685642242, 0.26689058542251587, 0.19443626701831818, 0.01064140535891056, 0.40115588903427124, -0.07667845487594604, -0.0859241783618927, 0.39819878339767456, 0.0009236093610525131, 0.137945294380188, -0.3062558174133301, -0.19329452514648438, -0.06129182502627373, -0.13337482511997223, -0.2249523103237152, -0.10932992398738861, -0.32142695784568787, -0.04763332009315491, -0.02855922281742096, -0.22924354672431946, -0.23500192165374756, 0.13428659737110138, 0.4488615095615387, 0.1390974521636963, -0.06748539209365845, 0.5670657157897949, 0.17054009437561035, 0.3195047378540039, 0.08468650281429291, -0.13811880350112915, 0.000705081969499588, -0.11557428538799286, -0.025645887479186058, -0.28269368410110474, -0.04948686063289642, -0.06235674023628235, -0.06146681308746338, 0.04184674471616745, 0.27250391244888306, 0.26987382769584656, 0.12706494331359863, -0.04418202489614487, -0.013597292825579643, 0.07120731472969055, -0.06872153282165527, -0.06058391556143761, 0.3147452771663666, 0.376045823097229, -0.16350311040878296, -0.22595363855361938, -0.0

MATCH (n1 {name:'太郎'}),(n2 {name:'ソフトウェア'}) MERGE (n1)-[r:買う]->(n2) ON CREATE SET r.vector=[0.017714956775307655, 0.02911498211324215, -0.15901337563991547, 0.018130797892808914, -0.004355526529252529, 0.008973406627774239, 0.3282196521759033, 0.09961677342653275, 0.032194651663303375, -0.1374494880437851, 0.2162638157606125, -0.06530561298131943, 0.07528968155384064, 0.07860413193702698, -0.00012264493852853775, 0.007899373769760132, 0.13484543561935425, -0.02552216313779354, 0.022348036989569664, 0.0186317041516304, -0.1262548267841339, -0.12172077596187592, -0.1287248581647873, 0.013041590340435505, 0.011758336797356606, -0.08644558489322662, -0.21062816679477692, -0.020505059510469437, 0.05030510574579239, -0.22406864166259766, 0.15777471661567688, -0.1731070876121521, 0.042408306151628494, 0.17592217028141022, 0.05970926210284233, -0.01963268220424652, 0.020398804917931557, -0.08374204486608505, 0.26981237530708313, -0.04873950779438019, 0.02500441111624241, 0.11695066839456558, -0.09897235035896301, 0.11239828169345856, 0.0014728577807545662, 0.2514202296733856, 0.20303374528884888, 0.0980939194560051, 0.07833729684352875, 0.2372579574584961, 0.047835372388362885, -0.24199290573596954, -0.08647628873586655, -0.10763557255268097, -0.047416266053915024, 0.1312905251979828, 0.011245040223002434, 0.016951367259025574, -0.039606910198926926, 0.15788929164409637, 0.031896594911813736, -0.2701565623283386, -0.4353199303150177, 0.10115603357553482, -0.434640109539032, -0.31997960805892944, -0.23283357918262482, 0.06374701857566833, -0.31329554319381714, 0.20971640944480896, 0.14737342298030853, -0.07009491324424744, -0.12583069503307343, 0.1746004819869995, -0.03172330930829048, -0.13214077055454254, 0.18703655898571014, -0.10827592760324478, 0.07039888948202133, 0.014224196784198284, -0.26089850068092346, -0.008835474029183388, -0.08203648030757904, -0.014348541386425495, -0.14486558735370636, 0.19512037932872772, 0.1901046335697174, 0.22853022813796997, 0.2203700691461563, -0.06598182022571564, 0.12149494886398315, -0.007608866319060326, 0.238255113363266, 0.047858476638793945, 0.08890534192323685, -0.06372305750846863, 0.036092184484004974, -0.08263247460126877, 0.1845981478691101, 1.509389042854309, -0.033217187970876694, 0.16530421376228333, 0.11166274547576904, -0.317375123500824, -0.10201141238212585, -0.19194181263446808, 0.011230703443288803, 0.2629551291465759, -0.045638225972652435, -0.008233018219470978, -0.3073321580886841, 0.03373754769563675, -0.09526120126247406, 0.04126378521323204, -0.23448620736598969, 0.08968129009008408, -0.3025176525115967, -0.12548035383224487, 0.15580612421035767, -0.07049890607595444, 0.022915970534086227, 0.08076705038547516, 0.1272326111793518, -0.02891482040286064, -0.17750811576843262, -0.6947950124740601, 0.24385754764080048, 0.15389545261859894, -0.1588735282421112, 0.046034492552280426, 0.03895768150687218, -0.0225197896361351, -0.2113795280456543, 0.09483230859041214, -0.09672962129116058, 0.15252898633480072, -0.06424560397863388, 0.3215494751930237, 0.011390430852770805, -0.1749928891658783, -0.3768330514431, 0.3496089577674866, -0.035619549453258514, 0.13815750181674957, -0.12711413204669952, -0.12939172983169556, 0.10343724489212036, -0.30039137601852417, 0.005434582009911537, 0.24061110615730286, -0.12473294138908386, -0.024348285049200058, 0.15865394473075867, -0.0685550719499588, -0.22751972079277039, -0.20939664542675018, 0.12360453605651855, 0.06030779704451561, 0.101140595972538, -0.055288106203079224, -0.13523359596729279, 0.0078093125484883785, -0.15762948989868164, -0.1322479397058487, -0.10231469571590424, -0.1583000123500824, -0.04451487958431244, 0.11197558790445328, 0.09482426941394806, 0.006362373009324074, 0.035322293639183044, 0.07704497873783112, -0.11648886650800705, 0.29725849628448486, -0.037260279059410095, 0.02316388487815857, -0.2119792401790619, 0.11978517472743988, -0.008101590909063816, -0.031735315918922424, 0.048907142132520676, 0.13512155413627625, -0.08231623470783234, 0.06587846577167511, -0.08951035887002945, -0.03714221715927124, -0.006018556654453278, -0.130720317363739, 0.16796095669269562, -0.013258089311420918, 0.23368492722511292, -0.1129782423377037, -0.28001293540000916, 0.0942578911781311, -0.09468263387680054, -0.12446251511573792, -0.10529720783233643, 0.1372733861207962, 0.10483940690755844, -0.003835471346974373, -0.1855766475200653, -0.22755923867225647, 0.11614636331796646, -0.27514174580574036, 0.2663135230541229, 0.1656092405319214, 0.305184930562973, -0.041692882776260376, -0.011111345142126083, -0.003968469798564911, 0.054841794073581696, 0.17499148845672607, -0.083157479763031, 0.17735806107521057, -0.009382511489093304, -0.08322929590940475, 0.043698765337467194, -0.009843986481428146, -0.24528047442436218, 0.07742281258106232, -0.07943642884492874, -0.13299144804477692, 0.20709526538848877, -0.45718640089035034, -0.009477024897933006, -0.2619006931781769, 0.03863104432821274, 0.17098747193813324, 0.07540275901556015, -0.06077700853347778, -0.0850084200501442, -0.045456770807504654, 0.22811158001422882, -0.06054060533642769, -0.2567732036113739, -0.08584913611412048, 0.05115853622555733, 0.03782925754785538, 0.06392723321914673, 0.1103563979268074, -0.13425913453102112, -0.057339027523994446, 0.16131620109081268, 0.01998678408563137, 0.03836304694414139, 0.00789866503328085, -0.06790555268526077, 0.2627408802509308, -0.018999142572283745, 0.20533770322799683, -0.05169999971985817, -0.11555159837007523, 0.05369511991739273, 0.12502773106098175, -0.03465832769870758, -0.26733845472335815, -0.16143731772899628, 0.1744108498096466, -0.06765397638082504, -0.02080666273832321, 0.11857232451438904, -0.2713777422904968, -0.1715538501739502, 0.0652807205915451, 0.1642688810825348, -0.1689685434103012, -0.14543722569942474, 0.3414006531238556, 0.1333455741405487, -0.12116310000419617, 0.002785874530673027, -0.16069263219833374, 0.23194003105163574, -0.0638183206319809, 0.20180147886276245, 0.10712630301713943, 0.12275561690330505, -0.16036540269851685, -0.15655623376369476, 0.17281976342201233, 0.1700412929058075, -0.15224242210388184, 0.22286945581436157, 0.1659267246723175, -0.02554503083229065, -0.040284425020217896, 0.021600930020213127, 0.1339096575975418, -0.2228965312242508, 0.049749892204999924, 0.14538925886154175, 0.16903533041477203, -0.06814884394407272, -0.09102658182382584, -0.1507759541273117, -0.1621992588043213, -0.07225699722766876, -0.1174965649843216, 0.037727177143096924, 0.3349296450614929, 0.1286621242761612, 0.12513765692710876, -0.06920979917049408, -0.09667998552322388, -0.03240158408880234, -0.047270603477954865, 0.1304076910018921, 0.19690236449241638, 0.279889315366745, -0.13483715057373047, -0.17836511135101318, 0.08797517418861389, -0.15308132767677307, -0.09294408559799194, 0.003653198480606079, 0.11023741960525513, 0.10456342995166779, 0.027230052277445793, -0.03652789816260338, -0.5319399833679199, -0.04163835197687149, -0.19984889030456543, 0.16457988321781158, 0.14344942569732666, 0.18472974002361298, 0.009119359776377678, -0.16230508685112, 0.02058524824678898, 0.12958723306655884, 0.03966711461544037, -0.15040650963783264, -0.12419422715902328, -0.1563369333744049, 0.06017092987895012, 0.031409040093421936, 0.04394441470503807, -0.16347435116767883, -0.07483888417482376, -0.10542339831590652, 0.019200066104531288, 0.13739550113677979, 0.12437479943037033, 0.38956353068351746, -0.05799619108438492, -0.05799919366836548, 0.03196621686220169, -0.003792097792029381, -0.03303978964686394, 0.2231035828590393, 0.2090887725353241, 0.046280525624752045, 0.18953803181648254, -0.2109614908695221, 0.04838518425822258, 0.19280491769313812, -0.033573027700185776, -0.17088942229747772, -0.06929107010364532, 0.18011151254177094, 0.010490653105080128, 0.08642935752868652, 0.027767233550548553, -0.06200040876865387, 0.03705387935042381, -0.15028715133666992, 0.1050172746181488, -0.08055099844932556, -0.27493247389793396, 0.014684652909636497, -0.04027207940816879, -0.01404764223843813, -0.15849296748638153, -0.1444309949874878, -0.075358547270298, 0.08957040309906006, -0.059475623071193695, -0.15196771919727325, -0.10282690823078156, -0.11774449795484543, 0.2814652919769287, 0.11070258915424347, -0.2987695634365082, -0.135541632771492, 0.3215635418891907],r.FileName='ner_data.txt',r.SntncNo=6,r.SntncText='太郎はAS社からソフトウェアを3万円で買いま

```

# neo4j Desktopからneo4j Browserを起動し、登録したグラフ情報を検索する
1.全体
条件を限定せず全て表示するので、「match(n) return n」というCypherを入力し、▶をクリック
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/36ea780d-7704-42ba-8f48-3291624e8227.png)

2.太郎の購入の詳細
「買う」の線をクリックすると、右のウインドウに「Money:3万円」「unknown:AS社」が紐づいていることを確認できる。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/be09eed4-2c91-467f-b3ed-4878a15e71a5.png)

3.AS社に関連する情報を検索
条件をAS社に限定して表示するので、「match(n {name:'AS社'})-[r]-(m) return n,r,m」というCypherを入力し、▶をクリック
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/27ed8a25-eebf-403b-a1ac-1aef72af97a8.png)

4.明子さんの人間関係
条件を明子でタイプが人に限定して表示するので、「match(n {name:'明子'})-[r]-(m:Person) return n,r,m」というCypherを入力し、▶をクリック
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3989768/7b051aef-8efb-4623-8925-a5bc3ceddd0c.png)

# 最後に
今回は日本語文を解析するツールとしてGINZAを使い、その解析結果をもとにグラフ情報登録文を作成する処理を自作ロジックで試しましたが、やはり単純な構造の文にしか対応できず、仕事や日常で使われている複雑な構造の文章を扱うのは難しいと感じました。
LangChainなどを利用すれば、もっと複雑な構造の文章を扱えるのではと推測しています。

以上