Общий фильтр строк / поиск

#c# #string #search #filter

#c# #строка #Поиск #Фильтр

Вопрос:

Я ищу несколько ярких идей по фильтрации и поиску строк или, по крайней мере, указатели на некоторые хорошие статьи по этому вопросу. У меня есть приложение C # WP7, в котором есть список элементов, и оно выполняет поиск по другому списку. Но я нахожу, что фильтр не очень хорош. Допустим, у меня есть Франциско в одном списке, он найдет мост через залив Сан-Франциско в списке. Одна идея заключается в том, чтобы быть точным, но тогда вы упускаете такие вещи, как «The Bay» не будет соответствовать «Bay».

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

Вложенный список.Выберите (arty => Основной список.Где(Элемент => Элемент.Все элементы.indexOf(item.Name Сравнение строк.OrdinalIgnoreCase) >= 0))

Комментарии:

1. Хм, для меня это в значительной степени похоже на искусственный интеллект, который потребовал бы обширной подготовки для получения «приемлемых» результатов. Это не будет тривиальный алгоритм.

Ответ №1:

Другим популярным подходом является сходство с точки зрения необходимых операций вставки, удаления или подстановки для перехода от одной строки (поискового термина) к другой (совпадений в хранилище данных) — расстояние Левенштейна.

Вы можете вычислить оценку, используя расстояние Левенштейна (или Редактировать), а затем взять верхний N с точки зрения минимальных изменений, необходимых ниже определенного порога.

Комментарии:

1. Это интересный момент, данные, с которыми я имею дело, часто вводятся пользователем и иногда могут быть немного неверными. «The» — это обычное добавление или отсутствующий элемент в строке. Кроме того, сложное написание может вызвать проблемы при неправильном вводе.