Целочисленные константы

Это простая версия, которая впоследствии находит слово за словом наилучшее совпадение.

declare (strict_types=1);

$dataBaseName = 'Jardine Lloyd Thompson';

$bankdataRows =
[
  'Thompson Jardine Lloyd',
  'Blaaa  Llayd Thoapson   f***ing user input   Jordine   aso. ',
];

// assume the "database" is already stored trimmed since it is server-side controlled
$dbWords = preg_split("#[\s]+#", $dataBaseName);

foreach ($bankdataRows as $bankdata)
{
  // here we trim the data received from client-side.
  $bankWords = preg_split("#[\s]+#", trim($bankdata));
  $result    = [];

  if(!empty($bankWords))
    foreach ($dbWords as $dbWord)
    {
      $idx   = null;
      $least = PHP_INT_MAX;

      foreach ($bankWords as $k => $bankWord)
        if (($lv = levenshtein($bankWord, $dbWord)) < $least)
        {
          $least = $lv;
          $idx   = $k;
        }

      $result[] = $bankWords[$idx];
      unset($bankWords[$idx]);
    }

  $result = array_merge($result, $bankWords);
  var_dump($result);
}

результат

array(3) {
  [0] =>
  string(7) "Jardine"
  [1] =>
  string(5) "Lloyd"
  [2] =>
  string(8) "Thompson"
}

array(8) {
  [0] =>
  string(7) "Jordine"
  [1] =>
  string(5) "Llayd"
  [2] =>
  string(8) "Thoapson"
  [3] =>
  string(5) "Blaaa"
  [4] =>
  string(7) "f***ing"
  [5] =>
  string(4) "user"
  [6] =>
  string(5) "input"
  [7] =>
  string(4) "aso."
}

См. Живую скрипку

Возможно, вы захотите расширить этот подход, сначала вычислив расстояние Левенштейна каждую возможную комбинацию, а затем выберите лучший весь матч.

15
задан Bobrovsky 14 October 2012 в 17:59
поделиться

1 ответ

Замените NSString* NSInteger.

Это верно для любого постоянного типа, быть этим примитив, такой как интервал/плавание или класс, такой как NSString или NSInteger.

единственная вещь знать состоит в том, требуете ли Вы константы или указателя на константу (такую как withNSString), и как это инициализируется в.m Целочисленном примере файла

:

// constants.h
extern NSInteger const MyIntegerConstant;

// constants.m
NSInteger const MyIntegerConstant = 666;

(Примечание: по причине, почему NSInteger вместо просто регулярного "интервала", см. это сообщение )

пример Класса:

// constants.h
extern MyClass* const MyClassConstant;

// constants.m
MyClass* const MyClassConstant= [[MyClass alloc] initWith: paramOne and:paramTwo];
39
ответ дан 1 December 2019 в 01:06
поделиться