2013-11-26 3 views
2

У меня есть строка ключевых слов для поиска в формате: A, B + C, D + E, B + F, E + G + H ,. ..
Каждая буква представляет собой ключевое слово, а значение + - для тех случаев, когда я хочу, чтобы все ключевые слова отображались.
Гарантированный запрос к ключевым словам.
позже я буду искать БД для имен, содержащих эти ключевые слова.
Так после моего примера я будет интересно в именах, которые содержат:
А или (В и С) или (D и Е) или (В и F) или (Е и G и Н) и т.д.php-алгоритм для создания списка ключевых слов из строки ключевых слов

Проблема в том, что я могу запросить только DB для имен, содержащих одно ключевое слово (это API, а не мой БД), поэтому мне нужно составить список ключевых слов для извлечения имен, а затем проверить каждое имя, чтобы увидеть, содержит все релевантные ключевые слова.

Мне нужен алгоритм для синтаксического анализа строки и создания списка ключевых слов, которые минимизируют запросы к БД.

Например, в моем примере, я хотел бы получить имена:
A
B и проверить, если они также содержат C или F
E и проверить, если они также содержат D или (G и H)

поэтому алгоритм должен создать список ключевых слов A, B, E для запроса, а также добавить к каждому из них ключевые слова, которые должны появиться в имени.

Я работаю в php, поэтому предпочитаю ответы в php, но псевдокод также будет хорошо. Я надеюсь, что это понятно ...

ответ

1
Make empty array B. 
Pass over the given array A, for each word X: 
    If not apperars in B, add X to B as index, and set him value to 1/(No. of parts in this conjunction). 
    Else, add 1/(No. of parts in this conjunction) to exist value. 
Sort B by values, biggest first. 
Make your queries from start to end. 

Логика ставка по значимости слова во всей совокупности.

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

+0

Ввод строки, поэтому мне нужно сначала создать массив A, каким образом? Кроме того, мне нужно получить не только список ключевых слов для запроса, но и ключевые слова, с которыми они должны появиться. –

+0

Вход «A, B + C, D + E, B + F, E + G + H», не так ли? взорвать его на массив невозможно? Алгоритм дает вам ** приоритет запросов **. Конечно, после каждого запроса вам нужно передать массив и проверить, есть ли у вас TRUE-соединение. и выясните соединение FALSE. – MeNa

+0

ваш алгоритм дает приоритет каждому слову, но в конце мне нужно только запросить некоторые из них, например, мне не нужно будет запрашивать D или G, так как они проверяются только с помощью E ... во всяком случае, я думаю, что я Я предположил, что я делаю такой массив приоритетов, как вы предлагали, но затем я снова повторяю ключевые слова и создаю массив запросов, сохраняя ключевые слова с максимальным приоритетом в качестве ключевых слов для запроса и присваивания им всех других связанных с ними ключевых слов. Спасибо, в любом случае. –

Смежные вопросы