Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  02:19[Войти] | [Зарегистрироваться]

Обсуждение материала
Функция приблизительного/нечеткого сравнения строк
Полный текст материала


Другие публикации автора: Дмитрий Кузан

Цитата или краткий комментарий:

«... о есть, например, в БД забито "Иванав Иван" - с ошибкой при наборе, а ищется "Иванов". Так вот, данный алгоритм пожет вам найти "Иванав" при вводе "Иванов",а также при "Иван Иванов" - даже наоборот с определенной степенью релеватности при сравнении. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]1285.7%
 
  Ничего особенно нового и интересного
[2]17.1%
 
  Написано неверно (обязательно укажите почему)
[3]17.1%
 
Всего проголосовали: 14

Оценка стиля изложения

  Все понятно, материал читается легко
[1]675%
 
  Есть неясности в изложении
[2]112.5%
 
  Непонятно написано, трудно читается
[3]112.5%
 
Всего проголосовали: 8




Смотрите также материалы по темам:
[Поиск и сортировка] [Функции для работы со строками ] [Нечеткое сравнение]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 9

11-06-2004 12:47
извиняюсь за неаккуратность
я использовал
function IndistinctMatchi при с=3 и это правильно работало, но функция то в общем виде, поэтому  при с>3 верно
function RolevSerch(c: Integer;s1,s2:String): Integer;
Var  i: Integer;
begin
Result:=0;
if(c<1)Or(Length(s1)=0)Or(Length(s2)=0)Or
  (Length(s1)+Length(s2)+1-c<1) then Exit;
for i:= 1 to c do
  Result:=Result+Serch(s1,s2,i)+Serch(s2,s1,i);
Result:=Trunc((Result/(c*(Length(s1)+Length(s2)+1-c)))*100)
end;


08-06-2004 15:47
Мне этот поиск помог, спасибо.
Тока, взял смелость откомпилировать код, чтоб работало по быстрее :).

function Matchi(s1,s2:String;c:Integer) :Integer;
Var i:Integer;
begin
Result:=0;
for i:= 1 To Length(s1)-c+1 do
  if Pos(Copy(s1,i,c),s2)>0 then
    Inc(Result);
end;

function IndistinctMatchi(c: Integer;s1,s2:String): Integer;
Var  i: Integer
begin
Result:=0;
if (c=0)Or(Length(s1)=0)Or(Length(s2)=0) then Exit;
for i:= 1 to c do
  Result:=Result+Matchi(s1,s2,i)+Matchi(s2,s1,i);
Result:=Trunc((Result/(c*(Length(s1)+Length(s2)+2-(c+1))))*100);
end;


24-08-2003 02:19
Similar и аналогичные имеются в hyperstr,достаточно известном наборе
средств работы со строками. Рекомендую всем.


15-12-2002 06:40
А зачем нужно
StrA := string(StrInputA);
StrB := string(StrInputB);
?

И почему, если это убрать,
поля записи TempRet вначале
уже имеют присвоеные значения,
не равные нулю?


04-12-2002 13:34
>>>Приведите, если не трудно. Только по возможности, с комментариями.


04-12-2002 13:34
>>>Приведите, если не трудно. Только по возможности, с комментариями.


03-12-2002 11:21
Данный алгоритм не совсем хорош. Не учитываются возможные разделители в строке, не учитывается регистр(иногда это нужно).
Я раньше писал подобную функцию, для сравнения двух строк.
Идея следующая:
1. Имеем две строки разной(одинаковой) длины
2. Вырезаем из первой (короткой) подстроки длиной от 3 символов до длины всей короткой строки(либо слова,ограниченного разделителем-пробелом или другим).
3.Ищем совпадение нашей вырезанной подстроки в эталонной строке(более длинной).Если есть , то коэффициент сравнения:=кооф.сравнения+длина подстроки*2^(длина подстроки-3). При этом можно учитывать и регистр, если подстрока первая.Если совпадает и регистр, то коэффициент:=коофициент+длина подстроки(или другое эмпирическое поправочное число).
4.Таким образом если коофициент>50-70%(зависит от длины строки) от эталонного коофициента - возможное совпадение. Эталонный коофициент - значение получаемое при совпадении всех подстрок в п.3.


03-12-2002 10:09
>>>Если надо, код ее приведу здесь.
Лучше пришлите код с комментариями в адрес Королевства


03-12-2002 07:29
вот бы сравнить ее с
unit Similar_Types;
function Similar(const S1,S2 : AnsiString) : LongInt ;
неизвестного автора.
Если надо, код ее приведу здесь.
Там на ассемблере написано
Сообщение не подписано


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Кто съел Красную шапочку?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования