Написание алгоритма полнотекстового поиска в C # / Entity Framework - с чего начать? - PullRequest
9 голосов
/ 15 декабря 2011

Мне нужно найти потенциально большую коллекцию предложений, и я не знаю, с чего начать.

В итоге, пользователь отправит поисковую фразу, например, «как мне удалить свою учетную запись», затем мне нужно перейти на базу данных и сопоставить с предоставленными словами.

В данный момент я думаю сделать что-то вроде следующего:

  • Разделить фразу на отдельные слова
  • Удалить очень распространенные слова (и, если, и т.д.)
  • Как-то упорядочить слова по приоритету (пока не знаю, как это сделать)
  • Использование EF в цикле по словам, выполнение String.Contains на каждой базе данных запись и слово
  • Если результатов не найдено, удалите некоторые слова с более низким приоритетом и искать снова
  • Повторите

Может ли кто-нибудь указать мне правильное направление? Также, если кто-нибудь знает какие-либо библиотеки для выполнения такой работы, это было бы замечательно.

Приветствия

Ответы [ 3 ]

6 голосов
/ 15 декабря 2011

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

Другая проблема заключается в том факте, что у вас могут быть слова в разных формах, таких как прошедшее / будущее время, поэтому вас может заинтересовать stemming Насколько я помню, одним из инструментов, который был перенесен на c #, является проект Snowball.

Что касается выполнения второй части вашей проблемы, то цикл по словам может быть очень неэффективным, я думаю, вы должны рассмотреть возможность использования некоторых библиотек индексирования./ решения.Одним из популярных для .net является Lucene.Net .Он в основном создает обратный индекс, который отображает определенные фразы (например, слова) в статьи, которые их содержат, что позволяет вам быстро находить все вхождения данных слов в ваших текстах.Подобный подход может быть реализован вами внутри вашей базы данных

3 голосов
/ 01 февраля 2012

На всякий случай, если кто-то сталкивался с этим и задавался вопросом, что я использовал в конце, я в итоге использовал Lucene.NET.Это фантастика, очень проста в настройке и использовании, учитывая, что он настолько мощный и добавляет такую ​​замечательную функциональность.Хотя я бы сказал, что документация не очень хорошая.Тем не менее, я нашел серию обучающих программ здесь , которые являются хорошим введением.Я провёл утро, просматривая эти статьи, и у меня было невероятно быстрое полнотекстовое индексирование / поиск в моем приложении!

2 голосов
/ 15 декабря 2011

Используйте Возможность полнотекстового поиска на сервере SQL и оберните запрос с помощью полнотекстового поиска в хранимую процедуру. Выполните хранимую процедуру через ADO.NET или EF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...