Android и нечеткое соответствие, n-грамм и расстояние Левенштейна - PullRequest
4 голосов
/ 24 февраля 2011

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

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

Пример:

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

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

Есть еще идеи?

1 Ответ

7 голосов
/ 24 февраля 2011

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

SimMetrics (SimMetrics - это расширяемая библиотека метрик подобия или расстояния с открытым исходным кодом, например, расстояние Левенштейна, расстояние L2, сходство косинусов, сходство по Джакарду и т.

Commons Lang LevenshteinDistance

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

...