2017-01-04 33 views
0

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

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

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

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

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

ответ

1

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

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

Таким образом, наивный псевдокод будет что-то вроде этого:

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

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

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

+0

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