3

私はひもとパターンを持っています。matlab で strfind を使用して、最も近い文字列を見つけるにはどうすればよいですか? つまり、strfind は、最も近い文字列の束 (たとえば、最も近い 10 個の文字列) を見つけることに興味があるときに、正確な一致を見つけます。

4

1 に答える 1

1

この関数strdistは、2 つの文字列間のレーベンシュタイン距離を計算するファイル交換から利用できます。

これは便利なラッパー関数です。単一の文字列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 に答える