Определение похожих строк

gray07

Новичок
Определение похожих строк

Есть строка, написаная транслитом, и написаная не по правилам, а как попало :) , например имя mp3 файла, и есть эта же строка в БД, но по русски.

Каким образом можно найти эту русскую строку в БД по той строке транслитом?

Я себе представляю решение так, строка с транслитом переводится на русский, и сравниваются хеши полученные с помощью функций soundex, metaphone или какой нибудь другой. Но насколько я понял, эти функции работают только с английским? Тогда какую функцию использовать?

Как вообще это сделать, и насколько реально это сделать?
 

kvf77

Red Devil
gray07

как ты заведомо неправильный транслит правильно переведешь на русский?

будешь пробовать все возможные варианты?
 

Дракон

Guest
Фанат, gray07
и уже потом эти две транслитные строки сравнивать?
Хорошая идея.
 

gray07

Новичок
Автор оригинала: kvf77
как ты заведомо неправильный транслит правильно переведешь на русский?
Например Schastia переводится как Счастиа

Автор оригинала: Фанат
а перевести строку из базы в транслит?
Да, похоже самый реальный способ, но все таки какую функцию лучше использовать для получения хеша?
 

Tor

Новичок
на мой взгляд, полнотекстовый поиск в базе при сравнении двух транслитерированных строк долже дать ожидаемый эффект
 

SiMM

Новичок
> Например Schastia переводится как Счастиа
С таким же успехом можно утверждать, что это Шастя
 

python

Новичок
простой тест "Счастья":
PHP:
<?php
echo soundex("Schastia"). "==" .soundex("Zhastja")."<br>\n";
?>
выдает

S230==Z232

т.е. совсем не рядом, видимо стандартными средствами PHP решить задачу не удасться, как альтернатива http://www.google.com/search?hl=ru&q=pattern+matching+theory и собственноручное написание мода...
 

gray07

Новичок
Если кому понадобится, сделал так: в базе рядом с строкой хранится ее хеш, полученный функцией metaphone от этой строки, переведенной в транслит.

При поиске, строка, которую ищут, переводится в транслит, берется хеш от нее и выбираются все строки из базы с таким хешом. Но тут оказались еще одни грабли, для двух похожих строк может быть один хеш, например "most" и "Масада" имеют хеш "MST", поэтому из полученого результата, надо выбрать ту строку, которая меньше всего отличается от строки поиска. Я делал это функцией levenshtein (жаль, что ее нету в mysql :( ).
 
Сверху