Есть ли способ поиска частых фраз с Lucene
?Найти частые фразы в тексте
Я успешно поиске частых слов:
TermStats[] ts = HighFreqTerms.getHighFreqTerms(reader, 20, fieldName, comparator);
, но это приносит отдельные слова, и я ищу способ для поиска частых два (или любое количество) словосочетаниям.
Чтобы уточнить, я не ищу два первых слова, которые я знаю (например, быстро и автомобиль), но верхние две частые комбинации слов. Поэтому, если мой текст «это быстрый автомобиль, и это тоже быстрый автомобиль», я получу в результате, что «быстрая машина» и «это» являются двумя верхними комбинациями слов.
Я смотрел на обсуждение here но предлагает решение с solr
и я искал что-то с Lucene
, и в любом случае соответствующая ссылка сломана.
EDIT: комментарий пользователя femtoRgon вот какой код от моего Analyzer
. Это где ShingleFilter
следует добавить? Это не похоже на работу, как мой результат выглядит следующим образом:
ed d
d
d p
p
p pl
pl
pl le
Что мне нужно для вывода включать пары полных слов.
Вот мой createComponents
метод:
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new NGramTokenizer(Version.LUCENE_47, reader, 2, 2);
ShingleFilter sf = new ShingleFilter(source, 2, 2);
TokenStreamComponents tsc = new TokenStreamComponents(source, sf);
return tsc;
}
EDIT2: Я изменил NGramTokenizer
на StandardTokenizer
следующий комментарий femtoRgon и теперь я получаю полные слова, но я не нужны отдельные слова, только пары.
Это код:
Tokenizer source = new StandardTokenizer(Version.LUCENE_47, reader);
ShingleFilter sf = new ShingleFilter(source, 2, 2);
Обратите внимание на 2, 2
, которые в соответствии с документами должны генерировать минимальное количество слов из 2, и максимальных слов 2. Однако на самом деле он генерирует этот выход:
and
and other
other
other airborne
airborne
airborne particles
Так как я могу избавиться от одиночных слов и получить этот выход?
and other
other airborne
airborne particles
[ShingleFilter] (https://lucene.apache.org/core/5_2_1/analyzers-common/org/apache/lucene/analysis/shingle/ShingleFilter.html), безусловно, все еще вокруг, и это моя первая мысль, также. – femtoRgon
@femtoRgon классно, спасибо, я попробую. Но как мне тогда заняться самыми частыми? – Eddy
'HighFreqTerms' должен работать нормально. Вы индексируете черепицу соответствующих размеров, что дает вам многословные термины в индексе, тогда вы просто проверяете высокочастотные. – femtoRgon