È possibile utilizzare Lucene SpanQuery per trovare tutte le occorrenze in cui i termini "rosso" "verde" e "blu" appaiono tutti all'interno di una singola frase?Ricerca sensibile alle frasi con Lucene SpanQuery
Il mio primo approccio (incompleto/errato) è quello di scrivere un analizzatore che posiziona un token marcatore di frase speciale e l'inizio di una frase nella stessa posizione della prima parola della frase e quindi di eseguire una query per qualcosa di simile al seguenti:
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);
il problema, naturalmente, è che nextSentence
non è davvero il prossimo frase, è qualsiasi marcatore frase, compreso quello nella frase che termsInSentence
partite. Quindi questo non funzionerà.
Il mio prossimo approccio è creare l'analizzatore che posiziona il token prima della frase (ovvero prima della prima parola anziché nella stessa posizione della prima parola). Il problema con questo è che devo quindi tenere conto dell'offset extra causato da MY_SPECIAL_SENTENCE_TOKEN
. Inoltre, questo sarà particolarmente negativo all'inizio quando sto usando un modello naif per dividere le frasi (ad es. Dividere su /\.\s+[A-Z0-9]/
) perché dovrò tenere conto di tutti i (falsi) indicatori di frase quando cerco USS Enterprise.
Quindi ... come dovrei avvicinarmi a questo?