2011-02-24 1 views
4

Я создаю приложение для Android, которое берет ввод строки и возвращает список книг с использованием API Google.Android & fuzzy matching, n-gram, and Levenshtein distance

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

Примером может служить:

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

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

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

ответ

7

Я бы с одним из них:

SimMetrics (SimMetrics является открытым исходным кодом расширяемой библиотекой похожести или Distance метрик, например, Левенштейн, L2 Расстояния, косинус похожесть, Жаккар похожесть и т.д. и т.п.)

Commons Lang LevenshteinDistance

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

+0

Блестящий, большое спасибо за ссылки. –

+0

@ puppetmaster04: Вы более чем рады, я рад, что смогу помочь. Я читаю ваши вопросы и любопытно, как ваше приложение будет развиваться. – Chris

+0

К сожалению, все ссылки, кроме SimMetrics, мертвы – MrMaffen