2015-03-20 1 views
1

Я смотрю на совпадение слов в ряде документов. Для каждого набора документов я нахожу словарь N наиболее часто встречающихся слов. Затем я создаю NxN-матрицу для каждого документа, представляющего совпадение слов в одном и том же контекстном окне (последовательность из k слов). Это разреженная матрица, поэтому, если у меня есть M-документы, у меня есть разреженная матрица NxNxM. Поскольку Matlab не может хранить разреженные матрицы с более чем двумя измерениями, я сглаживаю эту матрицу в (NxN) xM разреженную матрицу.Как я могу объединить две матрицы совпадения с перекрывающимися, но не идентичными словарями?

Я столкнулся с проблемой, что я сгенерировал 2 из этих совпадающих матриц для разных наборов документов. Поскольку наборы были разными, словари разные. Вместо объединения наборов документов и пересчета матрицы совпадения я хотел бы объединить две существующие матрицы.

Например,

N = 5; % Size of vocabulary 
M = 5; % Number of documents 
A = ones(N*N, M); % A is a flattened (N, N, M) matrix 
B = 2*ones(N*N, M); % B is a flattened (N, N, M) matrix 
A_ind = {'A', 'B', 'C', 'D', 'E'}; % The vocabulary labels for A 
B_ind = {'A', 'F', 'B', 'C', 'G'}; % The vocabulary labels for B 

Если объединить с получением (49, 5) матрицы, где каждый (49, 1) куска, который может быть преобразован в (7,7) матрицы со следующей структурой ,

 A  B  C  D  E  F  G 
__________________________________________ 
A| 3  3  3  1  1  2  2 
B| 3  3  3  1  1  2  2 
C| 3  3  3  1  1  2  2 
D| 1  1  1  1  1  0  0 
E| 1  1  1  1  1  0  0 
F| 2  2  2  0  0  2  2 
G| 2  2  2  0  0  2  2 

Если A и B перекрываются, количество совпадений должно быть добавлено вместе. В противном случае, элементы должны быть считаны из A или counts from B. В этом примере будут некоторые элементы (0 в примере), где у меня нет статистики count, потому что некоторые словарные термины принадлежат исключительно A, а некоторые - исключительно в B .

+0

Не знаю, чего вы пытаетесь достичь здесь. – knedlsepp

ответ

1

Ключом является использование способности логических индексов сглаживаться.

A = ones(25, 5); 
B = 2*ones(25,5); 
A_ind = {'A', 'B', 'C', 'D', 'E'}; 
B_ind = {'A', 'F', 'B', 'C', 'G'}; 

new_ind = [A_ind, B_ind(~ismember(B_ind, A_ind))]; 
new_size = length(new_ind)^2; 
new_array = zeros(new_size, 5); 

% Find the indices that correspond to elements of A 
A_overlap = double(ismember(new_ind, A_ind)); 
A_mask = (A_overlap'*A_overlap)==1; 

% Find the indices that correspond to elements of B 
B_overlap = double(ismember(new_ind, B_ind)); 
B_mask = (B_overlap'*B_overlap)==1; 

% Flatten the logical indices to assign the elements to the new array 
new_array(A_mask(:), :) = A; 
new_array(B_mask(:), :) = new_array(B_mask(:), :) + B; 

 Смежные вопросы

  • Нет связанных вопросов^_^