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.
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.
BlackJack

Die Seite runterladen und die Sprichwörter heraus parsen und dann offline verwenden!?
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

und wie parse ich das????
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Progletic hat geschrieben:und wie parse ich das????
BeautifulSoup/html5lib. Nutz einfach die Forumssuche.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

Ich habe herausbekommen, das es kein Algorithmus in der Form gibt, die diese Aufgabe lösen könnte. So wie ich das vorgehabt habe.
Nun möchte ich Sortierverfahren wie bubblesort, heapsort und quicksort auf Buchstaben/Worte anwenden?
Es geht aber nicht, ich brauche hierbei eure Hilfe. Sitze seit 3Tagen an dieser Sache...komme nicht vorran.

Diese Funktionieren nur mit Zahlen.

def bubblesort(array, cmp = lambda x, y: x > y):
for i in range( len(array) ):
for j in range( len(array)-1-i ):
if cmp(array[j], array[j+1]):
( array[j], array[j+1] ) = ( array[j+1], array[j] )

--------------------------------------------------------------------------------
def makeheap(array):
for i in reverserange(len(array)/2):
fixheap(array, len(array), i)

def heapsort(array):
makeheap(array)
for i in reverserange(len(array)):
(array, array[0]) = (array[0], array)
fixheap(array, i, 0)
quicksortdef partition(array, start, end, cmp):
while start < end:
# at the top of this loop, our partition element is at 'start'
while start < end:
if cmp(array[start], array[end]):
(array[start], array[end]) = (array[end], array[start])
break
end = end - 1
# at the top of this loop, our partition element is at 'end'
while start < end:
if cmp(array[start], array[end]):
(array[start], array[end]) = (array[end], array[start])
break
start = start + 1
return start
-----------------------------------------------------------------------------------
def quicksort(array, cmp=lambda x, y: x > y, start=None, end=None):
"""The fastest exchange sort for most purposes."""
if start is None: start = 0
if end is None: end = len(array)
if start < end:
i = partition(array, start, end-1, cmp)
quicksort(array, cmp, start, i)
quicksort(array, cmp, i+1, end)


ich möchte diese Sortierverfahren in mein Programm einpflegen. Das Programm soll die eingebenen Wörter nach Anfangsbuchstaben sortieren und dann auch zeigen wie lang es mit dem jeweiligen sortierverfahren gedauert hat.

Dabei hab ich mir gedahct das die Ergebnisse mit Hilfe von Tkinter angezeigt werden sollen.

from Tkinter import *
import tkMessageBox
BlackJack

Das klingt jetzt verdammt nach Hausaufgaben. Wenn man etwas sortieren möchte, funktioniert die Sortiermethode von Listen besser als naive Eigenimplementierungen von "schlechteren" Algorithmen.

Fang bitte bei neuen Fragen ein neues Thema an, setz den Quelltext in Code-Tags und stell konkrete Fragen. Vielleicht ein Algorithmus nach dem anderen und nicht alle auf einmal.
Progletic
User
Beiträge: 13
Registriert: Freitag 2. Mai 2008, 11:26

Was für Hausaufgaben?

Meine Frage lautet, funktioniert sowas überhaupt? Oder nicht?
Also kann man Sortierverfahren auf Wörter anwenden oder nicht?
Mehrere Leute haben mir gesagt, dass es nicht funktionieren würde.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Progletic hat geschrieben:Was für Hausaufgaben?

Meine Frage lautet, funktioniert sowas überhaupt? Oder nicht?
Also kann man Sortierverfahren auf Wörter anwenden oder nicht?
Mehrere Leute haben mir gesagt, dass es nicht funktionieren würde.
Also zum alphabetischen Sortieren eigent sich eigentlich der Bucketsort. Die Frage ist halt, wie Du die Ordnung definierst, über der Du sortieren willst. Bei Buchstaben eben idR alphabetisch, bei Zahelnwerten eben wertebasiert.
BlackJack

@Progletic: Natürlich kann man diese Sortierverfahren auf Wörter anwenden. Aber warum sollte man das wollen, wo Listen doch schon eine `sort()`-Methode haben, die um Längen schneller sein dürfte als die anderen Verfahren in Python und naiv selbst implementiert!? So etwas macht man höchstens als Hausaufgabe.
Antworten