主要内容

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”

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

首先,计算字符串之间的编辑距离“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. 插入(花费1)-插入字符“r”.(“MathWo”“MathWor”

  7. 插入(花费1)-插入字符“k”.(“MathWor”“MathWork”

  8. 插入(花费1)-插入字符“s”.(“MathWork”“MathWorks”

自定义成本函数

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

函数cost = caseinsensitivesubstitecost (grapheme1,grapheme2)如果Lower (grapheme1) == Lower (grapheme2) cost = 0;其他的成本= 1;结束结束

输入参数

全部折叠

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

如果str1那么,包含多个字符串str2一定要和str1或标量。

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

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

如果str2那么,包含多个字符串str1一定要和str2或标量。

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

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

如果document1那么,包含多个文档document2一定要和document1或标量。

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

如果document2那么,包含多个文档document1一定要和document2或标量。

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

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

插入字素或标记的开销,指定为逗号分隔的对,由“InsertCost”和非负标量或函数句柄。

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

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

  • 用于文件输入editDistance,代价函数必须有这样的形式Cost = func(令牌),函数返回插入的代价令牌document1

例子:“InsertCost”,2

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

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

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

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

  • 用于文件输入editDistance,代价函数必须有这样的形式Cost = func(令牌),函数返回删除的代价令牌document1

例子:“DeleteCost”,2

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

替换字素或标记的开销,指定为逗号分隔的对,由“SubstituteCost”和非负标量或函数句柄。

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

  • 对于字符串输入editDistance,代价函数必须有这样的形式Cost = func(grapheme1,grapheme2),函数返回替换的代价grapheme1grapheme2str1

  • 用于文件输入editDistance,代价函数必须有这样的形式Cost = func(token1,token2),函数返回替换的代价token1token2document1

例子:“SubstituteCost”,2

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

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

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

  • 对于字符串输入editDistance,代价函数必须有这样的形式Cost = func(grapheme1,grapheme2),函数返回交换相邻字母的代价grapheme1而且grapheme2str1

  • 用于文件输入editDistance,代价函数必须有这样的形式Cost = func(token1,token2),函数返回交换相邻令牌的代价token1而且token2document1

例子:“SwapCost”,2

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

输出参数

全部折叠

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

算法

全部折叠

编辑距离

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

对于其他常用的编辑距离,使用这些选项:

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

版本历史

在R2019a中引入