Sprache programmieren

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.
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

Ich habe ein riesieges Programm geschrieben um die Deutsche Grammatik zu erkennen. Es findet die Wortarten in einem eingegeben Text. z.b Personalpronomina, Präpositionen usw.... jedoch, wie gesagt, ist das Programm riesig, weil ich alles mit schleifen bearbeitet habe, kennt ihr ein Algorithmus für Deutsche- Grammatik. ??? Und wenn ja wie implementiere ich diese in mein Programm? Vielen Dank 8)
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Wenn du deinen Quellcode zeigst, gibt es bestimmt praktikable Vorschläge.
So ist es bis jezt etwas ... ungenau.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Progletic hat geschrieben:kennt ihr ein Algorithmus für Deutsche- Grammatik?
ja
Und wenn ja wie implementiere ich diese in mein Programm?
viel, viel fleiss.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Progletic hat geschrieben:Ich habe ein riesieges Programm geschrieben um die Deutsche Grammatik zu erkennen[...]kennt ihr ein Algorithmus für Deutsche- Grammatik. ??? Und wenn ja wie implementiere ich diese in mein Programm? Vielen Dank 8)
Wtf? Du hast doch selber ein Programm dafür geschrieben oder verstehe ich dass jetzt falsch?
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

wie kann ich es am besten euch zeigen?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Progletic hat geschrieben:wie kann ich es am besten euch zeigen?
Am besten mit einem Pastebin, wie z.B. LodgeIt!
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

http://paste.pocoo.org/show/72787/

Der algorithmische Schwierigkeitsgrad meines Ansatzes ist zu niedrig.

Wie kann ich es besser machen? Habt ihr eine Idee? :roll: [/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ja, definiere Dir eine Grammatik und erstelle Dir einen Parser damit. Bei den Stichwörtern Grammatik und Parsergenerator solltest Du die entscheidenden Hinweise hier im Board finden.

Wer sagt denn, dass der Ansatz "zu niedrig" sei? (Und nach welchem Kriterium wird hier gemessen?)

Ok, das alles ist recht unflexibel und die Prüfung auf konkrete Wörter usw. könnte man auch wesentlich flexibler machen (Stichwort Daten in Datei auslagern, nicht im Quellcode definieren).

Allerdings ist das Parsen einer natürlichen Sprache nicht gerade trivial!

Gibt es dazu eine konkrete Aufgabenstellung?
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Bitte entschuldige meinen Vorangegangenen Zynismus, du meinst es ernst.

Ich bin mir nicht sicher, aber ich meine, dass die deutsche Sprache (und die meisten Menschensprachen) zu einer Kategorie gehören, die nicht wirklich zu Parsen ist, das klassische Beispiel: "Der Jäger sieht den Hasen mit dem größen Fernglas" "Der Jäger sieht den Hasen mit dem weichen Fell".
Wem gehört das Fernglas, wem gehört das Fell?
Sprachlich ungewohnt, aber afaik nicht falsch: "Das Futter frisst die Katze". Wer frisst hier wen?
Hier ist ohne Kontext nicht klar, wer Objekt und wer Subjekt ist.

Was ist das Ziel, was du erreichen willst, vielleicht kann man da vereinfachen?
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

m Moment ist meine Lösung im Grunde genommen nichts
anderes als eine große Tabelle, in der für jeden Fall die jeweilige
Lösung nachgeschlagen wird.
Genau dessen algorithmische Schwierigkeitsgrad ist zu niedrig.

Bei meiner Lösung werden die einzelnen Wortarten, gefunden, weil ich diese aufgelistet habe. Es muss doch ein Weg geben, wie man diese über eine andere Abfrage wie z.b. über die Grammatik sortieren lassen kann.
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

Es sind im Prinzip einige Listen, eine Menge immer gleicher if-Abfragen, doch kein interessanter Algorithmus- wie kann ich das ändern...???
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Ich möchte mal anmerken, dass das Programm nicht `riesig` ist.

Wofür brauchst du das denn überhaupt?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Progletic hat geschrieben:Es sind im Prinzip einige Listen, eine Menge immer gleicher if-Abfragen, doch kein interessanter Algorithmus- wie kann ich das ändern...???
Schau dir mal eine Grammatik an und nimm dir eine einfache Regel und eine handvoll Beispielsätze. Entwickle einen Algorithmus diese Regel immer richtig anwenden zu können. Das ganze musst du nur noch für alle anderen Regeln auch hinbekommen ;)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das ist ein ganz nettes Projekt, allerdings bin ich da kepplas Meinung, dass das alles andere als trivial und ich denke sogar, dass es im Fall der deutschen Sprache sogar unmöglich ist.
Erst recht mit einem Algorithmus.

Du hast eine Datenbank erstellt mit der du Wörter versuchst zu klassifizieren. IMHO ist das die einzige Möglichkeit, allerdings entwickeln sich Sprachen weiter und das dezentral ;) Man denke nur an die ganzen neuen Lehnwörter aus dem Englischen ...

Natürliche Sprachen sind schlichtweg ungeeignet, sie maschinell zu verarbeitet, darum wurden ja auch Programmiersprachen erfunden ;). Sie sind mehrdeutig und man muss deshalb die Bedeutung kennen, um Wörter bzw Satzteile grammatikalisch zu zu ordnen. Um noch nen Beispiel zu nennen: `Das (der, die)' ist sowohl Artikel als auch Pronomen.


Aber wenn du daran wirklich interessiert bist, solltest dich mit Germanisten/Linguisten zusammentun. Oder es mit ner anderen Sprache versuchen. Kunstsprachen sind da eher für geeignet, manche sogar auf Eindeutigkeit konzipiert ... aber ich bin da kein Profi ;)
Benutzeravatar
sehbaer
User
Beiträge: 39
Registriert: Sonntag 30. März 2008, 17:26
Wohnort: Kölle

vielleicht kann ja das Natural Language Tollkit weiterhelfen:

http://nltk.org/index.php/Main_Page
the Natural Language Toolkit — is a suite of open source Python modules, data and documentation for research and development in natural language processing. NLTK contains Code supporting dozens of NLP tasks, along with 40 popular Corpora and extensive Documentation including a 375-page online Book. Distributions for Windows, Mac OSX and Linux are available.
Oder MontyLingua:

http://web.media.mit.edu/~hugo/montylingua/
MontyLingua is a free*, commonsense-enriched, end-to-end natural language understander for English. Feed raw English text into MontyLingua, and the output will be a semantic interpretation of that text. Perfect for information retrieval and extraction, request processing, and question answering. From English sentences, it extracts subject/verb/object tuples, extracts adjectives, noun phrases and verb phrases, and extracts people's names, places, events, dates and times, and other semantic information. MontyLingua makes traditionally difficult language processing tasks trivial!
Zuletzt geändert von sehbaer am Mittwoch 18. Juni 2008, 18:27, insgesamt 1-mal geändert.
...es sind ganz bestimmt mehr Nullen als Einsen.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

DasIch hat geschrieben:
Progletic hat geschrieben:Es sind im Prinzip einige Listen, eine Menge immer gleicher if-Abfragen, doch kein interessanter Algorithmus- wie kann ich das ändern...???
Schau dir mal eine Grammatik an und nimm dir eine einfache Regel und eine handvoll Beispielsätze. Entwickle einen Algorithmus diese Regel immer richtig anwenden zu können. Das ganze musst du nur noch für alle anderen Regeln auch hinbekommen ;)
Okay, dann die Menschheit noch mit einem Durchbruch im Gebiet KI weiterbringen, ich erwarte das Ergebnis dann in einer Woche :)
Mal im Ernst, die einfachen Regeln kann man sicher implementieren. Ich weiß zwar nicht genau, was das Programm alles können soll, außer dass es wohl Grammatik erkennen soll, worunter ich Wortarten, Satzglieder, Zeit, usw verstehe, aber ich halte es für unmöglich, soetwas "mal so eben" zu machen.
Ich finde dich schön.
Ich finde dich <adjektiv> oder ... ich finde dich <adverb>?
Imho kann ein Computer nicht ohne weiteres erkennen, ob hier "schön finden" im Sinne von "etwas finden" gemeint ist, oder eben die normale Bedeutung, die jeder normale Mensch hier erkennen würde.
Und das war nur das allererste Beispiel, das mir eingefallen ist, weshalb es auch nicht so gut ist :)
Klar, kann man einfache Regeln implementieren und der Computer kann dir, sofern du gewisse Regeln einhältst sagen, was für Wortarten usw das sind.
Aber eben ziemlich beschränkt.
Afaik gibt es viel professionellere wissenschaftliche Forschungen an solchen Dingen, als so eine kleine Rumspielerei, wie es hier offensichtlich der Fall ist. Das hat eben auch viel mit KI (da der Computer im Kontext "denken" muss) zu tun.
Aber was ich hier im Quelltext gesehen habe, sind nichtmal richtige Regeln, zum Beispiel das hier:

Code: Alles auswählen

elif word in ["dem", "des", "den"]:
                                if(not self.pOSDic.has_key(word)):
                                        self.pOSDic[word] = ["unbest.Artikel"]
Sind das unbestimmte Artikel?
Nein, das sind bestimme Artikel.
Aber mal abgesehen davon, ist "das" auch nicht immer ein bestimmter Artikel, sondern auch mal ein Relativpronomen usw.
Die Regeln sind viel zu primitiv um irgendetwas erkennen zu können.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dazu 2 Wikipedia-Links, damit der OP eine Ahnung davon bekommt, auf was er sich einlässt.
Karl hat geschrieben:Ich finde dich schön.
Ich finde dich <adjektiv> oder ... ich finde dich <adverb>?
Imho kann ein Computer nicht ohne weiteres erkennen, ob hier "schön finden" im Sinne von "etwas finden" gemeint ist, oder eben die normale Bedeutung, die jeder normale Mensch hier erkennen würde.
http://de.wikipedia.org/wiki/Philosophi ... rale_Werke
Karl hat geschrieben:Aber was ich hier im Quelltext gesehen habe, sind nichtmal richtige Regeln, zum Beispiel das hier:

Code: Alles auswählen

elif word in ["dem", "des", "den"]:
                                if(not self.pOSDic.has_key(word)):
                                        self.pOSDic[word] = ["unbest.Artikel"]
Sind das unbestimmte Artikel?
Nein, das sind bestimme Artikel.
Aber mal abgesehen davon, ist "das" auch nicht immer ein bestimmter Artikel, sondern auch mal ein Relativpronomen usw.
Die Regeln sind viel zu primitiv um irgendetwas erkennen zu können.
http://de.wikipedia.org/wiki/Prädikat_(Logik)

Ich "durfte" mir den Kram das ganze letzte Semester über reinziehen und habe es hassen gelernt.
Zuletzt geändert von snafu am Mittwoch 18. Juni 2008, 20:47, insgesamt 2-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Auch das könnte nützlich sein: http://de.wikipedia.org/wiki/Sprechaktt ... von_Austin (also ab da wirds interessant).
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

ich meine sowas wie das Viterbi- Algorithmus anzuwenden.
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

Mal eine andere frage, wie könnte ich hier den teil mit Sprichwörtererkennung erweitern? Wie kann ich z.b statt jedes Sprichwort einzutragen- alle Sprichwörter auf dieser Seite http://de.wikiquote.org/wiki/Deutsche_Sprichw%C3%B6rter
einbinden. Nicht online- Ich möchte das dieses Programm offline funktioniert.
Antworten