Extrahieren einer Reihe von Wörtern mit dem Python / NLTK, vergleicht es dann zu einem Standard-Englisch-Wörterbuch

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

  •  26-09-2019
  •  | 
  •  

Frage

ich habe:

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]

, die direkt aus dem NLTK Handbuch ist. Was ich als nächstes tun möchte, ist vocab zu einer erschöpfenden Reihe von englischen Wörtern zu vergleichen, wie das OED, und extrahieren Sie den Unterschied - der Satz von Finnegans Wake Worte, die nicht haben, und wahrscheinlich wird es nie, in der OED sein. Ich bin viel mehr eine verbale Person als ein Mathe-orientierte Person, so dass ich nicht herausgefunden haben, wie das noch zu tun, und das Handbuch geht in viel zu viel Detail über Sachen, die ich eigentlich gar nicht tun wollen. Ich gehe davon aus, es ist nur noch ein oder zwei Zeilen Code, though.

War es hilfreich?

Lösung

Wenn Sie Ihr Englisch-Wörterbuch ist in der Tat eine Menge (hoffentlich von kleingeschriebenen Worten),

set(vocab) - english_dictionary

gibt Ihnen die Menge der Worte, die in dem vocab Satz sind aber nicht in der english_dictionary ein. (Es ist schade, dass Sie vocab in eine Liste von dieser sorted gedreht, da Sie brauchen, um sich wieder in einen Satz Operationen wie dieser Satz Unterschied auszuführen!).

Wenn Sie Ihr Englisch-Wörterbuch in irgendeinem anderen Format ist, nicht wirklich ein Satz oder nicht nur klein geschrieben Worten besteht, müssen Sie uns sagen, was das Format ist für uns, um Hilfe zu können! -)

Bearbeiten : angesichts der Bearbeitung zeigt die OP, dass beide words (was vorher hieß vocab) und englishwords (was ich vorher english_dictionary genannt) sind in der Tat Listen von Kleinbuchstaben Worte, dann

newwords = set(words) - set(englishwords)

oder

newwords = set(words).difference(englishwords)

Sie haben zwei Möglichkeiten „um die Reihe von Wörtern, die nicht englishwords sind“ zum Ausdruck bringen. Ersteres ist etwas prägnanter, letzteres vielleicht ein bisschen besser lesbar (da er benutzt das Wort „Differenz“ explizit statt eines Minuszeichen) und vielleicht ein bisschen effizienter (da es nicht explizit die Liste englishwords in einer Transformation set - obwohl, wenn die Geschwindigkeit entscheidend ist, diese Bedürfnisse durch Messung überprüft werden, da „intern“ difference muss noch eine Art „Transformation-to-Set“ -ähnlichen Betrieb tun)

.

Wenn Sie daran interessiert, eine Liste als Ergebnis haben anstelle eines Satzes, sorted(newwords) Sie geben eine alphabetisch sortierte Liste (list(newwords) würde Ihnen eine Liste ein bisschen schneller, aber in völlig beliebiger Reihenfolge, und ich vermute, Sie‘ d eher eine kleine zusätzliche Menge an Zeit warten und bekommt im Gegenzug ein schön alphabetisierte Ergebnis; -).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top