Nano Hash - криптовалюты, майнинг, программирование

Перенаправить поиск с ошибкой php

У меня есть веб-сайт, на котором я индексирую информацию о фильмах. Чтобы найти фильм, пользователь может ввести название фильма, и этот запрос будет отправлен в базу данных:

SELECT IMDB, Name, Year, Views 
FROM Movies 
WHERE Name LIKE '%$search%'

Я использовал функцию «похожий_текст», чтобы исправить небольшие ошибки. Например, если имя «Криминальное чтиво», а пользователь вводит: «Криминальное чтиво», поскольку я не получаю никаких результатов, я запускаю этот небольшой код для каждого фильма.

            similar_text($search, $Name, $percent);

            if ($percent > $ValMax) {
                $ValMax = $percent;
                $PosMax = $i;   
            }

Я использую этот код, так как у меня в базе данных всего пара сотен фильмов, а в будущем их будет около двадцати тысяч. Кроме того, название каждого фильма состоит в среднем из 20 символов, не считая таких фильмов, как Dr. Strangelove, или Как я перестал волноваться и полюбил бомбу

Настоящая проблема начинается с запроса, используемого пользователем: «Капитан Америка» (по-итальянски «Капитан Америка»), где название фильма было «Капитан Америка — Il primo vendicatore».

Используя функцию Левенштейна, я получил ужасные результаты, тогда как с similar_text они были как минимум приличными. Вы можете увидеть полные результаты этого запроса здесь. Я создал эту страницу, чтобы увидеть для каждого поиска, каким будет левенштейн и аналогичный_текст.

Фильм, который был бы выбран, если бы я не поставил блокировку на 60%, был бы «C'era una volta in America» («Однажды в Америке»).

Однако «Капитан Америка» и «Капитан Америка» очень похожи, поэтому мне было интересно, есть ли способ проверить каждое слово. Я также слышал о Lucene, но не знал, с чего начать и подходит ли он для моих нужд.

Спасибо :)


Ответы:


1

1:

Вы можете использовать SOUNDS LIKE (доступно как строковая функция MySQL):

SELECT IMDB, Name, Year, Views FROM Movies WHERE Name SOUNDS LIKE '%$search%'

Возможно, вы захотите протестировать производительность этого на больших таблицах, поскольку предыдущий подстановочный знак в '%$search%' означает, что ваше выражение не сможет использовать какие-либо индексы.

2:

Другое возможное решение включает создание пользовательской функции Левенштейна для MySQL. Здесь вы можете найти пример:

CREATE FUNCTION levenshtein( s1 VARCHAR(255), s2 VARCHAR(255) ) 
  RETURNS INT 
  DETERMINISTIC 
  BEGIN 
    DECLARE s1_len, s2_len, i, j, c, c_temp, cost INT; 
    DECLARE s1_char CHAR; 
    -- max strlen=255 
    DECLARE cv0, cv1 VARBINARY(256); 
    SET s1_len = CHAR_LENGTH(s1), s2_len = CHAR_LENGTH(s2), cv1 = 0x00, j = 1, i = 1, c = 0; 
    IF s1 = s2 THEN 
      RETURN 0;
28.11.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..