Seite 1 von 1
Wort-Erkennung mit NLTK
Verfasst: Mittwoch 5. Mai 2010, 17:04
von dante
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
Verfasst: Mittwoch 5. Mai 2010, 18:14
von Pekh
Wie definierst du denn "Wort" ?
In welcher Sprache denn? Oder reicht es, wenn ausschließlich Zeichen Aa-Zz enthalten sind?
Verfasst: Donnerstag 6. Mai 2010, 08:10
von dante
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.
Verfasst: Donnerstag 6. Mai 2010, 08:23
von Pekh
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.
Verfasst: Donnerstag 6. Mai 2010, 10:46
von dante
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!
Verfasst: Donnerstag 6. Mai 2010, 10:50
von ms4py
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.
Verfasst: Donnerstag 6. Mai 2010, 11:26
von dante
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
Verfasst: Donnerstag 6. Mai 2010, 11:35
von noisefloor
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