SVD-python È un'implementazione molto chiara e parsimoniosa della SVD. È praticamente psuedocode e dovrebbe essere abbastanza facile da capire e confrontare/attingere per l'implementazione php, anche se non si conosce molto python.
SVD-python
Detto questo, come altri hanno detto che non ci si aspetterebbe di essere in grado di fare LSA molto pesanti con implementazione php quello che suona come un web-host piuttosto limitata.
Acclamazioni
Edit: Il modulo di cui sopra non fa nulla da sola, ma c'è un esempio inclusi nei commenti di apertura . Dando per scontato che hai scaricato il modulo python, ed era accessibile (per esempio nella stessa cartella), si potrebbe implementare un esempio banale come segue,
#!/usr/bin/python
import svd
import math
a = [[22.,10., 2., 3., 7.],
[14., 7.,10., 0., 8.],
[-1.,13.,-1.,-11., 3.],
[-3.,-2.,13., -2., 4.],
[ 9., 8., 1., -2., 4.],
[ 9., 1.,-7., 5.,-1.],
[ 2.,-6., 6., 5., 1.],
[ 4., 5., 0., -2., 2.]]
u,w,vt = svd.svd(a)
print w
Qui 'w' contiene l'elenco dei valori singolari.
Naturalmente questo ti porta solo a metà dell'analisi semantica latente e dei suoi parenti. In genere si desidera ridurre il numero di valori singolari, quindi utilizzare la metrica appropriata della distanza per misurare la somiglianza tra i documenti, o parole, documenti o parole, ecc. Il coseno dell'angolo tra i vettori risultanti è piuttosto popolare .
Latent Semantic Mapping (pdf)
è di gran lunga la più chiara della carta, più conciso e informativo che ho letto sui gradini rimanenti si bisogno di lavorare in seguito alla SVD.
Edit2: notare anche che se si sta lavorando con molto grandi matrici termine-documento (sto assumendo questo è quello che state facendo) si tratta quasi certamente sarà molto più efficiente per eseguire la decomposizione in una modalità offline, quindi eseguire solo i confronti in modo live in risposta alle richieste. mentre svd-python è ottimo per l'apprendimento, lo svdlibc è più ciò che si vorrebbe per un calcolo così pesante .
infine come accennato nel documento bellegarda sopra, ricorda che non è necessario ricalcolare lo svd ogni volta che si ottiene un nuovo documento o richiesta. a seconda di ciò che stai cercando di fare, potresti ottenere probabilmente eseguendo la svd una volta ogni settimana o giù di lì, in una modalità offline, una macchina locale, e poi caricando i risultati (nonostante le preoccupazioni sulla dimensione/larghezza di banda).
comunque buona fortuna!
I tuoi commenti in tedesco sono molto utili. Perché è necessario implementare un algoritmo così complicato in PHP? –
Se qualcuno ha bisogno dei commenti in inglese, posso tradurli, ovviamente. Devo implementarlo in PHP poiché non posso installare librerie esterne sul mio spazio web. – caw
odora di compiti a casa – VVS