Die Grenzen der Programmierung ?

Hi,
ich hab mir heute mal über unsere schöne Sprache Gedanken gemacht und bin darauf gekommen, dass diese ziemlich unlogisch ist :D

Darum mal eine Aufgabe die für einen Menschen eigentlich kein Problem darstellt...
doch wie vermittelt man das einem PC ?

Denkt ihr es ist unmöglich ?
Vorschläge - Ideen ???


Schreibe ein Programm, dass dir zu einem eingegebenen Wort den richtigen Artikel eingibt:

Beispiel:
Eingabe: Haus
Ausgabe: das Haus
 
Tja sowas ginge nur mit ner Wortliste... Und Sprache unterliegt nicht der Logik. Wir lönnten auch genau so gut "Der Haus" sagen, solangs alle tun ists richtig. Das soll heißen man kann nicht vom Noomen her erkenne,n was denn der Artikel davon ist, natürlich ohne Wortliste.
 
Genau ;)

Und wenn man den ganzen Duden als Wortliste hinterlegen würde, hätte man immer noch genügend Fälle die das Programm nicht checken würde.. z.B. Hackerboard ;)
 
Natürlich ist es nicht leicht sowas zu machen,
und damit beschäftigt sich die Menschheit wohl auch schon eine ganze Zeit,
aber man müsste ja "bloß" ein Programm schreiben, das wie ein Mensch lernt.
So etwas wie den richtigen Artikel vor ein Wort setzen machen wir schließlich
auch als würden wir es aus einem Wörterbuch nehmen.
Kann man sich irgendwie gar nicht vorstellen dass das so schwer sein soll.
Aber wird ja einen Grund haben das es das noch nicht gibt^^
 
Wenn wir das schaffen würden, was durchaus irgendwann einmal der fall sein kann/wird, dann können wir die Terminator Reihe live erleben, denn wenn die Maschine eigenständig denken/handeln kann haben wir wohl ein problem.


grüße
Sven
 
Wie schon geschrieben wurde, ist Sprache nicht logisch und statisch sondern vom Gebrauch festgelegt.
Daher nützt auch Intelligenz nichts, um eine Sprache richtig zu sprechen.

Die einzige Möglichkeit, die ich atm sehe, für eine Programm Sprache dauerhaft richtig zu sprechen/bilden, wäre die von den Menschen benutzte Sprache zu analysieren.
Theoretisch wäre es möglich, einen Robot laufen zu lassen, der die Sprache auf Webseiten analysiert und daraus zusammen mit vorher einprogrammierten logischen Zusammenhängen die Sprache bildet. Wenn er 1.000.000 mal "das" und nur 100 mal "die" vor "Haus" findet, kann er in einer DB festlegen, dass "das" der entsprechende Artikel ist.
Mit einem ähnlichen Mix aus vorher einprogrammierten statischen Regeln und den gefundenen Daten eines laufenden Robots müssten evtl. theoretisch auch die Festlegung von komplizierten Dingen wie Fällen möglich sein.
Vielleicht ist ein bisschen KI dafür nötig, das liegt aber alles durchaus im Bereich des heute möglichen.

Gibts sowas schon?
Bzw. weiß jemand wie das bei heutigen Übersetzungsengines läuft? Werden da alle Einzelheiten statisch einprogrammiert (das würde erklären warum die Ergebnisse so... passabel sind ;)) ?

Gruß
 
@Sunstepper
keine dumme Theorie...

was denkst du wie groß die DB wird ?



Übersetzungssoftware, Spracherkennung, Rechtschreibprüfung etc. sind Sachen die in der Zukunft noch vielen Leute Kopfzerbrechen bereiten werden.. denn gerade in diesem Bereich stehen wir noch ganz am Anfang ;)
 
Ich bin leider kein Sprachforscher - das wäre hier sicher sehr hilfreich. :)
Die DB ist dabei das kleinste Problem; mit heutigen DB-Systemen wäre das sicherlich zu bewältigen.
Die Technik ist dabei allgemein keine Hürde. Ich bin überzeugt, dass man dafür nur Leute braucht, die das nötige Fachwissen haben/sich aneignen können, sich hinsetzen und das Ding durchziehen.

Gruß
 
Ich denke eher dass der entscheidende Schritt fehlt...

Es ist ja genauso wie mit der Kryptologie... je höher der Aufwand desto sicherer.. was endgültiges gibts halt nicht.

Auf unser "Projekt" übertragen

Je größer die Datenbank desto weniger Fehler macht das Programm ;)
Aber eine endgültige und vorallem komplett fehlerfreie Lösung wird man zumindest mit dem was ich über Programmiersprachen weiß mit dem aktuellen Stand nicht herbeiführen können.
 
Ich weiss nicht inwiefern es sprachtechnisch korrekt wäre, aber du könntest probieren, von möglichst vielen Nomen aller 3 genera herauszukriegen, welche Merkmale bei den jeweiligen genera besonders markant sind.
Über die Wortliste heraus, könntest du mit diesem Prinzip eine Heuristik aufbauen, die ,aufgrund der Merkmale, dir sagen kann mit wieviel prozentiger Wahrscheinlichkeit ein genus zutrifft.
Darüber hinaus sollte das Programm noch eine Lernfunktion bekommen. Du kannst diesem dann die Artikel zu unbekannten Worten beibringen, solange du weisst wie sie lauten ;)
 
Hab mal was kleines geschrieben und bin selbst überrascht das es funktioniert hoffe, dass fällt nicht unter schummeln immerhin benutze ich die wohl größte DB, das Internet mit Hilfe von Google :) .

Das Prinzip ist eigentlich simpel, der String "Das Haus" wird im Normalfall öfter durch Google gefunden werden als "Die Haus" .... Demenstprechend schlussfolgert mein Programm richtig das Das Haus stimmt. Der Rest ist simple RegEx und der Grund warum ich Perl so mag :)

Sunstepper hat mich übrigens mit seinem Post auf die Idee gebracht ;)

Code:
#!/usr/bin/perl
#Der/Die/Das 
#written by Phuket for Habo
#Sehr haesslicher Code aber es funzt....

use IO::Socket::INET ;
$search=$ARGV[0];
$url[0]="http://www.google.de/search?hl=de&q=%22Das+$search%22" ;
$url[1]="http://www.google.de/search?hl=de&q=%22Der+$search%22" ;
$url[2]="http://www.google.de/search?hl=de&q=%22Die+$search%22" ;

foreach $url (@url)
{
$socket=IO::Socket::INET->new( PeerAddr => 'www.google.de', PeerPort => 80, Photo => tcp) or die ;
print $socket "GET $url HTTP/1.1\n";
print $socket "Host: google.de\n";
print $socket "Accept: */*\n";
print $socket "Referer: www.google.de\n";
print $socket "User-Agent: honko\n";
print $socket "Pragma: no-cache\n";
print $socket "Cache-Control: no-cache\n";
print $socket "Connection: close\n\n"; 

@answer = <$socket> ;
@das = @answer if $url =~ /Das/;
@die = @answer if $url =~ /Die/;
@der = @answer if $url =~ /Der/;
}

foreach (@das)
{if ($_=~/Ergebnisse <b>1<\/b> - <b>10<\/b> von ungefähr <b>(.*?)<\/b>/){$das=$1;$das=~s/\.//g}}

foreach (@der)
{if ($_=~/Ergebnisse <b>1<\/b> - <b>10<\/b> von ungefähr <b>(.*?)<\/b>/){$der=$1;$der=~s/\.//g}}

foreach (@die)
{if ($_=~/Ergebnisse <b>1<\/b> - <b>10<\/b> von ungefähr <b>(.*?)<\/b>/){$die=$1;$die=~s/\.//g}}

if ($der>$das && $der>$die) {print "Der $ARGV[0]\n";}
if ($das>$der && $das>$die) {print "Das $ARGV[0]\n";} 
if ($die>$der && $das<$die) {print "Die $ARGV[0]\n";} 
if ($die==$der || $das==$die || $der==$das) {print "Keine Ahnung :/\n";}


EDIT: Fehlerfrei ist das ganze sicherlich nicht aber im Normalfall führt es zur richtigen Lösung. Auch Wörter wie Hackerboard werden richtig erkannt .....

EDIT2: "Die Japaner" anstatt "Der Japaner" doofe Mehrzahl
....
 
cool ;)

könntest du mir bitte sagen, mit was man das kompilieren kann...

oder besser ;)

es für uns kompilieren ?

Allgemein ist es aber wieder nur eine "Annäherungsmethode", wenn auch eine sehr gute ;)

Aber irgendwie schon unglaublich... da können wir zum Mondfliegen... aber kein Programm schreiben dessen Aufgabe man in einem Satz formulieren kann ;)

Gerade in der IT darf man niemals nie sagen... aber ob sowas irgendwann tatsächlich klappen wird ? ;)
 
Naja das "simple" analysieren von Wörtern wäre ja noch nicht mal so schwer, nur sehe ich die Probleme a) in der richtigen Gramatik b) im Statzbau und c) in den Redensarten, vondenen es ja massig im Deutschen gibt....
Wenn man ein paar Leute finden würde, die genug Zeit und Skill haben, dazu noch der richtige Großrechner, dann könnte man schon mal anfangen mit der Analyse per google. ;) Also dem aufbauen eines Programms das per Internet Sprache analysiert.
 
könntest du mir bitte sagen, mit was man das kompilieren kann...

oder besser Augenzwinkern

es für uns kompilieren ?

Wie gesagt ist eine interpretierte Sprache unter Linux sollte der Perl Interpreter Standartmäßig installiert sein unter Win ActivePerl installieren.
Dann einfach mit perl [DATEINAME] [WORT] Starten.....


Mfg Phuket :)
 
Ich frage mich wozu man das über google etc analysieren sollte?

Um vom Themenstarter auszugehen so ist die Aufgabe die Strukturen zu erkennen.

Grammatik ist klar definiert, für den Moment zumindest, wenn man mal von den Reformen absieht.

Eine Analyse über $google könnte höchstens genutzt werden um dann differenzen zwischen der klar definierten Struktur und dem was tatsächlich geschrieben wird, herrauszustellen.

Dazu ein paar Gedanken, die mir helfen würden Strukturen nachzuahmen.

- Jedes Wort kann Attribute haben.
- Wörter nehmen Attribute, abhängig vom Kontext an.
- Der Kontext ist der Satzbau, nach grammatikalischen Regeln

Wie könnte man es realisieren?

Man kann im vorraus die Wort"klassen" ja definieren. Verben, Hauptwörter etc etc.
Wenn man diese Wörter in eine Datenbank importiert und sie dort zunächst grob mit Atrributen versieht (ZB. Haus -> Hauptwort -> Attribut 1) kann man theoretisch anfangen eine Engine zu schreiben die anhand einer Datenbank über Satzbau und Grammatik anfängt zu einem bestimmten Wort bestimmte "passende" andere Wörter finden _kann_, die im Hinblick auf den Satzbau, "erlaubt" sind.

Das ganze würde natürlich sehr trocken ausfallen und Computerprogramme können nunmal nicht zweideutigkeiten und Redewendungen verstehen. Dafür ist Sprache einfach zu Komplex und wird auch immer noch zu einem grossen Teil völlig subjektiv interpretiert.

Andererseits ist es durchaus möglich ein Programm zuschreiben welches eine Assage analysieren kann und darauf hin auch dementsprechend handelt.

Hier sollte man sich evtl. mal die Sprache "Prolog" ansehen die oft dazu genutzt wird solche "Expertensysteme" zu entwickeln. Interpreter sind kostenlos verfügbar.

Schlussendlich hat Sprache sehr wohl eine Logik, wie alle strukturierten Systeme.

mfg
 
Naja mit google könnte man schnell eine Datenbank aufbauen. Sagen wir mal man startet mit einem Suchwort, z.B. "Katze". Dann ließt das Programm die ganze Webseite ein, gleicht diese mit bereits vorhandennen Wörtern, falls das Wort neu ist wird es abgespeichert. Dann wählt das wieder Programm irgent ein Wort aus der Datenbank aus und sucht danch wieder mit google. Dann gehts wieder los einlesen, vergleichen, bei Bedarf abspeichern. So ließe sich erst mal eine Datenabk aufbauen. Wenn genug Stoff vorhanden ist, dann wird sortiert: Was könnte ein Verb, was ein Adjektiv und was ein Nomen sein. Nomem sind ja recht einfach zu erkennen, sie werden immer groß geschrieben. Adjektive sind da schon schwerer zu erkennen, allerdings gibts da Endungen wie -sam, -haft, -bar, etc... Vielleicht könnte man dann noch typische Satzmuster kennen, z.B. das es oft Pronomen|Adjektiv|Nomem|Verb ist oder Nomen|Verb|Noomen.
 
Da würde sich aber dennoch eine Wortliste anbieten oder irgend eines der Digitalen Wörterbücher die ne eigene DB haben. Entweder kann man sie auslesen oder man crackert dann etwas an dem binärfile rum. Imho ein wesentlich geringerer Aufwand als Wörter zu "suchen".

Wobei das eigentliche Problem ja weiterhin in der Strukturbearbeitung liegt. Zum testen werden ein paar wörter in einer DB wohl völlig ausreichen.

mfg
 
Zurück
Oben