У меня есть большая база предложений предложений и проблема, когда предложения типа «я хорош» не соответствуют «im good» и наоборот или «это мое?». не совпадающий с «это мой» и наоборот, когда я хочу, чтобы они были обнаружены как совпадение.
Я сделал сложные и грязные функции, пытаясь сделать это с помощью подстановочных знаков и исследований, но это просто большой беспорядок. и я уверен, что должен быть способ поиска с помощью этого 1 символа. Если бы я мог бы контролировать, какие символы получают этот путь, как в моих примерах, основными причинами проблемы являются знак вопроса и половина цитаты. (? ').
im в настоящее время использует запрос выбора плоскости с php и mysql для выполнения соответствующих запросов.
я хотел бы помочь, чтобы понять это, поэтому я могу очистить большой беспорядок кода, который в настоящее время выполняет работу непоследовательно.
в случае, если кто-то хочет видеть, что проверка кода для совпадений выглядит так:
$checkqwry = "select * from `eng-jap` where (eng = '$eng' or english = '$oldeng' or english = '$oldeng2') and (jap = '$jap' or japanese = '$oldjap' or japanese = '$oldjap2');";
цель запроса – просто проверить, есть ли уже перевод с $ eng и $ jap уже в БД. причина, по которой вы видите $ oldeng $ oldeng2 и $ oldeng3 и т. д., как я уже сказал, мои грязные глупые попытки сопоставить, даже если есть знак или нет вопросительного знака и так далее. где некоторые переменные $ oldeng имеют вопросительные знаки или полуквоты и т. д., а остальные – нет. есть больше кода над добавлением и удалением вопросительных знаков и прочее. да это большой беспорядок.
Вы хотите использовать алгоритм String Metric, как указано выше, PHP имеет эту функцию, построенную в http://php.net/manual/en/function.levenshtein.php, а также http://www.php.net/manual/ ru / function.similar-text.php .
MySQL не реализует этот (конкретный алгоритм) изначально, но некоторые люди пошли вперед и написали хранимые процедуры для достижения того же: http://www.artfulsoftware.com/infotree/queries.php#552
По-моему, использование String Metric, которое может обрабатывать произвольные изменения, лучше, чем удалять пунктуацию, а также может улавливать упущения, транспозиции и т. Д. …
Вероятно, лучше просто вырезать не буквенно-цифровые символы перед сравнением строк.
Вы можете использовать функцию replace в sql для замены "" на "" и "?" с "".
Возможно, вам захочется взглянуть на полный текстовый поиск в языке MySQL. Добавьте индекс FULLTEXT в столбец eng.
ALTER TABLE `eng-jap` ADD FULLTEXT INDEX `full` (`eng`) ;
Затем используйте функцию соответствия:
select * from `eng-jap` where match(eng) against ('Im happy');
Это вернет меня, и я счастлив, и я счастлив
Если вы выберете показатель релевантности, например:
select id, match(eng) against ('Im happy') from `eng-jap` where match(eng) against ('Im happy');
вы можете использовать его для дальнейшей обработки совпадений в PHP и фильтрации.
[РЕДАКТИРОВАТЬ]: Только что подтвердили, что оценка релевантности вчера и вчера? тоже одно:
select *, match(eng) against ('yesterday') as mc from `eng-jap`
Результат:
6, yesterday?, 0.9058732390403748 7, yesterday, 0.9058732390403748
Примечание. Для применения полнотекстового индекса ваш движок mysql должен быть MyISAM. Кроме того, предложение должно содержать более 3 символов. Индекс, похоже, не соответствует слову «да».