Главная страница
    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.47 MB
Время: 0.004 c
2-1278925532
linuxoid
2010-07-12 13:05
2010.10.10
помогите с пингом


2-1279194682
Patrick
2010-07-15 15:51
2010.10.10
Макроподстановка.


2-1279264750
И. Павел
2010-07-16 11:19
2010.10.10
Ошибка: "Cannot change visible in OnShow or OnHide"


2-1279268835
vajo
2010-07-16 12:27
2010.10.10
Количество строк в RichEdit


15-1278707383
Юрий
2010-07-10 00:29
2010.10.10
С днем рождения ! 10 июля 2010 суббота





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский