Latent Semantic Indexing

cr4m0

Angesehenes Mitglied
Ich möchte ein Programm in PHP schreiben, dass "Latent Semantic Indexing" oder auch "Latent Semantic Analysis" benutzt, um Texten passende Schlagwörter zuzuordnen.

Erklärung der Methode bei Wikipedia:
http://de.wikipedia.org/wiki/Latent_Semantic_Indexing

Mein Ansatz sieht bisher so aus:
1) Den Text in einzelne Wörter trennen, die dann mit einem "Stemmer" auf die Grundform reduziert werden => Array, das die Wortstämme enthält [split()]
2) Stop-Wörter ("und", "aber", ...) entfernen [foreach-Schleife: prüfen, ob in StopWords-Array]
3) Die Termgewichte berechnen

Nach diesem Code ...
CODE
$term_document_matrix = array();
foreach ($words as $word) {
// $freq is the number of occurrences of $word in this document;
// $max is the number of occurrences of the most frequent word in this document;
// $doc1 is the number of documents in database;
// $doc2 is the number of documents in database containing $word;
$weight = $freq/$max * log($doc1/$doc2);
$term_document_matrix[$word] = $weight;
}


... sollte ich ein Array erhalten, das die Wörter als Keys und die Termgewichte als Values enthält.

Aber da fehlt dann trotzdem noch so einiges, oder?
Bei Wikipedia steht, dass man Singulärwertzerlegung nutzen muss, um die Term-Dokument-Matrix in drei Komponenten zu teilen:
( A = U * S * V )
Die orthogonalen Matrizen U und V enthalten die Eigenvektoren von AtA bzw. AAt, S ist die Diagonalmatrix mit den Wurzeln der Eigenwerte von AtA, auch Singulärwerte genannt.
Mit den Eigenwerten in der erzeugten matrix S kann man dann die Dimensionsreduktion steuern, und zwar durch sukzessives Weglassen des jeweils kleinsten Eigenwertes bis zu einer unbestimmten Grenze k.

Mein Problem: Ich weiß nicht, wie man das programmieren soll (in PHP). Könnt ihr mir dabei helfen? Das wäre super. Danke im Voraus!
 
Zurück
Oben