Clustering von Text in MATLAB

Ich möchte hierarchisch agglomerative Clustering für Texte in MATLAB durchführen. Sagen Sie, ich habe vier Sätze,

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

Ich möchte die obigen vier Sätze in Gruppen zusammenfassen, um zu sehen, welche ähnlicher sind. Ich weiß, Statistik-Toolbox hat Befehl wiepdist, um paarweise Entfernungen zu messen,linkage zur Berechnung der Cluster-Ähnlichkeit usw. Ein einfacher Code wie:

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

funktioniert gut und gibt ein Dendrogramm zurück.

Ich frage mich, ob ich diesen Befehl für die oben genannten Texte verwenden kann. Irgendwelche Gedanken?

AKTUALISIERUNG

ielen Dank an Amro. Lesen Sie "Verstanden" und berechnen Sie den Abstand zwischen den Zeichenfolgen. Code folgt:

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 

Ich habe eine Zeichenfolge eingegeben und 4 Zeichenfolgen gespeichert. Jetzt habe ich die paarweise Distanz mit @ berechnlevenshtein_distance Funktion. Es gibt eine MatrixX=[ 17 0 16 18 16].

** Ich denke das ist meine paarweise Distanzmatrix. Ähnlich wie pdist. Ist es

** Jetzt versuche ich, X einzugeben, um die Verknüpfung wie @ zu berechne

Z=linkage(X, 'single);

ie Ausgabe, die ich erhalte, ist:

Error using ==> linkage at 93 Größe von Y nicht kompatibel mit der Ausgabe der PDIST-Funktion.

Error in ==> Untitled2 at 20 Z = Verknüpfung (X, 'single').

Warum so? Kann die Verknüpfungsfunktion überhaupt nutzen? Hilfe geschätzt.

UPDATE 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: ??? Zellinhaltsreferenz von einem Nicht-Zellarray-Objekt. Fehler in ==> Untitled2 bei 22 D (kk, jk) = levenshtein_distance (S1 {kk}, S2 {jk});

Auch, warum lese ich das Ereignis aus der Datei in der ersten Schleife? Scheint nicht logisch. Etwas verwirrt, wenn ich auf diese Weise arbeiten kann oder die einzige Lösung darin besteht, alle Zeichenfolgen im Code einzugeben. Hilfe sehr geschätzt.

AKTUALISIERE

code um zwei Sätze zu vergleichen:

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');  

Ausgang D = 18.

MIT verschiedenen Zeichenfolgen:

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.

Aus der Ferne sieht ein ganz anderer Satz ähnlich aus. Was ich versuche zu tun, wenn ich @ gespeichert haFire in NY, Ich werde nicht speichernNY catches fire. Für den ersten Fall würde ich jedoch speichern, da die Informationen neu sind.

IS LD reicht dazu aus? Hilfe geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage