2013-06-10 22 views
36

Esistono librerie per il calcolo dei punteggi di similarità semantica per una coppia di frasi?Python: punteggio di similarità semantico per le stringhe

Sono a conoscenza del database semantico di WordNet e di come posso generare il punteggio per 2 parole, ma sto cercando librerie che eseguano tutte le attività di pre-elaborazione come port-stemming, stop word, ecc, su intere frasi e produce un punteggio per quanto riguarda le due frasi.

Ho trovato uno work in corso che è stato scritto utilizzando il framework .NET che calcola il punteggio utilizzando una serie di passaggi di pre-elaborazione. C'è qualche progetto che faccia questo in python?

Io non sto cercando per la sequenza di operazioni che avrebbero aiutato a trovare il punteggio (come chiesto here)
mi piacerebbe implementare ogni fase da sola, o funzioni colla da diverse librerie in modo che funziona per coppie di frasi, ma ho bisogno di questo principalmente come strumento per testare le inferenze sui dati.


EDIT: stavo considerando usando NLTK e calcolando il punteggio per ogni coppia di parole ripetuti su due frasi, e quindi trarre conclusioni dalla deviazione standard dei risultati, ma non so se questa è una stima legittima della somiglianza. Inoltre, ci vorrà molto tempo per stringhe lunghe.
Ancora una volta, sto cercando progetti/librerie che lo implementino già in modo intelligente. Qualcosa che mi permette di fare questo:

import amazing_semsim_package 
str1='Birthday party ruined as cake explodes' 
str2='Grandma mistakenly bakes cake using gunpowder' 

>>similarity(str1,str2) 
>>0.889 
+0

Considerare modelli semantici vettoriali o modelli di scomposizione matriciale per confrontare la similarità della frase. In caso contrario, è possibile ricorrere a un coseno simile a lesk, che vettorizza per prima una frase per calcolare il coseno tra i 2 vettori – alvas

+0

se si desidera appesantire qualcosa come soglia o avere un disperato bisogno del punteggio, considerare la similarità wup di NLTK. Dovresti usare qualcosa come il pattern CLIPS per ottenere il tipo (verbo, nome, agg., Ecc.).puoi usarlo per trovare effettivamente il numero perfetto di categorie per LSA/LDA come trovato in gensim o un'implementazione fuzzy/cosine di Kmean. –

risposta

37

il miglior pacchetto che ho visto di questo è Gensim, che si trova presso il Gensim Homepage. L'ho usato molte volte, e nel complesso sono stato molto contento della sua facilità d'uso; è scritto in Python e ha un facile da seguire tutorial per iniziare, che confronta 9 stringhe. Può essere installato tramite pip, quindi non avrai molti problemi a installarlo, spero.

Quale algoritmo di punteggio utilizzato dipende fortemente dal contesto del problema, ma suggerirei di iniziare con la funzionalità LSI se si desidera qualcosa di base. (Questo è ciò che il tutorial ti guida.)

Se segui il tutorial per gensim, ti guiderà attraverso il confronto di due stringhe, usando la funzione Similarities. Questo ti permetterà di vedere come le tue punture si confrontano tra loro, o con qualche altra puntura, sulla base del testo che contengono.

Se siete interessati alla scienza dietro come funziona, controlla this paper.

+0

Questo sembra molto promettente. Grazie per aver segnalato questo Justin. – user8472

-4

quanto ne sappia io il più potente NLP-Lib per Python è http://nltk.org/

+3

NLTK ha circa 6 punteggi per la somiglianza semantica tra una coppia di concetti di parole, ma sto cercando di confrontare due stringhe (di parecchie, forse centinaia di parole) – user8472

0

Purtroppo, non posso aiutare con PY, ma si può dare un'occhiata al mio vecchio progetto che utilizza dizionari di realizzare i confronti Semantic tra le frasi (che possono essere successivamente codificate in PY implementando l'analisi dello spazio vettoriale). Dovrebbero essere solo poche ore di programmazione per tradurre da JAVA a PY. https://sourceforge.net/projects/semantics/

Problemi correlati