主要内容

editDistance

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

描述

例子

d= editDistance (str1str2返回转换所需的字符插入、删除和替换的最少数量(grapheme(人类感知字符的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

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

  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。

函数成本= caseInsensitiveSubstituteCost (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,代价函数必须有形式成本= 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),函数返回交换相邻字素的代价grapheme1而且grapheme2str1

  • 文件输入至editDistance,代价函数必须有形式成本= 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

Baidu
map