Quote:
Originally Posted by dowhile
D.h. der Algorithmus soll eine reguläre Sprache bilden, für die du einige Wörter vorgibst, er dann die restlichen Wörter "errät" und anschließend einen regulären Ausdruck generiert, der diese Sprache beschreibt?
Wenn ich die Wörter "100.100.100.100", "192.168.178.0" und "255.255.255.0" markiere - wie soll der Algorithmus daraus erraten, dass jede gültige IPv4 Adressen ein Wort sein soll?
Anderes Beispiel: "60", "4", "6", "18" - ich will jede hexadezimale Zahl. Wie soll der Algorithmus hier funktionieren? Selbst bei "0x60", "0x4", "0x6", "0x18" ist das schwer. Vielleicht will ich auch alles, was dem Muster "0x[a-z0-9]+" folgt.
Bei deinem Beispiel nimmst du an, dass der Algorithmus direkt erkennt, dass du alle Zahlen mit optionalen Nachkommastellen willst. Aber woher weiß der Algorithmus, dass du das möchtest? Woher weiß er, dass das dem uns üblichen Format für Kommazahlen entspricht? Man müsste es dem Algorithmus sagen - und auch, wie das Format für hexadezimale Zahlen entspricht. Und dann kann man den Algorithmus nur dafür nutzen und für nichts anderes.
|
Das ist das Gebiet der künstlichen Intelligenz. ;)
Dein 1. Beispiel kann ich dir erklären:
Quote:
1."100.100.100.100"
2."192.168.178.0"
3. "255.255.255.0"
|
Zuerst einmal könnte der Algorhitmus schauen wie viele Zahlen von 0-9 hier drin vorkommen und was für einen Anteil sie einnehmen:
Folgende Zahlen wurden gefunden:
0,1,2,5,6,8,9
Das sind 7 Zahlen, insgesamt gibt es 10 Zahlen, da keine Zahl ein Buchstabe ist, könnte man von dem Zehnersystem ausgehen und sagen:
Die Chance, dass der Benutzer alle Zahlen meint ist identisch mit der Anzahl benutzten Zahlen:
Also 7/10, die Chance, dass der Benutzer also den kompletten Zahlen-Bereich meint liegt bei 7/10, also wird das Programm wohl zum gesamten Zahlenbereich tendieren.
Anschließend analysiert es wann jeweils ein "." kommt. Das Programm stellt fest, dass immer 3 Zahlen kommen und dann ein "." außer am Ende, also wird die Regel auch dementsprechend angewandt.
An allen Stellen müssen es 3 Zahlen sein, außer am Ende, da müssen es mindestens 1 sein.
Damit würde die Regel so aussehen:
{3 beliebige Zahlen}.{3 beliebige Zahlen}.{3 beliebige Zahlen}.{min. 1 beliebige Zahlen}
Damit sind zwar so Sachen wie "123.123.12.2" ausgeschlossen, gibt man aber diese Adresse zusätzlich noch als Beispiel an, kann man die 2. Regel zu "Mindestens 2 Zahlen" ändern.
Zusätzlich kann man noch analysieren lassen, ob die Zahlen mit 0 beginnen bzw. welche mit 0 beginnen dürfen (nur die letzte).
Damit kriegt man also eine relativ gute Näherung des Problems und je mehr Beispiele man eingibt, desto besser ist diese Näherung (sollte man von der Mathematik her kennen).
Quote:
|
Anderes Beispiel: "60", "4", "6", "18" - ich will jede hexadezimale Zahl. Wie soll der Algorithmus hier funktionieren? Selbst bei "0x60", "0x4", "0x6", "0x18" ist das schwer. Vielleicht will ich auch alles, was dem Muster "0x[a-z0-9]+" folgt.
|
Bei "60", "4", "6", "18" weiß nicht einmal ein Mensch was du willst, wie soll das also eine Maschine wissen? -.-
In dem Fall "0x60", "0x4", "0x6", "0x18" ist das eindeutig, sogar relativ einfach in der Umsetzung.
Es wird untersucht mit was die Strings beginnen, hier stellt man fest, dass es immer mit "0x" beginnt. Im Programm kann jetzt einprogrammiert worden sein, dass wenn man unter einer bestimmten Anzahl Beispiele ist, "0x" als Hexadezimal-Code angenommen wird. Sollte man z.B. mehr als 8 Beispiele haben und alle besitzen nur Zahlen von 0-9, wird diese Vermutung widerrufen und man beschränkt sich auf den Bereich 0-9.
Logischerweise ist eine Intelligenz (welche Art auch immer) nur so schlau wie der Lehrer und wenn der Lehrer 10x dieselben Beispiele oder ähnlichen Beispiele eingibt, dann ist wohl ersichtlich, dass das Ergebnis nicht gut sein kann.
Kleines Beispiel dazu aus der Mathematik:
Wenn ich 1000x eine Summe von 2 Zahlen kleiner 10 rechne und dann plötzlich die Aufgabe kriege Zahlen mit 10 Ziffern und mehr zu addieren, wird auch der Mensch überfordert (nicht umsonst rechnet man in der Schule Stufenweise also bis 20, bis 100, bis 1000 und dann bis 100.000).
Deswegen merke:
Wenn der Lehrer gut ist und über seine Beispiele nachdenkt, ist der Algorhitmus auch intelligent genug, um in 99% der Fälle das richtige Ergebnis zu liefern. 100% Sicherheit bekommt man nie, das ist aber bei den intelligenten Wesen auch nicht anders. Beispielsweise kann man sich immer einmal verrechnen oder Vorzeichen vergessen usw.