На днях сделал пару страшных вещей - собрал модули для PHP и Perl.
Немного по порядку и за жизнь...
Началось все это со сравнения строк. Строки - это очень страшные вещи на самом деле. Правда чтобы это понять, сначала надо вспомнить про обычные числа.
Вот все знают, что 2+2=4. И 4=4, а 5!=4. Сравнивать целые числы одно удовольствие.
А дальше будут числа вещественные и мнимые
Теперь, когда мы что-то поняли в сравнении чисел можно поговорить про строки. До этого мы работали с цифрами - и там было все просто с арифметикой. Но можно ли вычитать буквы? С одной стороны в компе строки - это набор битов и есть ASCII таблица. Далее строку можно рассматривать как n-мерный вектор кодов, где n-длина строки. Можно даже начать строить векторную алгебру на этом но...
и как же сравнивают строки?
А теперь, собственно, задача и нафига мне этот нечеткий поиск понадобился.
Надо было мне написать поисковик по базе, который учитывал бы опечатки, пропавшие умляуты, битые артикли и прочее...
Часть следущая: Юникод, умляуты и транслит
Итак. У меня была строка без лишних символов. (А еще я вырезал артикли - это не сложно). Есть Левенштейн. ε я взял как четверть от максимальной строки + 1.
И с этими данными процесс пошел. Поиск работал очень неплохо. Сложная часть была позади - если надо добавить что-то в таблицу декомпозиции или подправить сравнение строк, то там уже чисто правка кода и ничего сложного.
В итоге я взял мою базу в SQLite 3 и стал думать как теперь сделать поиск по базе... Оказалось все просто - SQLite 3 можно создать свою функцию и SQL движок будет её использовать. Причем функция пишется не на SQL, а на Perl/PHP/C - смотря где пишешь. Так что вся мощь языка в твоих руках.
Как обычно сначала я начал с Perl-а:
Perl, скорость, C, PHP
Вот такая погоня за скоростью. Теперь можно это использовать в работе. Иногда добавляя что-нибудь в C-код. Еще неплохо бы написать скрипт, который компилит все три библиотеки сразу, чтобы не бегать по папкам и запускать.
Acer X960
[Print]
Гость