как создать синтаксический анализатор для поисковых запросов

Дисковое пространство не является проблемой..., но памятью, и производительность будет. Удвойте чтения страницы, двойной индексный размер, странный КАК и = постоянное поведение и т.д.

, необходимо ли сохранить китайский язык и т.д. сценарий? Да или нет...

И от MS BOL" устройство хранения данных и Эффекты Производительности Unicode"

Редактирование :

Недавний ТАК выделение вопроса, как плохо nvarchar производительность может быть...

SQL Server использует высокий ЦП при поиске внутри nvarchar строк

5
задан b0x0rz 7 November 2009 в 17:49
поделиться

5 ответов

Сколько у вас ключевых слов (например, "или", "в", "с завышенной ценой", "с")? Если у вас есть только пара из них, я бы также предложил использовать простую обработку строк (регулярные выражения).

Но если у вас есть больше, вы можете изучить возможность реализации реального парсера для этих поисковых выражений. Irony.net может помочь вам в этом (я нашел его чрезвычайно простым в использовании, поскольку вы можете выразить свою грамматику в форме, близкой к bnf, прямо в коде).

5
ответ дан 14 December 2019 в 08:53
поделиться

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

1
ответ дан 14 December 2019 в 08:53
поделиться

Есть несколько способов сделать это, два из них:

Согласно вашему примеру, язык очень простой, поэтому разделение строки по ключевому слову может быть лучшим решением.

string sentence = "house in new york priced over $500000 with a swimming pool";
string[] values = sentence.Split(new []{" in ", " priced over ", " with a "}, 
                                 StringSplitOptions.None);
string type = values[0];
string area = values[1];
string price = values[2];
string accessories = values[3];

Однако , могут возникнуть следующие вопросы: как проверить, соответствует ли предложение ожидаемой форме? Что произойдет, если некоторые ключевые слова могут появиться как часть значений?

Если это так, вы столкнетесь с некоторыми библиотеками, которые вы можете использовать для синтаксического анализа ввода с использованием определенной грамматики. Две из этих библиотек, которые работают с .Net, - это ANTLR и Gold Parser , обе бесплатны. Основная проблема - определение грамматики.

1
ответ дан 14 December 2019 в 08:53
поделиться

Я думаю, вам нужно просто обработать строки. Нет разумного способа сделать это.

Поэтому замените «ИЛИ» своим собственным оператором или (например, ||). Насколько мне известно, для этого нет библиотеки.

Я предлагаю вам использовать регулярные выражения.

-1
ответ дан 14 December 2019 в 08:53
поделиться

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

Команды ":" легко найти и вытащить из строки поиска для обработка после завершения разделения. Просто просмотрите массив в поисках.

Ключевые слова +/- также легко найти и добавить в sql-запрос в виде предложений AND / AND NOT.

Единственное место, где вы можете столкнуться с проблемами, - это использование «или», поскольку вам нужно будет определить, как с этим обращаться. Что делать, если есть несколько "или" с? Но порядок ключевых слов в массиве такой же, как и в запросе, так что это не будет проблемой.

1
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: