Lucene SpanQueryを使用して、 "赤" "緑"と "青"という用語がすべて1つの文に表示されるすべての出現を見つけることはできますか?Lucene SpanQueriesを使用した文章認識検索
私の最初の(不完全/間違った)アプローチは、特別な文章マーカトークンと文の最初の部分を文の最初の単語と同じ位置に置くアナライザを作成してから、次
SpanQuery termsInSentence = new SpanNearQuery(
SpanQuery[] {
new SpanTermQuery(new Term (MY_SPECIAL_SENTENCE_TOKEN)),
new SpanTermQuery(new Term ("red")),
new SpanTermQuery(new Term ("green")),
new SpanTermQuery(new Term ("blue")),
},
999999999999,
false
);
SpanQuery nextSentence = new SpanTermQuery(new Term (MY_SPECIAL_SENTENCE_TOKEN));
SpanNotQuery notInNextSentence = new SpanNotQuery(termsInSentence,nextSentence);
問題、当然のことながら、nextSentence
は本当に次の文章ではないということです、それは文というtermsInSentence
試合で1を含め、任意の文マーカーです。したがって、これは動作しません。
私の次のアプローチは、トークンを文の前に置くアナライザを作成することです(つまり、の前に、最初の単語と同じ位置ではなく最初の単語)。この問題は、MY_SPECIAL_SENTENCE_TOKEN
によって引き起こされた余分なオフセットを考慮する必要があることです。さらに、文章を分割するための素朴なパターン(例えば、/\.\s+[A-Z0-9]/
の分割)を使用しているときは、最初は特に悪くなります。USSエンタープライズを検索すると、すべての(false)文マーカーを考慮する必要があるためです。。
これはどうすればよいですか?