Wort-Erkennung mit NLTK

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dante
User
Beiträge: 4
Registriert: Mittwoch 5. Mai 2010, 16:52

Hallo zusammen,

ich möchte feststellen, ob es sich beim Inhalt eines Strings um ein englisches Wort handelt. Nach einer Google-Suche bin ich dabei auf das NLTK gestoßen.

Nun kriege ich es leider nicht hin, NLTK richtig zur Worterkennung einzusetzen. Mir ist die Semantik des Wortes dabei nicht wichtig, ich möchte nur feststellen, ob es sich beim String-Inhalt um ein Wort handelt.

Irgendwelche Ideen? Es muss auch nicht zwingend NLTK sein, wenn es bessere Alternativen gibt.

Vielen Dank für eure Hilfe, und viele Grüße,

Dante
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Wie definierst du denn "Wort" ?

In welcher Sprache denn? Oder reicht es, wenn ausschließlich Zeichen Aa-Zz enthalten sind?
dante
User
Beiträge: 4
Registriert: Mittwoch 5. Mai 2010, 16:52

Hallo,

ich möchte feststellen, ob es sich bei dem String um ein englisches Wort handelt.

Beispiel:

text = "birthday"

# Diese Funktion suche ich...
if nltk.checkIfEnglishWord(text):
print text + " is a real word!"
else:
print text + " is NOT a real word!"

Die Funktion, welche ich benötige, ist dieses checkIfEnglishWord. Wenn es sich um ein englisches Wort handelt, dann soll sie true ausgeben, sonst false. Also für "birthday" true, für "brithday" false. Auch für alle Zahlwörter etc. true, soweit das möglich ist.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Schon mal nach einem frei zugänglichen Wörterbuch (= z.B. als Datenbank) gesucht? Letztlich läuft es ja auf einen trivialen Vergleich mit einem Katalog zulässiger Wörter hinaus. Ohne mcih jetzt näher mit nltk beschäftigt zu haben, denke ich doch, daß es schlicht overkill ist.
dante
User
Beiträge: 4
Registriert: Mittwoch 5. Mai 2010, 16:52

Hallo,

ich habe das ganze jetzt über WordNet und NLTK gelöst. Funktioniert wunderbar, allerdings bin ich überrascht, was alles zur englischen Sprache gehören soll.

Danke für die Hilfe!
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

dante hat geschrieben:Hallo,

ich habe das ganze jetzt über WordNet und NLTK gelöst. Funktioniert wunderbar, allerdings bin ich überrascht, was alles zur englischen Sprache gehören soll.

Danke für die Hilfe!
Wäre schön, wenn du für Leute mit ähnlichem Problem, die über diesen Thread stolpern, deinen Code(-Ausschnitt) zeigen könntest.
Größeren Code kannst du z.B. auf http://paste.pocoo.org auslagern.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
dante
User
Beiträge: 4
Registriert: Mittwoch 5. Mai 2010, 16:52

Wäre schön, wenn du für Leute mit ähnlichem Problem, die über diesen Thread stolpern, deinen Code(-Ausschnitt) zeigen könntest.
Ja klar, gerne.

Das folgende Progrämmchen erzeugt zufällige Buchstabenkombinationen aus den Buchstaben eines gegebenen Textes mit mindestens der über einen Parameter definierten Länge. Dann prüft es, ob es sich bei der erzeugten Buchstabenkombination um ein englisches Wort handelt.

Code: Alles auswählen

import sys
import random
from nltk.corpus import wordnet as wn

minWordSize =  int(sys.argv[1])

originalText = "EIMYMNELNSDAAI"

finished = False

rounds = 0
while not finished:
        rounds = rounds + 1
        text = originalText
        result = ""
        size = random.randrange(minWordSize,len(originalText))
        for i in range(size):
                index = random.randrange(len(text))
                char = text[index]
                text = text[:index] + text[index+1:]
                result = result + char

        if rounds%100 == 0:
                print rounds

        synsets = wn.synsets(result)
        print(result + " (" + str(len(synsets)) + ")\n")

        if len(synsets) > 0:
                print "Found a word!!\nWord is", result
                finished = True
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

IMHO ist es, wie oben auch schon vorgeschlagen, einfacher, gegen ein fertiges Wörterbuch zu testen, z.B. aspell oder hunspell.

Dazu drei schnell gegogglete Links:

http://code.activestate.com/recipes/117 ... -checking/
http://pypi.python.org/pypi/spell4py/0.6.9
http://pypi.python.org/pypi/hunspell/0.1

Der 1. Link ist IMHO eine recht einfacher und überschaubare Lösung...

Gruß, noisefloor
Antworten