Найти фразы, используя mysql и переполнение стека

Я работаю над проектом, и мне нужны ваши предложения в запросе к базе данных. Я использую PHP и MySQL.

контекст

  • У меня есть стол с именем phrases содержащий phrases столбец, в котором хранятся фразы, каждая из которых состоит из одного-трех слов.
  • у меня есть text строка, содержащая 500 — 1000 слов

Мне нужно выделить все фразы в text строка, которая существует в моем phrases таблица базы данных.

Мое решение

Я просматриваю каждую фразу в списке фраз и сравниваю ее с text, но количество фраз большое (100 тыс.), поэтому для этого сопоставления требуется около 2 минут или более.

Есть ли более эффективный способ сделать это?

1

Решение

Я сконцентрируюсь на том, как выполнить сравнение со значениями 100K. Это потребует двух шагов.

а) Написать библиотеку C ++ и связать ее с PHP, используя расширение. Google PHP-CPP. Существует структура, которая позволяет вам сделать это.

б) Внутри C / C ++ вам нужно создать структуру данных, которая имеет временную сложность O (n). n длина фраз, которые вы ищете. Обычно это называется структурой данных try. Это обычно используется для слов без пробела [не фраз]. но, конечно, вы можете написать свой собственный.

Вот ссылка, которая содержит слово реализация. иначе словарь.
http://www.geeksforgeeks.org/trie-insert-and-search/

Это занимает совсем немного памяти, так как число составляет 100K. Честно говоря, вам нужна большая система. Но когда вы ищете лучшую производительность, то память имеет тенденцию быть компромиссом.

Альтернативный подход
Только PHP. Здесь, извлеките фразы из вашего ввода текста. Преобразуйте их в хэш. Данные таблицы, которые вы содержите, также должны храниться в хэше. Нуждается в огромной памяти. Производительность здесь будет очень высокой, согласно поиску, также известному как O (1). Итак, для предложения из k слов. сложность вашего времени будет O (K-факториал).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]