Estrazione un insieme di parole con Python / NLTK, poi paragonandolo a un dizionario inglese di serie

StackOverflow https://stackoverflow.com/questions/3428131

  •  26-09-2019
  •  | 
  •  

Domanda

ho:

from __future__ import division
import nltk, re, pprint
f = open('/home/a/Desktop/Projects/FinnegansWake/JamesJoyce-FinnegansWake.txt')
raw = f.read()
tokens = nltk.wordpunct_tokenize(raw)
text = nltk.Text(tokens)
words = [w.lower() for w in text]

f2 = open('/home/a/Desktop/Projects/FinnegansWake/catted-several-long-Russian-novels-and-the-NYT.txt')
englishraw = f2.read()
englishtokens = nltk.wordpunct_tokenize(englishraw)
englishtext = nltk.Text(englishtokens)
englishwords = [w.lower() for w in englishwords]

, che è retta dal manuale NLTK. Quello che voglio fare adesso è quello di confrontare vocab ad un elenco esaustivo di parole inglesi, come l'Oxford English Dictionary, ed estrarre la differenza - l'insieme di Finnegans Wake parole che non ha, e probabilmente non lo sarà mai, essere in Oxford English Dictionary. Io sono molto più di una persona verbale di una persona per la matematica-oriented, quindi non ho capito come farlo ancora, e il manuale va in modo troppo nei dettagli su cose che in realtà non voglio fare. Sto assumendo che sia solo uno o due più righe di codice, però.

È stato utile?

Soluzione

Se il tuo inglese è infatti un insieme (si spera di parole cambiate in maiuscolo),

set(vocab) - english_dictionary

ti dà l'insieme di parole che sono nel set vocab ma non nel english_dictionary uno. (E 'un peccato che si è attivata vocab in una lista che sorted, in quanto è necessario per trasformarlo di nuovo in un insieme per eseguire operazioni come questa differenza set!).

Se il tuo Inglese è in un formato diverso, non proprio un insieme o non composto solo di parole cambiate in maiuscolo, si dovrà dirci cosa che formato è per noi essere in grado di aiutare -!)

Modifica : dato il PO di modifica mostra che sia words (ciò che è stato in precedenza chiamato vocab) e englishwords (quello che in precedenza chiamato english_dictionary) sono negli elenchi fatto di parole cambiate in maiuscolo, quindi

newwords = set(words) - set(englishwords)

o

newwords = set(words).difference(englishwords)

sono due modi per esprimere "l'insieme di parole che non sono englishwords". Il primo è un po 'più conciso, quest'ultimo forse un po' più leggibile (in quanto utilizza la parola "differenza" in modo esplicito, invece di un segno meno) e forse un po 'più efficiente (dal momento che non trasforma in modo esplicito la lista englishwords in un set - però, se la velocità è cruciale questo deve essere controllato mediante misurazione, poiché "interno" difference deve ancora fare una sorta di "trasformazione-to-set" -come funzionamento)

.

Se siete desiderosi di avere una lista come risultato, invece di un insieme, sorted(newwords) vi darà un elenco in ordine alfabetico (list(newwords) darebbe un elenco un po 'più veloce, ma in modo del tutto arbitrario, e si sospetta' d piuttosto aspettare una piccola quantità extra di tempo e ottenere, in cambio, un risultato ben alfabetizzato; -).

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