Мне нужно преобразовать список поисковых терминов в наиболее эффективный набор комбинированных поисковых терминов. Любое слово или цитируемая фраза может быть отделена OR. Многие термины могут быть объединены в круглые скобки. AND также могут использоваться.
Например, foo bar
и boo bar
обмениваются bar
, поэтому вместо двух разных поисковых терминов их можно объединить как (foo OR boo) AND bar
.
Вот что должен делать алгоритм. С учетом этого набора данных:
foo bar
boo bar
goo bar
hoo doo
foo manchu
moo bar
too bar
foo fighters
"blue kazoo" bar
baz
qux
quux
Я хочу получить следующий ответ:
(foo OR boo OR goo OR moo OR too OR "blue kazoo") AND bar
foo AND (manchu OR fighters)
hoo doo
baz OR qux OR quux
Это не работает:
(foo bar) OR (boo bar) OR (goo bar) OR (foo manchu)
Я буду работать на PHP, но я отвечу на него в псевдокоде, PHP или перейду с основных языков.