Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  147

•  TDictionary Custom Sort  3 328

•  Fast Watermark Sources  3 075

•  3D Designer  4 837

•  Sik Screen Capture  3 330

•  Patch Maker  3 543

•  Айболит (remote control)  3 650

•  ListBox Drag & Drop  3 004

•  Доска для игры Реверси  81 644

•  Графические эффекты  3 932

•  Рисование по маске  3 240

•  Перетаскивание изображений  2 620

•  Canvas Drawing  2 744

•  Рисование Луны  2 570

•  Поворот изображения  2 177

•  Рисование стержней  2 166

•  Paint on Shape  1 567

•  Генератор кроссвордов  2 230

•  Головоломка Paletto  1 766

•  Теорема Монжа об окружностях  2 220

•  Пазл Numbrix  1 684

•  Заборы и коммивояжеры  2 055

•  Игра HIP  1 280

•  Игра Go (Го)  1 227

•  Симулятор лифта  1 472

•  Программа укладки плитки  1 215

•  Генератор лабиринта  1 543

•  Проверка числового ввода  1 360

•  HEX View  1 494

•  Физический маятник  1 357

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Как определить, что два слова имеют схожее произношение



Автор: Lloyd

Функция Soundex определяет схожесть звучания двух слов. Алгоритм Soundex опубликован в одной из статей журнала PC Magazine и предназначен для работы с английским языком (может кто-нибудь портирует для работы с нашим могучим? Пишите). Функции передается строка. Возвращаемое Soundex значение также имеет тип строки. Эта величина может сохраняться в базе данных или сравниваться с другим значением Soundex. Если два слова имеют одинаковое значение Soundex, можно предположить, что звучат они одинаково (более или менее).

Вы должны иметь в виду, что алгоритм Soundex игнорирует первую букву слова. Таким образом, "won" и "one" будут иметь различное значение Soundex, а "Won" и "Wunn" - одинаковое.

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


function Soundex(OriginalWord: string): string;
var
  Tempstring1, Tempstring2: string;
  Count: integer;
begin
  Tempstring1 := '';
  Tempstring2 := '';
  OriginalWord := Uppercase(OriginalWord);
    {Переводим исходное слово в верхний регистр}
  Appendstr(Tempstring1, OriginalWord[1]); {Используем первую букву слова}
  for Count := 2 to length(OriginalWord) do
    {Назначаем числовое значение каждой букве, за исключением первой}

    case OriginalWord[Count] of
      'B', 'F', 'P', 'V': Appendstr(Tempstring1, '1');
      'C', 'G', 'J', 'K', 'Q', 'S', 'X', 'Z': Appendstr(Tempstring1, '2');
      'D', 'T': Appendstr(Tempstring1, '3');
      'L': Appendstr(Tempstring1, '4');
      'M', 'N': Appendstr(Tempstring1, '5');
      'R': Appendstr(Tempstring1, '6');
      {Все другие буквы, цифры и знаки пунктуации игнорируются}
    end;
  Appendstr(Tempstring2, OriginalWord[1]);
  {Удаляем из результата все последовательно повторяющиеся цифры.}

  for Count := 2 to length(Tempstring1) do
    if Tempstring1[Count - 1] <> Tempstring1[Count] then
      Appendstr(Tempstring2, Tempstring1[Count]);
  Soundex := Tempstring2; {Это - значение soundex}
end;

SoundAlike - функция, проверяющая схожесть звучания двух слов. При схожести звучания она возвратит значение True и значение False в противном случае. Она демонстрирует пример использования функции Soundex.


function SoundAlike(Word1, Word2: string): boolean;
begin
  if (Word1 = '') and (Word2 = '') then
    result := True
  else if (Word1 = '') or (Word2 = '') then
    result := False
  else if (Soundex(Word1) = Soundex(Word2)) then
    result := True
  else
    result := False;
end;

Дополнение

Существует алгоритм ("параметрической корреляции", если я вообще правильно называю его), основанный на оценке схожести слов по количеству совпадающих букв идущих друг за другом. Примечание: буквы не обязательно идут *непосредственно* друг за другом, т.е. без других букв.

Пример:

    Андрей vs. Андрей - 6
    ндрей vs. Андрей - 5
    Анрей vs. Андрей - 5
    Андрей vs. Александр - 4
    Андрей vs. Иннокентий - 2
    АнXрей vs. Андрей - 3, но в то же время с другими словами результат
будет на уровне 0..2
Andrew V. Fionik







Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте