editDistance

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

Синтаксис

d = editDistance(str1,str2)
d = editDistance(document1,document2)
d = editDistance(___,Name,Value)

Описание

пример

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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