Ich möchte in einem Python-Programm einchecken, ob ein Wort im englischen Wörterbuch enthalten ist.
Ich glaube, dass die nltk wordnet-Schnittstelle der richtige Weg ist, aber ich habe keine Ahnung, wie ich sie für eine so einfache Aufgabe verwenden soll.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
In Zukunft möchte ich vielleicht überprüfen, ob die Singularform eines Wortes im Wörterbuch enthalten ist (z. B. Eigenschaften -> Eigenschaft -> englisches Wort). Wie würde ich das erreichen?
/usr/share/dict/
und/var/lib/dict
kann auf * nix-Setups verwiesen werden.Es funktioniert nicht gut mit WordNet, da WordNet nicht alle englischen Wörter enthält. Eine andere Möglichkeit, die auf NLTK ohne Verzauberung basiert, ist NLTKs Wortkorpus
quelle
set(words.words())
Verwenden von NLTK :
Sie sollten sich auf diesen Artikel beziehen, wenn Sie Probleme bei der Installation von Wordnet haben oder andere Ansätze ausprobieren möchten.
quelle
Verwenden eines Sets zum Speichern der Wortliste, da das Nachschlagen schneller ist:
Um den zweiten Teil der Frage zu beantworten, wären die Pluralformen bereits in einer guten Wortliste enthalten, aber wenn Sie diese aus irgendeinem Grund ausdrücklich von der Liste ausschließen möchten, könnten Sie tatsächlich eine Funktion schreiben, um damit umzugehen. Aber englische Pluralisierungsregeln sind so schwierig, dass ich zunächst nur die Pluralformen in die Wortliste aufnehmen würde.
Wo man englische Wortlisten findet, habe ich einige gefunden, indem ich einfach "englische Wortliste" gegoogelt habe. Hier ist eine: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Sie können für britisches oder amerikanisches Englisch googeln, wenn Sie speziell einen dieser Dialekte möchten.
quelle
english_words
einset
statt eines machenlist
,is_english_word
läuft es viel schneller..xreadlines()
und einfach wiederholenword_file
.wamerican
undwbritish
bieten amerikanische und britische englische Wortlisten als/usr/share/dict/*-english
. Die Paketinformationen geben wordlist.sourceforge.net als Referenz an.Für eine schnellere NLTK-basierte Lösung können Sie die Wortmenge hashen, um eine lineare Suche zu vermeiden.
quelle
Ich finde, dass es 3 paketbasierte Lösungen gibt, um das Problem zu lösen. Sie sind Pyenchant, Wordnet und Corpus (selbst definiert oder von ntlk). Pyenchant konnte mit py3 nicht einfach in win64 installiert werden . Wordnet funktioniert nicht sehr gut, weil sein Korpus nicht vollständig ist. Also wähle ich für mich die von @Sadik beantwortete Lösung und benutze 'set (words.words ())', um zu beschleunigen.
Zuerst:
Dann:
quelle
Mit pyEnchant.checker SpellChecker:
quelle
Für einen Semantic-Web-Ansatz können Sie eine Sparql-Abfrage für WordNet im RDF-Format ausführen . Verwenden Sie einfach das Modul urllib, um eine GET-Anforderung auszugeben und Ergebnisse im JSON-Format zurückzugeben. Analysieren Sie sie mit dem Python-Modul 'json'. Wenn es kein englisches Wort ist, erhalten Sie keine Ergebnisse.
Als weitere Idee könnten Sie die API von Wiktionary abfragen .
quelle
Für alle Linux / Unix-Benutzer
Wenn Ihr Betriebssystem den Linux-Kernel verwendet, gibt es eine einfache Möglichkeit, alle Wörter aus dem Englisch / Amerikanischen Wörterbuch abzurufen. In dem Verzeichnis haben
/usr/share/dict
Sie einewords
Datei. Es gibt auch eine spezifischereamerican-english
undbritish-english
Dateien. Diese enthalten alle Wörter in dieser bestimmten Sprache. Sie können in jeder Programmiersprache darauf zugreifen, weshalb ich dachte, Sie möchten vielleicht etwas darüber wissen.Für Python-spezifische Benutzer sollte der folgende Python-Code die Listenwörter so zuweisen, dass sie den Wert jedes einzelnen Wortes haben:
Hoffe das hilft!!!
quelle