2011-03-28 7 views
5

Python: Clustering Search Engine ParolePython: Clustering Search Engine Parole

Ciao, ho un CSV, fino a 20.000 righe (ho avuto 100.000 + per diversi siti web), ogni riga contiene una parola chiave di riferimento (vale a dire una parola chiave che qualcuno ha digitato in un motore di ricerca per trovare il sito Web in questione) e un certo numero di visite.

Quello che sto cercando di fare è raggruppare queste parole chiave in gruppi di "significato simile" e creare una gerarchia dei cluster (strutturata in ordine di numero totale di ricerche per cluster).

Un esempio di cluster - "Abbigliamento Donna" - idealmente contenere le parole chiave in questo senso: abbigliamento donna, 1000 signore portano, 300 vestiti donne, 50 abbigliamento donna, 6 delle donne porta, 2

Potrei cercare di usare qualcosa come il Python Natural Language Toolkit: http://www.nltk.org/ e WordNet, ma, suppongo che per alcuni siti web le parole chiave di riferimento siano parole/frasi di cui WordNet non sa nulla. Ad esempio, se il sito Web è un sito di celebrità, è improbabile che WordNet sappia qualcosa su "Lady Gaga", situazione peggiore se il sito Web è un sito Web di notizie.

Quindi, suppongo anche che la soluzione debba essere quella che sembra utilizzare solo i dati di origine.

La mia query è molto simile a quella generata a How to cluster search engine keywords?, solo che sto cercando un punto da cui partire, ma usando Python anziché Java.

Mi sono anche chiesto se Google Predict e/o Google Refine potrebbero essere di qualche utilità.

In ogni caso, tutti i pensieri/suggerimenti più graditi,

Grazie, C

+0

Non può fare a meno di mettere in giro la mia [risposta a una domanda relativa] (http://stackoverflow.com/questions/4787984/i-want-to-get-related-searches-or-keywords). – 9000

risposta

0

Ebbene io sono un noob myself..But Penso che il modo per andare a questo proposito è NLTK e WordNet. (Come si già detto)

prima rimuovere tutti i numeri e caratteri speciali (in pratica ripulire le parole chiave)

Verificare la presenza di partite di base stringa/sottostringa corrisponde

Tag Tag POS, (prendi il tagger predefinito come nome) Se è diverso da un nome, usa wordnet per ottenere tutti i sinonimi omonimi ed eteronimi e abbinalo pure. Se la sua un sostantivo quindi utilizzare alcune tecniche di base come un lowest common substring match o lavenshtein distanza, B/K Albero ecc

È possibile nidificare i livelli secondo il vostro bisogno di falsi positivi/negativi

Per quanto riguarda l'alto livello clustering è possibile utilizzare un modulo di apprendimento automatico Python (come PyML, Reverend ecc.) e utilizzare dati già dati per addestrare ... come lo google's ngram data on LDC

+0

Ciao Rafi, grazie per aver risposto, non del tutto sicuro di aver capito appieno la tua risposta. Una domanda però: in che modo un tale approccio si occuperà di "nuove" parole e frasi non ancora in WordNet? – user679134

+0

Ehi @ utente679134..Per parole nuove o frasi puoi usare le tecniche di base come una corrispondenza di sottostringa comune più bassa, distanza di lavenshtein, albero B/K, ecc .... Penso che dovrebbe essere abbastanza buono .. – Rafi