ddTextCompare

  • Версия: 0.9
  • Выпущено:
  • Метки: General
Скачать 67 скачиваний

Описание

Библиотека для определения сходства между двумя строками. На данный момент реализовано только сравнение строк в UTF-8.

Чем является эта библиотека

ddTextCompare может быть использована, когда необходимо количественно оценить сходство/различие между строками. Она использует такие критерии, как количество тех или иных символов, а также их расположение в словах. Таким образом, библиотеку можно использовать, например, при сравнении строк, в которых могут находиться ошибки, или слова находятся в разном порядке.

Чем не является эта библиотека

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

Как это работает

По умолчанию в библиотеке используется следующий принцип сравнения. Для каждой строки находятся два n-размерных вектора, где n — это количество уникальных символов, использующихся в обоих строках. Первый вектор v1 отражает то, какие символы используются в строке и их количество. Другой вектор v2 показывает, в какой позиции находятся эти символы. После того, как два вектора найдены для каждой строки, между ними попарно находятся косинусы угла, которые в итоге умножаются на соответствующие им веса, складываются, а результат отображается на промежуток от 0 до 1.

Список изменений

  • Первая версия.

Документация

Installation

Composer

Просто добавьте зависимость в composer. json вашего проекта.

composer require dd/php-library-ddtextcompare

Вручную

Хотя использовать Composer удобнее, библиотеку можно просто скопировать в нужное место и подключить все классы из папки src в ваш проект.

Примеры

Сравнение строк с ошибками

$compare = new DDTextCompare();
$similarity = $compare->compare("Text without any typos", "Text wihtout ayn typoes");
// $similarity = 0.9907639055774

Изменение весов

По умолчанию веса одинаковы как для критерия по количеству определённых символов, так и для критерия по их расположению в словах, но это можно поменять. Когда вес одного критерия изменяется, другой автоматически изменяется тоже, чтобы их сумма была равна 1.

$compare = new DDTextCompare();
$comparator = new Comparator\Cosine();

//Изменим вес критерия по количеству символов
$comparator->setCharTotalWeight(0.8);

$similarity = $compare->compare("Text without any typos", "Txet wihtout ayn typoes", $comparator);
// $similarity = 0.99310343750374

Добавление функционала

Новый класс, выполняющий сравнение, может быть легко добавлен. Он должен реализовывать интерфейс DDTextCompare\Comparator interface.

$compare = new DDTextCompare();
$comparator = new Comparator\YourCustomComparator();

$similarity = $compare->compare("Text without any typos", "Txet wihtout ayn typoes", $comparator);