Sto cercando di ottenere la somiglianza tra una singola parola e ogni parola in una frase utilizzando NLTK.NLTK converti la frase con token per sincronizzare il formato
NLTK può ottenere la somiglianza tra due parole specifiche come mostrato di seguito. Questo metodo richiede che venga fornito un riferimento specifico alla parola, in questo caso è 'dog.n.01' dove dog è un nome e vogliamo utilizzare la prima definizione (01) NLTK.
dog = wordnet.synset('dog.n.01')
cat = wordnet.synset('cat.n.01')
print dog.path_similarity(cat)
>> 0.2
Il problema è che ho bisogno di ottenere la parte di informazioni vocali da ogni parola nella frase. Il pacchetto NLTK ha la capacità di ottenere le parti del discorso per ogni parola in una frase come mostrato di seguito. Tuttavia, queste parti vocali ('NN', 'VB', 'PRP' ...) non corrispondono al formato che il synset assume come parametro.
text = word_tokenize("They refuse to permit us to obtain the refuse permit")
pos_tag(text)
>> [('They', 'PRP'), ('refuse', 'VBP'), ('to', 'TO'), ('permit', 'VB'), ('us', 'PRP'), ('to', 'TO'), ('obtain', 'VB'), ('the', 'DT'), ('refuse', 'NN'), ('permit', 'NN')]
IS è possibile per ottenere lo synset dati formattati da pos_tag() si traduce in NLTK? Con synset formattato intendo il formato come dog.n.01
Ho trovato questo esempio di 'lesk', ma il tuo codice sembra dare risultati migliori, mi chiedo perché questo sia (solo curioso): http://www.nltk.org/ howto/wsd.html –
Lesk non funziona molto bene. L'unica ragione per cui questo codice potrebbe funzionare meglio è perché ottiene la prima sincronizzazione. In wordnet i synset sono ordinati per frequenza. In altre parole, il primo synset è il più probabile se non teniamo conto del contesto. – bogs