3

我有一个字符串和一个模式。如何在 matlab 中使用 strfind 并找到一堆最接近的字符串?换句话说, strfind 找到了完全匹配,而我有兴趣找到一堆最接近的字符串(例如 10 个最接近的字符串)

4

1 回答 1

1

您可以从文件交换中使用函数,该函数strdist计算两个字符串之间的 Levenshtein 距离。

这是一个方便的包装函数。你给它一个字符串str和一个字符串数组strarray(以及可选的一些要返回的字符串n),它给你一个包含最接近n字符串的单元格数组:

function result = strfuzzy(str,strarray,n)
#STRFUZZY
#
#   Inputs
#       str         String
#       strarray    Cell array of strings
#       n           Integer, 1 <= n <= length(strarray)
#
#   Outputs
#       result      Cell array of length n containing the closest matches to str
#

if nargin < 2, error('Requires at least two arguments'), end
if nargin < 3, n = length(strarray); end

A = cellfun( @(x) strdist(str,x), strarray );
[tmp,idx] = sort(A);
result = strarray(idx);
result = result(1:n);

end

以下是如何使用它:

>> strarray = {'cat', 'hey', 'hay', 'hat', 'Hey'};
>> strfuzzy('hey', strarray)
ans = 
    'hey'    'hay'    'Hey'    'hat'    'cat'
>> strfuzzy('bat', strarray, 3)
ans = 
    'cat'    'hat'    'hay'
于 2013-04-05T10:00:00.537 回答