Domanda

Vorrei calcolare la frequenza di parole funzionali in Python / NLTK. Vedo due modi per andare su di esso:

  • Usa part-of-Speech tagger e riassumere il tag POS che costituiscono le parole di funzione
  • Creare un elenco di parole funzionali ed eseguire un semplice sguardo fino

La cattura nel primo caso è che, miei dati è rumoroso e non so (di sicuro) che i tag POS costituiscono come le parole di funzione. La cattura nel secondo caso è che non ho una lista e dato che il mio dati è rumoroso la ricerca non sarà accurato.

preferirei il primo al secondo o di qualsiasi altro esempio che mi avrebbe gettato risultati più accurati.

È stato utile?

Soluzione

Ho appena utilizzato il LIWC 2007 inglese (ho pagato per la stessa) ed eseguito un semplice ricerca fin d'ora. Tutte le altre risposte sono i benvenuti.

devo dire che sono un po 'sorpreso dalla impulsività di un paio di risposte qui. Dal momento che, qualcuno ha chiesto per il codice. Ecco quello che ho fatto:

''' Returns frequency of function words '''
def get_func_word_freq(words,funct_words):
    fdist = nltk.FreqDist([funct_word for funct_word in funct_words if funct_word in words]) 
    funct_freq = {}    
    for key,value in fdist.iteritems():
        funct_freq[key] = value
    return funct_freq

''' Read LIWC 2007 English dictionary and extract function words '''
def load_liwc_funct():
    funct_words = set()
    data_file = open(liwc_dict_file, 'rb')
    lines = data_file.readlines()
    for line in lines:
        row = line.rstrip().split("\t")
        if '1' in row:
            if row[0][-1:] == '*' :
                funct_words.add(row[0][:-1])
            else :
                funct_words.add(row[0])
    return list(funct_words)

Chiunque abbia fatto un po 'di codice in Python vi direbbe che l'esecuzione di uno sguardo verso l'alto o l'estrazione di parole con specifici tag POS non è scienza missilistica. Per aggiungere, tag (sulla questione) della PNL (Natural Language Processing) e NLTK (Natural Language ToolKit) dovrebbe essere sufficiente l'indicazione per l'astuto mentalità.

In ogni modo, ho capito e sentimenti rispetto delle persone che rispondono qui poiché la maggior parte di esso è libero, ma credo che il minimo che possiamo fare è mostrare un po 'di rispetto ai manifesti domanda. Come è giustamente sottolineato aiuto ricevuto quando aiutate gli altri, allo stesso modo il rispetto ricevuto quando gli altri il proprio rispetto.

Altri suggerimenti

Non si sa quale approccio funziona finché non si tenta. Vi consiglio il primo approccio però; L'ho usato con successo su dati molto rumorosi, dove i "frasi" dove le intestazioni e-mail soggetti (brevi testi, frasi non corrette) e persino il linguaggio era sconosciuto (circa l'85% inglese, l'algoritmo Cavnar & Trenkle ruppe rapidamente) . Successo è stata definita come un aumento delle prestazioni di recupero in un motore di ricerca; se si desidera solo per contare le frequenze, il problema potrebbe essere più facile.

Assicurarsi di utilizzare un tagger POS che prende in considerazione il contesto (la maggior parte lo fanno). Controllare l'elenco delle parole e frequenze si ottiene e magari eliminare alcune parole che non si considerano le parole di funzione, o anche filtrare le parole che sono troppo lunghi; che eliminerà i falsi positivi.

(Disclaimer:.. Stavo usando il tagger Stanford POS, non NLTK, così YMMV ho usato uno dei modelli predefiniti per l'inglese, allenato, credo, sulla Penn Treebank)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top