Antonchik
@Antonchik
Программирую на HTML

Алгоритм для обработки минус слов?

Здравствуйте. Пишу приложение для работы с Яндекс.директ и мне нужно как-то обрабатывать минус слова. Как работают минус слова: есть поисковые запросы, к примеру "купить автомобиль москва" и если у нас есть минус слово "автомобиль" реклама не будет показывается в поисковой выдачи по этому запросу.

Суть моей проблемы в том, что есть много типов минус слов/фраз которые выражаются с помощью спецсимволов:
  • "автомобиль" - обычное минус слово, фраза минусуется тогда, когда это слово есть в поисковом запросе
  • "купить автомобиль" - обычная минус фраза, фраза минусуется тогда, когда все слова из минус фразы присутствют в поисковом запросе, независимо от порядка
  • "!автомобиль" - минус слово с фиксированной словоформофой, то есть оно отминусует запрос только если в фразе есть именно слово "автомобиль", а запросы
    со словом "автомобили" не отминусует как бы было с обычным минус словом
  • "[купить автомобиль]" - минус фраза с фиксированным порядком слов, она отминусует запрос если в нем будут эти слова в таком же порядке, в отличии от обычной минус фразы
  • и остальные спецсимволы

Проблема в том, что одна минус фраза может содержать множество спецсимволов, к примеру так "-купить !автомобили [недорого москва] [новые или !бу]" и мне нужно как-то их обрабатывать.

Я пришел к идеи, что нужно создать классы для всех типов минус фраз, с общим интерфейсом для проверки поискового запроса, у меня получился вот такой список классов:
  • Минус слово, пример: "автомобиль"
  • Минус слово с фиксированной словоформой, пример: "!автомобили"
  • Минус фраза, пример: "купить автомобиль"
  • Минус фраза со словами с фиксированной словоформой, пример: "купить !автомобили"
  • Минус фраза с фиксированным порядком слов, пример: "[купить автомобиль]"
  • Минус фраза с фиксированной словоформой и фиксированным порядком слов, пример: "[купить !автомобили москва]"
  • Комплексная минус фраза, которая включает все типы, она парсит фразу и создает соответствующие классы, пример: "купить !автомобили [недорого москва] [новые или !бу]"
  • Класс который определяет тип минус фразы, и создает необходимый класс

Этот вариант работает, но он мне кажется избыточным, из-за многого количество классов. Подскажите пожалуйста может вам приходит на ум более изящная структура
  • Вопрос задан
  • 698 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы