1

だから私は日本語を含む個人的なプロジェクトに取り組んでいます。このプロジェクトでは、Neo4J データベースも使用しています。

私はあなたの専門知識が欲しい非常に独特な問題に出くわしました。

基本的に、DB からいくつかの日本語の文字 (ひらがなと呼ばれる) を取得します。特別なことは何もありません。音節は 1 文字 (「に」、「に」など) または 2 文字 (「にょ」、「にょ」など) で構成されるという事実に基づいて、ひらがなをいくつかのサブカテゴリに分けました。に (に) と よう (よ) から作られます)。

したがって、私のカテゴリには次の構造があります(ここでは少し簡略化されています):

Hiragana ------- Single character hiragana (like に)
            |--- Double character hiragana (like にょ)

これらの各カテゴリは、ひらがな値 (にやにょなど) を含むノード (ここでは項目と呼ばれます) にリンクされています。これらの文字を取得するには、「ひらがなリストのサブリストに属するすべての文字を取得してください」のようなクエリを作成します。実際のコードは特別なものではなく、次のようになります。

match(list:item_list)-[:sub_list*0..]->(sublist)-[:list_item]->(kana:item)-[:romaji]->(romaji:item)
where list.name =~'(?i)Hiragana'
return kana.value as item, romaji.value as answer  ORDER BY kana asc

これから、次のエラーが発生します。

Don't know how to compare that. Left: Node[496]{value:"にゅ"} (NodeProxy);
Right: Node[498]{value:"にょ"} (NodeProxy)

最初から、同じタイプ (NodeProxy) を持っているように見えるため、DB エンジンがこれらを比較する方法を知らないことに戸惑っています。また、クエリがノードの値を他のノードと比較しようとしていたとは感じません。

とにかく、以前に使用したことがあり、機能したため、クエリの変更を開始しました。しばらく検索した後、return 句でkana.value を itemに変更すると、たとえばkana.value を kanaに変更すると、突然再び機能することに気付きました。

その値をもう少し変更したところ、次の結果が得られました。

  • かな.value as item : KO
  • kana.value as kana : OK
  • kana.value as test : KO
  • kana.value as es : KO
  • かな.値としての質問: KO
  • kana.value ローマ字 : KO
  • kana.value ひらがな : KO
  • return kana.value : KO
  • kana.value as a : KO
  • kana.value as kanak : KO

なんらかの理由で、「カナとしてのカナ.値」のみが機能しました...

何が起こっているのか分かりますか?これはバグであり、私のミスではありませんか?

ロイック。

PS:データベースを呼び出すためにphpでgraphawareライブラリを使用していますが、noe4jブラウザでもエラーが発生するため、問題は無関係です

4

1 に答える 1

0

この問題の根本的な原因は見つかりませんでしたが、回避策を見つけました。

この問題を未解決のままにしておくことに満足はしていませんが、これに必要以上に時間を費やしたくないし、皆さんにもこれで時間を無駄にしてほしくありません。

回避策

だから私がしたことは、クエリの一部を変更することでした。ノードに「kana 」という名前を付けて「 kana.value 」を返す代わりに、名前を「 character 」に変更し、「character.value」を返すようになりました。

うまくいきます。理由は聞かないでください。

古いクエリ:

match(list:item_list)-[:sub_list*0..]->(sublist)-[:list_item]->(kana:item)-[:romaji]->(romaji:item)
where list.name =~'(?i)Hiragana'
return kana.value as item, romaji.value as answer  ORDER BY kana asc

新しいクエリ:

match(list:item_list)-[:sub_list*0..]->(sublist)-[:list_item]->(character:item)-[:romaji]->(romaji:item)
where list.name =~ '(?i)Hiragana' return character.value as item, romaji.value as answer

よろしく、

ロイック。

于 2016-07-13T03:14:32.917 に答える