自然言語文構造ツリーのデータベースを保存および検索する最良の方法は何ですか?自然言語文構造の検索
使用方法英語Treebank Parserを使用すると、任意の文章に対してかなり信頼できる文章構造解析を行うことができます。私がしたいのは、ソースコードからすべてのドキュメント文字列を抽出し、ドキュメント文字列内のすべての文に対してこれらのツリーを生成し、これらのツリーと関連する関数名をデータベースに格納してから、ユーザーは自然言語のクエリを使用してデータベースを検索します。
ので、機能upload_files()
のための文章"This uploads files to a remote machine."
与え、私は木を持っているだろう:「?どうやってファイルをアップロードすることができます」
(TOP
(S
(NP (DT This))
(VP
(VBZ uploads)
(NP (NNS files))
(PP (TO to) (NP (DT a) (JJ remote) (NN machine))))
(. .)))
誰かがクエリを入力した場合は、ツリーに等化:
(TOP
(SBARQ
(WHADVP (WRB How))
(SQ (MD can) (NP (PRP I)) (VP (VB upload) (NP (NNS files))))
(. ?)))
これらのツリーをSQLデータベースに保存して照会するにはどうすればよいですか?
私は、正規表現とネットワークグラフの解析を組み合わせてこの検索を実行できる簡単な概念実証スクリプトを作成しましたが、これをスケーラブルな方法で実装する方法がわかりません。
はい、私の例が簡単なキーワード検索を使用して取得するのは簡単ではないことがわかります。私がテストしようとしている考え方は、文法構造をどのように活用できるかということです。類似したキーワードを持つエントリを取り除くことはできますが、文構造は異なります。たとえば、上記のクエリでは、類似のキーワードを持つ文"Checks a remote machine to find a user that uploads files."
に関連付けられているエントリを取得するのは望ましくありませんが、明らかに全く異なる動作を記述しています。
これは興味深いアイデアですが、私はセマンティックWebオントロジーを使用することは、あなたが述べているより少し複雑に思えるでしょう。それは単一の平らな三つ組ほど単純ではありません。サブジェクト、述語、およびオブジェクトはそれぞれ、品詞でタグ付けする必要があるネストされたトリプルであってもよい。 – Cerin
@Cerin:オントロジーでは、すでに「きれいになった」データ、つまり事実ではなく、言葉自体で作業しています。また、オントロジのトリプルはネストすることはできませんが、かなり大きなサブグラフを作成することができます。最も難しいことは、文章を事実に翻訳することですが、とにかく効率的な検索を実行するためには翻訳する必要があります。なぜなら、それを構造に翻訳しないでください。それはよく知られており、何千もの論文に記述されています。ドメイン領域からの非常に基本的なトリプルを使っていくつかの初期オントロジーを手動で作成し、それを使って新しいファクトをマップし、それを拡大することができます。 – ffriend
私はあなたの意見を見ますが、これは実用的ではないかもしれません。データは決して完全に「クリーン」ではありません。 OpenNLPは確信度でタグ付けされたいくつかのパースを出力するので、オントロジの各サブグラフはこの不確実性を保存して推論する必要があります。事実と言葉/文を明確に区別することもありません。私は検索を改善するために文法的構造を利用したいだけです。セマンティクスも解釈しようとすると、範囲外です。 – Cerin