Android и нечеткое сопоставление, n-граммы и расстояние Левенштейна

Я создаю приложение для Android, которое принимает ввод строки и возвращает ранжированный список книг, используя API Google.

Я ищу способ сравнить строку с открытым концом, которую вводит пользователь, с первым элементом в списке, чтобы увидеть, является ли то, что они ввели, «вероятно» одной книгой. У меня есть масса информации о книге, названии, авторе, описании и т. д., так что я могу искать в любой части.

Пример:

'eyre affair fforde', 'fforde eyre affair', 'the eyre affair'
----> 
'Likely' to be 'The Eyre Affair by Jasper Fforde'

Что было бы лучшим способом сделать это? Я посмотрел на расстояние Левенштейна, но не думаю, что это сработает с таким открытым вводом, n-граммы кажутся хорошим способом или нечетким сопоставлением.

Любые другие идеи?


person Carrie Hall    schedule 24.02.2011    source источник


Ответы (1)


Я бы пошел с одним из этих:

SimMetrics (SimMetrics – это расширяемая библиотека с открытым исходным кодом для показателей сходства или расстояния, например, расстояние Левенштейна, расстояние L2, Косинусное подобие, подобие Жаккара и т. д. и т. д.)

Commons Lang LevenshteinDistance

Или чтобы избавиться от слуховых или орфографических ошибок: soundex или метафон.

person Chris    schedule 24.02.2011
comment
@ puppetmaster04: Добро пожаловать, я рад, что смог помочь. Я прочитал ваши вопросы, и мне любопытно, как ваше приложение будет развиваться. - person Chris; 26.02.2011
comment
К сожалению, все ссылки, кроме SimMetrics, мертвы. - person MrMaffen; 11.12.2013