2013-04-05 4 views
3

문자열과 패턴이 있습니다. matlab에서 strfind를 사용하여 가장 가까운 문자열을 찾는 방법은 무엇입니까? 즉 strfind는 가장 가까운 문자열 (예 : 10 개의 가장 가까운 문자열)을 찾는 데 관심이있는 동안 정확한 일치를 찾습니다.가장 가까운 문자열을 찾는 방법은 무엇입니까?

+4

메트릭을 닫으시겠습니까? – Acorbe

+3

[this] (http://www.mathworks.com/matlabcentral/answers/18932)가 재미있을 것입니다. –

답변

1

this 함수 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' 
관련 문제