Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];

Вниз

В MSSQL есть SoundEx(str), есть ли такое для Delphi?   Найти похожие ветки 

 
12 ©   (2010-07-12 08:43) [0]

сторонние какие либо компаненты м.б.
ну и тупой вопрос :), а для русского что-то видел кто?

хочу добится
OtherSoundEx("Солнце")=OtherSoundEx("Сонце") и т.п.


 
12 ©   (2010-07-12 08:53) [1]

О, есть идейка транслитерировать слово, и потом натравить soundEx


 
Anatoly Podgoretsky   (2010-07-12 09:03) [2]

> 12  (12.07.2010 08:53:01)  [1]

Зачем когда существует русский вариант функции, алгоритм опубликован в Сети,
вот только как найти. Мне какжется, что на Королевстве было.


 
12 ©   (2010-07-12 09:53) [3]

спасибо, Анатолий

думаю, такой идеи вполне хватит, если не загнется на объемах

function TForm1.CheckStr(Str, Mask: String): Boolean;
var
 mi, si: Integer;
begin
 Result := False;
 Str := AnsiUpperCase(Str);
 Mask := AnsiUpperCase(Mask);
 for mi := 1 to Length(Mask) do
 begin
   si := Pos(Mask[mi], Str);
   if si = 0 then
     Exit;
   Delete(Str, 1, si);
 end;
 Result := True;
end;


 
sniknik ©   (2010-07-12 09:55) [4]

> О, есть идейка транслитерировать слово, и потом натравить soundEx
не получится
SELECT SOUNDEX ("Solnce"), SOUNDEX ("Sonce")
S452, S520


 
12 ©   (2010-07-12 10:15) [5]

вообще-то нет :)
этого CheckStк маловато будет


> SELECT SOUNDEX ("Solnce"), SOUNDEX ("Sonce")
> S452, S520

и то верно.

тогда тем более надо про расстояние Левинштейна глянуть


 
12 ©   (2010-07-12 10:33) [6]

да, так интереснее получается

function min(a,b,c: integer):integer;
begin
  if a > b then result := b else result := a;
  if result > c then result := c;
end;

function LevenshteinDistance(s, t: string):integer;
var
  d: array [0..50, 0..50] of integer; // хорошее число 50, если 4 отнять, и на 46 поделить - 1 будет :)
  i,j:integer;
  m,n:integer;
begin
  m := length(s);
  n := length(t);
  for i := 0 to m do d[i, 0] := i; // deletion
  for j := 0 to n do d[0, j] := j; // insertion

  for j := 1 to n do
  begin
    for i := 1 to m do
    begin
      if s[i] = t[j] then
        d[i, j] := d[i-1, j-1]
      else
        d[i, j] := min
                   (d[i-1, j] + 1,  // deletion
                     d[i, j-1] + 1,  // insertion
                     d[i-1, j-1] + 1 // substitution
                   )
    end;
  end;
  Result := d[m,n];
end;

теперь тока боюсь за объемы текстов для обработки


 
12 ©   (2010-07-12 11:14) [7]

круто..
валебалист = волейболист
, при допуске <5..

наверное оно!


 
Омлет   (2010-07-12 11:20) [8]

Расстояние Левинштейна - не панацея.


 
12 ©   (2010-07-12 11:32) [9]


> Расстояние Левинштейна - не панацея.

согласен
но результаты
еще, пример, - васкрисение(воскресенье), при < 5
пока заставляют остановится на этом

зы
Модификация Damerau-Levenshtein - на тестах не проявила себя как-то лучше
http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance


 
Омлет   (2010-07-12 11:36) [10]

А прикладная задача какая? У нас расстояние использовалось для поиска дублей по ФИО и номеру паспорта.


 
12 ©   (2010-07-12 11:48) [11]

искать товар в прайсах, в случае опечатки оператора



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
2-1279567153
Студент
2010-07-19 23:19
2010.10.10
Возвращение динамических массивов в параметрах


2-1278925532
linuxoid
2010-07-12 13:05
2010.10.10
помогите с пингом


15-1278319716
oxffff
2010-07-05 12:48
2010.10.10
Кто-нибудь использовал Unmanaged API Reference .NET?


6-1225988097
vegarulez
2008-11-06 19:14
2010.10.10
Вопрос про POST


11-1224874964
AnarchyMob
2008-10-24 23:02
2010.10.10
Использование диологовых окон из ресурсов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский