스펙트럼 커널 함수는 두 문자열 사이의 동일한 n 그램을 계산하여 문자열에서 작동합니다. 예를 들어, '도구'에는 3 개의 2 그램 ('~', '~', '~')이 있으며 도구와 바보 사이의 유사성은 2입니다 ('oo'와 'ol'는 공통입니다.).MATLAB에서 스펙트럼 커널 함수를 구현하는 방법은 무엇입니까?
이 메트릭을 계산할 수있는 MATLAB 함수를 작성하려면 어떻게해야합니까?
스펙트럼 커널 함수는 두 문자열 사이의 동일한 n 그램을 계산하여 문자열에서 작동합니다. 예를 들어, '도구'에는 3 개의 2 그램 ('~', '~', '~')이 있으며 도구와 바보 사이의 유사성은 2입니다 ('oo'와 'ol'는 공통입니다.).MATLAB에서 스펙트럼 커널 함수를 구현하는 방법은 무엇입니까?
이 메트릭을 계산할 수있는 MATLAB 함수를 작성하려면 어떻게해야합니까?
첫 번째 단계는 주어진 문자열에 대해 n 그램을 생성 할 수있는 함수를 만드는 것입니다. 벡터화 된 방식으로이를 수행하는 한 가지 방법은 영리한 인덱싱을 사용하는 것입니다.
function [subStrings, counts] = n_gram(fullString, N)
if (N == 1)
[subStrings, ~, index] = unique(cellstr(fullString.')); %.'# Simple case
else
nString = numel(fullString);
index = hankel(1:(nString-N+1), (nString-N+1):nString);
[subStrings, ~, index] = unique(cellstr(fullString(index)));
end
counts = accumarray(index, 1);
end
이 먼저 주어진 문자열에서 N 고유 문자열 길이의 각각의 세트를 선택한다 인덱스의 행렬을 생성하는 기능 HANKEL를 이용한다. 이 인덱스 행렬로 지정된 문자열을 인덱싱하면 행당 길이가 N 인 하위 문자열이 하나있는 문자 배열이 만들어집니다. CELLSTR 함수는 문자 배열의 각 행을 셀 배열의 셀에 배치합니다. 함수 UNIQUE은 반복되는 부분 문자열을 제거하고 함수 ACCUMARRAY은 각 고유 부분 문자열의 출현 횟수를 계산하는 데 사용됩니다 (어떤 이유로 든 필요할 경우).
subStrings1 = n_gram('tool',2);
subStrings2 = n_gram('fool',2);
sharedStrings = intersect(subStrings1,subStrings2);
nShared = numel(sharedStrings);
당신이 해밍 거리라고 찾고, 당신이 얻을 수있는 : 위의 기능으로
당신은 쉽게 INTERSECT 기능을 사용하여 두 개의 문자열 사이에 공유 N-그램의 수를 셀 수 doc pdist
일 경우 더 잘 설명합니다.
A=['Marcin'; 'Martin'; 'Marsha'] %data
squareform(pdist(A, 'hamming')) returns
0 0.1667 0.5000
0.1667 0 0.5000
0.5000 0.5000 0
이 양식은 몇 개의 문자가 다른지 보여줍니다. 'Marcin'과 'Martin'의 차이는 6 글자 중 1입니다. 1/6 = 0.1667 'Marcin'대 'Marsha'는 6/3이므로 3/6 = 0.5
실제 숫자를 원하면 문자가 다른 경우 전체 행렬에 길이 (A)를 곱하면됩니다.
이것은 질문이 묘사하는 것과 같이 들리는 것은 아닙니다. – gnovice
지원 벡터 기계 분류자를 위해 다른 용도로 커널 함수를 만드는 데 관심이있는 것 같습니다. 이를 위해 해밍 거리만으로는 정보를 충분히 이용할 수 없습니다. http://en.wikipedia.org/wiki/String_kernel 여기에서 소스 링크를 찾아보십시오. 행운을 빌어 요! 나는 똑같은 일을하려하고있다. –