editDistance

Найдите расстояние редактирования между двумя строками или документами

Описание

пример

d = editDistance(str1,str2) возвращает самое низкое количество графемы (термин Unicode для воспринятых человеком символов) вставки, удаления и замены, требуемые преобразовывать str1 к str2.

пример

d = editDistance(document1,document2) возвращает самое низкое количество маркерных вставок, удалений и замен, требуемых преобразовывать document1 к document2.

пример

d = editDistance(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение".

Примеры

свернуть все

Найдите расстояние редактирования между строками "Text analytics" и "Text analysis". Расстояние редактирования, по умолчанию, является общим количеством вставок графемы, удалений и замен, требуемых поменять одну струну другому.

str1 = "Text analytics";
str2 = "Text analysis";

Найдите расстояние редактирования.

d = editDistance(str1,str2)
d = 2

Это означает менять первую струну к второму, требует двух редактирований. Например:

  1. Замена – Замена символьный "t" к "s": "Text analytics" к "Text analysics".

  2. Удаление – Удаляет символьный "c": "Text analysics" к "Text analysis".

Найдите расстояние редактирования между двумя маркируемыми документами. Для маркируемого входа документа расстояние редактирования, по умолчанию, является общим количеством маркерных вставок, удалений и замен, требуемых изменить один документ другому.

str1 = "It's time for breakfast.";
document1 = tokenizedDocument(str1);

str2 = "It's now time to sleep.";
document2 = tokenizedDocument(str2);

Найдите расстояние редактирования.

d = editDistance(document1,document2)
d = 3

Это означает изменяться, первый документ второму требует трех редактирований. Например:

  1. Вставка – Вставляет слово "now".

  2. Замена – Замена слово "for" с "to".

  3. Замена – Замена слово "breakfast" с "sleep".

editDistance функция, по умолчанию, возвращает самое низкое количество вставок графемы, удалений и замен, требуемых поменять одну струну другому. Чтобы также включать действие подкачки в вычисление, используйте 'SwapCost' опция.

Во-первых, найдите расстояние редактирования между строками "MATALB" и "MATLAB".

str1 = "MATALB";
str2 = "MATLAB";
d = editDistance(str1,str2)
d = 2

Одно возможное редактирование:

  1. Замените вторым "A" с "L": ("MATALB" к "MATLLB").

  2. Замените вторым "L" с "A": ("MATLLB" к "MATLAB").

Значением по умолчанию для стоимости подкачки (стоимость свопинга двух смежных графем) является Inf. Это означает, что подкачки не рассчитывают к расстоянию редактирования. Чтобы включать подкачки, установите 'SwapCost' опция к 1.

d = editDistance(str1,str2,'SwapCost',1)
d = 1

Это означает, что существует одно действие. Например, подкачайте смежные символы "A" и "L".

Чтобы вычислить расстояние редактирования между двумя словами и указать, что редактирования являются нечувствительными к регистру, задайте пользовательскую функцию стоимости замены.

Во-первых, вычислите расстояние редактирования между строками "MATLAB" и "MathWorks".

d = editDistance("MATLAB","MathWorks")
d = 8

Это означает менять первую струну к второму, требует восьми редактирований. Например:

  1. Замена – Замена символьный "A" с "a"MATLAB к "MaTLAB")

  2. Замена – Замена символьный "T" с "t"MATLAB к "MatLAB")

  3. Замена – Замена символьный "L" с "h"MATLAB к "MathAB")

  4. Замена – Замена символьный "A" с "W". ("MathAB" к "MathWB")

  5. Замена – Замена символьный "B" с "o". ("MathWB" к "MathWo")

  6. Вставка – Вставляет символьный "r". ("MathWo" к "MathWor")

  7. Вставка – Вставляет символьный "k". ("MathWor" к "MathWork")

  8. Вставка – Вставляет символьный "s". ("MathWork" к "MathWorks")

Вычислите расстояние редактирования и задайте пользовательскую функцию стоимости замены caseInsensitiveSubstituteCost, перечисленный в конце примера. Пользовательский функциональный caseInsensitiveSubstituteCost возвращается 0, если два входных параметров являются тем же самым или отличаются только случаем, и возвращается 1 в противном случае.

d = editDistance("MATLAB","MathWorks",'SubstituteCost',@caseInsensitiveSubstituteCost)
d = 6

Это означает, что общая стоимость на то, чтобы поменять первую струну к второму равняется 6. Например:

  1. Замена (стоит 0) – Замена символьный "A" с "a"MATLAB к "MaTLAB")

  2. Замена (стоит 0) – Замена символьный "T" с "t"MATLAB к "MatLAB")

  3. Замена (стоит 1) – Замена символьный "L" с "h"MATLAB к "MathAB")

  4. Замена (стоит 1) – Замена символьный "A" с "W". ("MathAB" к "MathWB")

  5. Замена (стоит 1) – Замена символьный "B" с "o". ("MathWB" к "MathWo")

  6. Вставьте (стойте 1) – Вставляют символьный "r". ("MathWo" к "MathWor")

  7. Вставьте (стойте 1) – Вставляют символьный "k". ("MathWor" к "MathWork")

  8. Вставьте (стойте 1) – Вставляют символьный "s". ("MathWork" к "MathWorks")

Пользовательская функция стоимости

Пользовательский функциональный caseInsensitiveSubstituteCost возвращается 0, если два входных параметров являются тем же самым или отличаются только случаем, и возвращается 1 в противном случае.

function cost = caseInsensitiveSubstituteCost(grapheme1,grapheme2)

if lower(grapheme1) == lower(grapheme2)
    cost = 0;
else
    cost = 1;
end

end

Входные параметры

свернуть все

Исходная строка в виде массива строк, вектора символов или массива ячеек из символьных векторов.

Если str1 содержит несколько строк, затем str2 должен быть одного размера с str1 или скаляр.

Типы данных: char | string | cell

Целевая строка в виде массива строк, вектора символов или массива ячеек из символьных векторов.

Если str2 содержит несколько строк, затем str1 должен быть одного размера с str2 или скаляр.

Типы данных: char | string | cell

Исходный документ в виде tokenizedDocument массив.

Если document1 содержит несколько документов, затем document2 должен быть одного размера с document1 или скаляр.

Целевой документ в виде tokenizedDocument массив.

Если document2 содержит несколько документов, затем document1 должен быть одного размера с document2 или скаляр.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: editDistance("MATALB","MATLAB",'SwapCost',1) возвращает расстояние редактирования между строками "MATALB" и "MATLAB" и устанавливает стоимость подкачивать две смежных графемы к 1.

Стойте, чтобы вставить графему или лексему в виде разделенной запятой пары, состоящей из 'InsertCost' и неотрицательный скаляр или указатель на функцию.

Если 'InsertCost' указатель на функцию, затем функция должна принять один вход и возвратить стоимость вставки входа к источнику. Например:

  • Для входа строки к editDistance, функция стоимости должна иметь форму cost = func(grapheme), куда функция возвращает стоимость вставки grapheme в str1.

  • Для входа документа к editDistance, функция стоимости должна иметь форму cost = func(token), куда функция возвращает стоимость вставки token в document1.

Пример: 'InsertCost',2

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | function_handle

Стойте, чтобы удалить графему или лексему в виде разделенной запятой пары, состоящей из 'DeleteCost' и неотрицательный скаляр или указатель на функцию.

Если 'DeleteCost' указатель на функцию, затем функция должна принять один вход и возвратить стоимость удаления входа из источника. Например:

  • Для входа строки к editDistance, функция стоимости должна иметь форму cost = func(grapheme), куда функция возвращает стоимость удаления grapheme от str1.

  • Для входа документа к editDistance, функция стоимости должна иметь форму cost = func(token), куда функция возвращает стоимость удаления token от document1.

Пример: 'DeleteCost',2

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | function_handle

Стойте, чтобы заменить графемой или лексемой в виде разделенной запятой пары, состоящей из 'SubstituteCost' и неотрицательный скаляр или указатель на функцию.

Если 'SubstituteCost' указатель на функцию, затем функция должна принять точно два входных параметров и возвратить стоимость замены первым входом со вторым в источнике. Например:

  • Для входа строки к editDistance, функция стоимости должна иметь форму cost = func(grapheme1,grapheme2), куда функция возвращает стоимость замены grapheme1 с grapheme2 в str1.

  • Для входа документа к editDistance, функция стоимости должна иметь форму cost = func(token1,token2), куда функция возвращает стоимость замены token1 с token2 в document1.

Пример: 'SubstituteCost',2

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | function_handle

Стойте, чтобы подкачать две смежных графемы или лексемы в виде разделенной запятой пары, состоящей из 'SwapCost' и неотрицательный скаляр или указатель на функцию.

Если 'SwapCost' указатель на функцию, затем функция должна принять точно два входных параметров и возвратить стоимость свопинга первого входа со вторым в источнике. Например:

  • Для входа строки к editDistance, функция стоимости должна иметь форму cost = func(grapheme1,grapheme2), куда функция возвращает стоимость свопинга смежных графем grapheme1 и grapheme2 в str1.

  • Для входа документа к editDistance, функция стоимости должна иметь форму cost = func(token1,token2), куда функция возвращает стоимость свопинга смежных лексем token1 и token2 в document1.

Пример: 'SwapCost',2

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | function_handle

Выходные аргументы

свернуть все

Отредактируйте расстояние, возвращенное как неотрицательный скаляр.

Алгоритмы

свернуть все

Отредактируйте расстояние

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

Для других обычно используемых расстояний редактирования используйте эти опции:

РасстояниеОписаниеОпции
Levenshtein (значение по умолчанию)самое низкое количество вставок, удалений и заменЗначение по умолчанию
Damerau-Levenshteinсамое низкое количество вставок, удалений, замен и подкачек'SwapCost',1
Хэммингсамое низкое количество замен только'InsertCost',Inf,'DeleteCost',Inf

Введенный в R2019a