Agrupación de texto en MATLAB

Quiero hacer agrupaciones aglomerativas jerárquicas en textos en MATLAB. Digamos que tengo cuatro oraciones,

I have a pen.
I have a paper. 
I have a pencil.
I have a cat. 

Quiero agrupar las cuatro oraciones anteriores para ver cuáles son más similares. Sé que la caja de herramientas estadística tiene comandos comopdist para medir distancias por pares,linkage para calcular la similitud del clúster, etc. Un código simple como:

X=[1 2; 2 3; 1 4];
Y=pdist(X, 'euclidean');
Z=linkage(Y, 'single');
H=dendrogram(Z)

funciona bien y devuelve un dendrograma.

Me pregunto si puedo usar estos comandos en los textos como mencioné anteriormente. Alguna idea ?

ACTUALIZACIONES:

Gracias a Amro. Lea Entendido y calculó la distancia entre cadenas. El código sigue:

clc
S1='I have a pen'; % first String

f_id=fopen('events.txt','r'); %saved strings to compare with
events=textscan(f_id, '%s', 'Delimiter', '\n');
fclose(f_id); %close file.
events=events{1}; % saving the text read.

ii=numel(events); % selects one text randomly.
% store the texts in a cell array

for kk=1:ii

   S2=events(kk);
   S2=cell2mat(S2);
   Z=levenshtein_distance(S1,S2);
   X(kk)=Z;

end 

Ingresé una cadena y tenía 4 cadenas guardadas. Ahora calculé la distancia por pares usandolevenshtein_distance función. Devuelve una matriz.X=[ 17 0 16 18 16].

** Supongo que esta es mi matriz de distancia par sabia. Similar a lo que hace pdist. Lo es ?

** Ahora, estoy tratando de ingresar X para calcular el enlace como

Z=linkage(X, 'single);

La salida que obtengo es:

Error al usar el enlace ==> en 93 El tamaño de Y no es compatible con la salida de la función PDIST.

Error en ==> Sin título2 a 20 Z = enlace (X, 'único').

Porque ? ¿Puede usar la función de vinculación? Ayuda apreciada.

ACTUALIZACIÓN 2

clc
S1='I have a pen';

f_id=fopen('events.txt','r');
events=textscan(f_id, '%s', 'Delimiter', '\n');
fclose(f_id); %close file.
events=events{1}; % saving the text read.

ii=numel(events)+1; % total number of strings in the comparison

D=zeros(ii, ii); % initialized distance matrix;
for kk=1:ii 

    S2=events(kk);

    %S2=cell2mat(S2);

    for jk=kk+1:ii

  D(kk,jk)= levenshtein_distance(S1{kk},S2{jk});

    end

end

D = D + D';       %'# symmetric distance matrix

%# linkage expects the output format to match that of pdist,
%# so we convert D to a row vector (lower/upper part of matrix)
D = squareform(D, 'tovector');

T = linkage(D, 'single');
dendrogram(T).

Error: ??? Referencia de contenido de celda de un objeto de matriz no celular. Error en ==> Sin título2 a 22 D (kk, jk) = levenshtein_distance (S1 {kk}, S2 {jk});

Además, ¿por qué estoy leyendo el evento desde el archivo dentro del primer bucle? No parece lógico. Un poco confundido, si puedo trabajar de esta manera o la única solución es ingresar todas las cadenas dentro del código. Ayuda muy apreciada.

ACTUALIZAR

código para comparar dos oraciones:

clc
    str1 = 'Fire in NY';
    str2= 'Jeff is sick';

D=levenshtein_distance(str1,str2);
D = D + D';       %'# symmetric distance matrix

%# linkage expects the output format to match that of pdist,
%# so we convert D to a row vector (lower/upper part of matrix)

%D = squareform(D, 'tovector');

T = linkage(D, 'complete');
[H,P] = dendrogram(T,'colorthreshold','default');  

Salida D = 18.

Con diferentes cuerdas:

clc
str1 = 'Fire in NY';
str2= 'NY catches fire';

D=levenshtein_distance(str1,str2);
D = D + D';       %'# symmetric distance matrix

%# linkage expects the output format to match that of pdist,
%# so we convert D to a row vector (lower/upper part of matrix)

%D = squareform(D, 'tovector');

T = linkage(D, 'complete');
[H,P] = dendrogram(T,'colorthreshold','default'); 

D = 28.

Basado en la distancia, una oración completamente diferente se ve similar. Lo que estoy tratando de hacer, si he almacenadoFuego en Nueva YorkNo voy a almacenarNY catches fire. Sin embargo, para el primer caso, almacenaría ya que la información es nueva.

¿LD es suficiente para hacer esto? Ayuda apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta