2012-01-06 17 views
1

私はGATE(JavaベースのNLPフレームワーク)を使用しており、辞書と部分的に一致する単語を探したいと思っています。 たとえば、私は次の用語辞書の部分一致

Congestive cardiac failure 
Congestive Heart Failure 
Colon Cancer 
     . 
     . 
     . 
Thousands of more terms 

のは、それが辞書での用語の一部として発生するので、私は、この文字列から文字列"Father had cardiac failure last year"として、私は部分一致として「心不全」を識別したいしていると仮定しましょうと病気の辞書を持っています。

私はPython、JS、C#で同様の問題について議論してきましたが、ここでは何が助けになるのか分かりません。 ここでAho-Corrasickを利用できるのだろうかと思います。

+0

@eowlからの主なアイデアを使用して、同様のコンポーネントを開発ちょっとおかげで、私はただの提案に努めますが、として今は私の質問をそこに掲載することはできません。正しいのですか? – Sap

+0

@eow私はSOと同じログインを使用していたので、同じ名前が表示されますが、同じスコアは表示されません。 – Sap

答えて

1

多分Luceneを使用する必要があります。辞書の各行をドキュメントとして扱い、テキスト中の各センテンスをクエリとして扱います。

+0

私はそれについて考えましたが、このテクニックには多くの反復が必要であり、マッチの品質はそれほど高くないと確信しています。現時点ではフリーテキスト検索のために既に同じ辞書でLuceneを使用していますが、「膝の痛み」のようなクエリを作成すると鮮明な結果が得られます – Sap

1

発生する質問の1つは、検索に含める部分文字列です。あなたがすべての部分文字列を含んでいれば、 "Heart"だけでも一致しますが、それは実際には病気ではありません。 右揃え(単語)の部分文字列(おそらく長さ> 1)は許容されるかもしれません。

あなたが含めることができる1つのことは、含めるサブストリングでAho-Corrasickパターンマッチャーを訓練することです。部分文字列の辞書情報が得られるようにするには、アルゴリズムを少し変更するか(その情報を保持することが重要な場合)、後でそれを調べる別のデータ構造を構築する必要があります。

いずれにしても、トレーニング/マッチングの前に、病気リストと検索するドキュメントを小文字に変換します。スペルミスの可能性がある場合は、あいまいなaho-corasickオートマトンの記事もあります。