Задать вопрос
@AlexBeloff

Каков алгоритм работы сервиса типа rifmaslovo.ru?

Здравствуйте.
Хочу сделать сервис, подобный данному - rifmaslovo.ru
Предполагаю использовать БД MySQL с таблицей со словами.
Непонятно, каким образом составить запрос для выборки по определенному слову
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
DDDsa
@DDDsa
Ищете статьи на тему, как работает рифма, создаёте набор правил, присваиваете им ранг, ищете по этим правилам слова в словаре и выдаёте пользователю, отсортировав по рангу.

Первое, что приходит в голову: берём словарь ударений отрезаем от слова из запроса всё окончание, начиная с ударной гласной, ищем по словарю слова с таким же окончанием и той же ударной гласной. "красивый" — "сивый". Это будет первый ранг

Второй ранг будет немного изменённое окончание. Например, если пользователь ввёл слово "кратный", можно заменить "а" на "я" и найти, например "приятный". "у" на "ю" — "подруга", "вьюга".

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

Это только что пришло сходу в голову. База данных со словарём, RegEx в руки и вперёд
***
UPD: В сервисе у вас по ссылке вообще всё примитивно. Они выводят сначала то, что я описал выше как первый ранг, а потом отрезают от окончания по одной букве и ищут такие же окончания. Бред, это уже не рифмы
Ответ написан
Комментировать
Мне кажется тут какой то простой 'топорный' вариант.
Пример на python 3.*:
var = 'Слово'
arrayWords = ['нетослово', 'олово', 'рубилово']
resultArray = []
for i in range(0, len(var) - 1):
    # Тут по идее мы должны обращаться к базе с запросом типа:
    # SELECT * FROM table_words WHERE word LIKE '%тут_будет_значение';
    for word in arrayWords:
        if var[-2 - i:] in word:
            if word not in resultArray:
                resultArray.append(word)
print(resultArray)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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