Hoofdstuk 14.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 Frame nclass TurfTab nclass RelTurfTab extends TurfTab nclass Taal extends Frame uit java.awt hadden we al voegt toe: - relatieve telling - lezen vanaf WWW voegt toe: - interactie
Implementatie GUI class Taal extends Frame implements ActionListener { TextArea tekst; Label uitvoer; TextField [] taal; TextField [] url; final int aantal = 10;
Implementatie actie public void actionPerformed (ActionEvent e) { RelTurfTab onbekend, voorbeeld; onbekend = new RelTurfTab(); onbekend. turf ( tekst.getText() ); voorbeeld = new RelTurfTab(); voorbeeld. leesUrl (url[t].getText() ); for (int t=0; t<aantal; t++) { } d = onbekend. verschil (voorbeeld); if (d<kleinste) kleinste = d; { antwoord = taal[t].getText(); } uitvoer. setText ( 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 leesUrl (String s) {... } public double verschil (RelTurfTab ander ) {... } private double relatief (int i) {... } } public class RelTurfTab extends 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 extends 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 private void leesUrl (String naam) { } public class RelTurfTab extends TurfTab { new URL (naam). getConnection(). getInputStream() new InputStreamReader ( ) new BufferedReader ( ) BufferedReader reader = ; String regel; regel=reader.readLine() while ( ( ) != null ) this. turf (regel);
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 public 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
De klasse RelTurfTab private void turf (char c) { } public class RelTurfTab extends TurfTab { super. turf (c); if (teltMee) boolean teltMee = true; if (c== ‘ ’) teltMee = true; herdefinitie doe de oorspronkelijke versie extra variabele in het object
Implementatie af! Implementeer Edit Compile Run Specificeer Modelleer
Programmeer-cyclus 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 extends TurfTab nclass Taal extends Frame uit java.awt hadden we al voegt toe: - relatieve telling - lezen vanaf WWW voegt toe: - interactie