Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty ); if (r[0] == "stad") { } else { new Point( int.Parse(r[2]), int.Parse(r[3]) ) ); this. bouwStad (r[1] this.bouwWeg( r[1], r[2], int.Parse(r[3]) ); } } } if (r.Length==4) StreamReader sr = new StreamReader(filenaam);
Opbouw van het Netwerk void bouwStad (string naam, Point p) { } Stad st = new Stad(naam, p); void bouwWeg (string van, string naar, int kosten) { } Steden. Add (st); Stad st1 = this. vindStad (van); Stad st2 = this. vindStad (naar); st1. BouwWeg (st2, kosten); st2. BouwWeg (st1, kosten); Netwerk’s Stad’s void BouwWeg(Stad doel, int k) { } Wegen. Add ( new Weg(doel, k) ); class Stad {
Opbouw van het Netwerk Stad vindStad (String naam) { } foreach ( Stad st in Steden ) { } if ( st.naam == naam ) return st ; return null ; Stad VindStad (Point p) { foreach ( Stad st in steden ) { } if ( return st ; return null ; p.X-st.Plek.X < 5 && p.Y-st.Plek.Y <5 ) Math.Abs( )
while (... ) { pad =... if (compleet) return pad; for (...) if ( !kring ) paden.Push(...) } return null; Niet de eerste oplossing, maar de beste zoeken! while (... ) { pad =... if (compleet) return pad; for (...) if ( !kring ) paden.Push(...) } return null; beste = null; return beste; beste=pad;if (beter) beste=pad; && !zinloos)
Hoofdstuk 11.2 Algoritmen: Automatische taalherkenning
Implementeer Programmeer-cyclus Edit Compile Run Specificeer Modelleer
Modelleren ngedicht “Jabberwocky” (Lewis Carroll) 'Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. Il brigue: les tôves libricilleux Se gyrent en vrillant dans la guave. Enmîmés sont les goubebosqueux Et le mômerade horsgrave. Es brillig war. Die schlichten Toven Wirrten un wimmelten in Waben; Und aller-mümsigen Burggroven Die mohmen Räth' ausgraben. 't Was bradig en de slijp'le torfs Driltolden op de wijde weep. Misbrozig stonden borogorfs 't Verdwoolde grasvark schreep. nHoe herken je de taal? uk fr de nl
Modelleren je kunt de taal herkennen zonder de woorden te begrijpen! npatronen in woorden en uitgangen nrelatieve frequenties van de letters die kan een computer ook tellen...
Modelleren nBepaal de letterfrequentie van de onbekende tekst nVergelijk die met opgeslagen frequentie- tabellen van diverse talen nDe “best passende” is het! misschien
Modelleren we stoppen er niet kant-en-klare tabellen in......maar voorbeeldteksten, waarvan het programma de letters zelf mag turven is dit nou AI? Ja. subsymbolische AI
Specificeren onbekende tekst voorbeeld- talen en -teksten
Specificeren Hoe vergelijk je frequentietabellen? nAlle letters zijn belangrijk Totaliseer de verschillen voor alle letters nTekstlengte mag niet van invloed zijn Gebruik de relatieve frequentie nTekort mag overschot niet compenseren Tel het verschil altijd positief
Ontwerpen Klassen in dit programma nclass Form nclass TurfTab nclass RelTurfTab : TurfTab nclass Taal : Form uit System.Windows.Forms uit LetterTeller voegt toe: - relatieve telling - lezen vanaf WWW voegt toe: - interactie
Implementatie: GUI class Taal : Form { TextBox invoer; Label uitvoer; TextBox [ ] taal;TextBox [ ] url; const int aantal = 10; Label [ ] score; TableLayoutPanel paneel,talen,alles;
Implementatie: actie void herken_klik (object o, ActionEvent ae) { RelTurfTab onbekend, voorbeeld; onbekend = new RelTurfTab(); onbekend. Turf ( invoer.Text ); voorbeeld = new RelTurfTab(); voorbeeld. Lees (url[t].Text ); for (int t=0; t<aantal; t++) { } d = onbekend. Verschil (voorbeeld); if (d<kleinste) kleinste = d; { antwoord = taal[t].Text; } uitvoer. Text = antwoord; kleinste = 1.0; antwoord = "onbekend"; double kleinste; string antwoord;
De klasse TurfTab public class TurfTab { int [ ] tellers; int totaal; public TurfTab ( ){... } public void Turf (string s){... } public string ToString ( ) {... } private void turf (char c){... } } klasse-ontwerp: wat is... & wat kan... & hoe?
De klasse RelTurfTab public void Lees (string s) {... } public double Verschil (RelTurfTab ander ) {... } private double relatief (int i) {... } } public class RelTurfTab : TurfTab {
Specificeren Hoe vergelijk je frequentietabellen? nAlle letters zijn belangrijk Totaliseer de verschillen voor alle letters nTekstlengte mag niet van invloed zijn Gebruik de relatieve frequentie nTekort mag overschot niet compenseren Tel het verschil altijd positief
De klasse RelTurfTab public double Verschil (RelTurfTab ander ) { } private double relatief (int i) { } public class RelTurfTab : TurfTab { tellers[i] / totaal(double)return ; this.relatief(t) – ander.relatief(t) for (int t=0; t<26; t++) totaal += Math.Abs ( ); double totaal = 0.0; return totaal;
De klasse RelTurfTab public void Lees (string naam) public class RelTurfTab : TurfTab { { } TextReader reader; string regel; regel = reader.ReadLine() while ( ( ) != null ) this.Turf (regel); reader = new StreamReader(naam); reader = new StreamReader( new WebClient( )); if (naam.StartsWith(" else. OpenRead(naam)
Modelleren we stoppen er niet kant-en-klare tabellen in......maar voorbeeldteksten, waarvan het programma de letters zelf mag turven geplukt van het internet Klik hier verstoren taalbeeld!
De klasse TurfTab class TurfTab { int [ ] tellers; int totaal; public TurfTab ( ){... } public void Turf (String s){... } public String ToString ( ) {... } private void turf (char c){... } } deze methode herdefiniëren in RelTurfTab virtual protected
De klasse RelTurfTab override protected void turf (char c) { } class RelTurfTab : TurfTab { base. turf (c); if (teltMee) bool teltMee = true; if (c== ‘ ’) teltMee = true; herdefinitie doe de oorspronkelijke versie extra member-variabele
Implementatie af! Implementeer Edit Compile Run Specificeer Modelleer
Modelleren nBepaal de letter- frequentie van de onbekende tekst nVergelijk die met opgeslagen frequentie- tabellen van diverse talen nDe “best passende” is het! misschien we stoppen er niet kant-en-klare tabellen in......maar voorbeeldteksten, waarvan het programma de letters zelf mag turven
Specificeren Hoe vergelijk je frequentietabellen? nAlle letters zijn belangrijk Totaliseer de verschillen voor alle letters nTekstlengte mag niet van invloed zijn Gebruik de relatieve frequentie nTekort mag overschot niet compenseren Tel het verschil altijd positief
Ontwerpen Klassen in dit programma nclass Frame nclass TurfTab nclass RelTurfTab : TurfTab nclass Taal : Frame uit System.Windows.Forms hadden we al voegt toe: - relatieve telling - lezen vanaf WWW voegt toe: - interactie