主要内容

editDistance

查找两个字符串或文档之间的编辑距离

描述

例子

d= editDistance (str1str2返回转换所需插入、删除和替换的最低数量的字素(用于人类理解的字符的Unicode术语)str1str2

例子

d= editDistance (document1document2返回转换所需的令牌插入、删除和替换的最低数量document1document2

例子

d= editDistance (___名称,值使用一个或多个名称-值对参数指定其他选项。

例子

全部折叠

查找字符串之间的编辑距离“文本分析”“文本分析”.默认情况下,编辑距离是将一个字符串更改为另一个字符串所需的字素插入、删除和替换的总数。

str1 =“文本分析”;str2 =“文本分析”

找到编辑距离。

d = editDistance (str1 str2)
d = 2

这意味着将第一个字符串更改为第二个需要两次编辑。例如:

  1. 替换—替换字符“t”到一个“s”“文本分析”“文本analysics”

  2. 删除-删除字符“c”“文本analysics”“文本分析”

查找两个标记化文档之间的编辑距离。对于标记化的文档输入,默认情况下,编辑距离是将一个文档更改为另一个文档所需的标记插入、删除和替换的总数。

str1 =“该吃早饭了。”;document1 = tokenizedDocument (str1);str2 =“现在该睡觉了。”;document2 = tokenizedDocument (str2);

找到编辑距离。

d = editDistance (document1 document2)
d = 3

这意味着将第一个文档更改为第二个文档需要三次编辑。例如:

  1. 插入-插入单词“现在”

  2. 替换-替换单词“对””到“

  3. 替换-替换单词“早餐”“睡眠”

editDistance函数在默认情况下返回将一个字符串更改为另一个字符串所需的字素插入、删除和替换的最低数量。要在计算中包含交换操作,请使用“SwapCost”选择。

首先,找到字符串之间的编辑距离“MATALB”“MATLAB”

str1 =“MATALB”;str2 =“MATLAB”;d = editDistance (str1 str2)
d = 2

一个可能的编辑是:

  1. 用第二个“一个”“L”:(“MATALB”“MATLLB”).

  2. 用第二个“L”“一个”:(“MATLLB”“MATLAB”).

交换成本(交换两个相邻字母的成本)的默认值是.这意味着交换不计入编辑距离。要包含交换,请设置“SwapCost”选项1。

d = editDistance (str1 str2,“SwapCost”,1)
d = 1

这意味着只有一个动作。例如,交换相邻字符“一个”“L”

若要计算两个单词之间的编辑距离并指定编辑不区分大小写,请指定自定义替代cost函数。

首先,计算字符串之间的编辑距离“MATLAB”“MathWorks”

d = editDistance (“MATLAB”“MathWorks”
d = 8

这意味着将第一个字符串更改为第二个需要8次编辑。例如:

  1. 替换—替换字符“一个”“一个”.(“MATLAB”“MaTLAB”

  2. 替换—替换字符“T”“t”.(“MaTLAB”“MatLAB”

  3. 替换—替换字符“L”“h”.(“MatLAB”“MathAB”

  4. 替换—替换字符“一个”“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)-替换字符“一个”“一个”.(“MATLAB”“MaTLAB”

  2. 替换(代价0)-替换字符“T”“t”.(“MaTLAB”“MatLAB”

  3. 替换(代价1)-替换角色“L”“h”.(“MatLAB”“MathAB”

  4. 替换(代价1)-替换角色“一个”“W”.(“MathAB”“MathWB”

  5. 替换(代价1)-替换角色“B”“o”.(“MathWB”“MathWo”

  6. Insert (cost 1) -插入字符“r”.(“MathWo”“MathWor”

  7. Insert (cost 1) -插入字符“k”.(“MathWor”“MathWork”

  8. Insert (cost 1) -插入字符“s”.(“MathWork”“MathWorks”

自定义代价函数

自定义函数caseInsensitiveSubstituteCost如果两个输入按大小写相同或不同,则返回0,否则返回1。

函数成本= caseInsensitiveSubstituteCost (grapheme1 grapheme2)如果drawtext (grapheme1) == drawtext (grapheme2) = 0;其他的成本= 1;结束结束

输入参数

全部折叠

源字符串,指定为字符串数组、字符向量或字符向量的单元格数组。

如果str1包含多个字符串,然后str2必须和str1或标量。

数据类型:字符|字符串|细胞

目标字符串,指定为字符串数组、字符向量或字符向量的单元格数组。

如果str2包含多个字符串,然后str1必须和str2或标量。

数据类型:字符|字符串|细胞

源文件,指定为tokenizedDocument数组中。

如果document1包含多个文档,然后document2必须和document1或标量。

目标文档,指定为tokenizedDocument数组中。

如果document2包含多个文档,然后document1必须和document2或标量。

名称-值参数

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:editDistance(“MATALB”、“MATLAB”、“SwapCost”,1)返回字符串之间的编辑距离“MATALB”“MATLAB”并将交换两个相邻字母的代价设置为1。

插入由逗号分隔的字符对组成的字素或令牌的开销“InsertCost”和非负标量或函数句柄。

如果“InsertCost”是函数句柄,则该函数必须接受单个输入并返回将输入插入源的代价。例如:

  • 为字符串输入editDistance,成本函数必须有形式成本= func(字母),函数返回插入的代价字母str1

  • 文件输入到editDistance,成本函数必须有形式成本= func(令牌),函数返回插入的代价令牌document1

例子:“InsertCost”,2

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|function_handle

删除字符或令牌的代价,指定为逗号分隔对,由“DeleteCost”和非负标量或函数句柄。

如果“DeleteCost”是函数句柄,则该函数必须接受单个输入并返回从源删除输入的代价。例如:

  • 为字符串输入editDistance,成本函数必须有形式成本= func(字母),其中函数返回删除的代价字母str1

  • 文件输入到editDistance,成本函数必须有形式成本= func(令牌),其中函数返回删除的代价令牌document1

例子:“DeleteCost”,2

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|function_handle

替换由逗号分隔对组成的字素或令牌的代价“SubstituteCost”和非负标量或函数句柄。

如果“SubstituteCost”是函数句柄,则该函数必须接受两个输入,并返回源中的第二个输入替换第一个输入的代价。例如:

  • 为字符串输入editDistance,成本函数必须有形式成本= func (grapheme1 grapheme2),函数返回替换的代价grapheme1grapheme2str1

  • 文件输入到editDistance,成本函数必须有形式成本= func (token1 token2),函数返回替换的代价token1token2document1

例子:“SubstituteCost”,2

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|function_handle

交换两个相邻的字母或标记的代价,指定为逗号分隔对,由“SwapCost”和非负标量或函数句柄。

如果“SwapCost”是函数句柄,则该函数必须接受两个输入,并返回源文件中第一个输入与第二个输入交换的代价。例如:

  • 为字符串输入editDistance,成本函数必须有形式成本= func (grapheme1 grapheme2),函数返回交换相邻字母的代价grapheme1grapheme2str1

  • 文件输入到editDistance,成本函数必须有形式成本= func (token1 token2),其中函数返回交换相邻标记的代价token1token2document1

例子:“SwapCost”,2

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|function_handle

输出参数

全部折叠

编辑距离,作为非负标量返回。

算法

全部折叠

编辑距离

默认情况下,该函数使用Levenshtein距离:将一个字符串转换为另一个字符串所需的最低插入、删除和替换次数。

对于其他常用的编辑距离,请使用以下选项:

距离 描述 选项
Levenshtein(默认) 插入、删除和替换的最低数量 默认的
Damerau-Levenshtein 插入、删除、替换和交换的最低数量 “SwapCost”,1
汉明 只有最少的替换数 “InsertCost”,正无穷,DeleteCost,正无穷

介绍了R2019a