Библиотека Java для нечеткого полнотекстового поиска

Я знаю о возможном использовании Lucene и Solr, но есть ли какая-нибудь простая библиотека Java, которая просто выполняет часть нечеткого полнотекстового поиска, например:

SomeScore score = fuzzyFullTextSearch(String text, String searchTerm, int maxDistance)

где ''оценка'' определяет меру того, насколько часто был найден (нечеткий) searchTerm и насколько он был похож на исходный searchTerm.

Причина, по которой я не использую Lucene или что-то подобное, заключается в том, что он слишком громоздкий для моего варианта использования, и мне нужен поиск только один раз. Максимальное расстояние для правок с использованием Lucene FuzzyQuery также составляет всего 2, что недостаточно для моего особого случая использования.

Есть ли легкая библиотека, которая может достичь sth. как показано выше?


person eSKape    schedule 04.01.2017    source источник


Ответы (1)


Как обычно, на помощь приходит Apache Commons.

org.apache.commons.lang3.StringUtils имеет множество методов для получения fuzzyDistance, levenshteinDistance и некоторых более сложных показателей.

Итак, наивный псевдокод будет примерно таким:

split the text into tokens by spaces, commas, etc.
for each token
    calcDistanceBetweenTokenAndSearchTerm
getSumScore // or avg or whatever

Другим подходом может быть использование commons-text org.apache.commons.text.similarity.FuzzyScore, способного вычислить это расстояние между двумя строками, но, конечно, много зависит от конкретных требований.

Я не говорю, что это полный охват возможных ответов, но вы можете попробовать.

person Mysterion    schedule 09.01.2017
comment
поэтому я предполагаю, что открытой библиотеки еще нет, хотя это кажется очень распространенным вариантом использования без использования некоторых технологий индексирования, таких как Lucene (даже если это более эффективно). Возможно, я предоставлю библиотеку в будущем - person eSKape; 13.01.2017