Modelleren en Programmeren Jeroen Bransen 16 december 2015 Tentamen Case study: Automatische taalherkenning Modelleren Specificeren Implementeren Modelleren Implementeren
Tentamen
Tentamen Vrijdag 22 januari van 17.00-20.00 in Educatorium Gamma.
Case study: Automatische taalherkenning
Programmeer-cyclus
Modelleren
Modelleren Gedicht Jabberwocky (Lewis Carrol): 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.
Modelleren Gedicht Jabberwocky (Lewis Carrol): 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. Welke talen zijn dit?
Modelleren Gedicht Jabberwocky (Lewis Carrol): 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. Welke talen zijn dit? (Engels, Duits, Frans, Nederlands)
Modelleren Je kunt de taal herkennen zonder de woorden te begrijpen
Modelleren Je kunt de taal herkennen zonder de woorden te begrijpen Patronen in woorden
Modelleren Je kunt de taal herkennen zonder de woorden te begrijpen Patronen in woorden Relatieve frequenties van letters: computer kan heel goed tellen!
Modelleren Aanpak: Bepaal de letterfrequentie van de onbekende tekst
Modelleren Aanpak: Bepaal de letterfrequentie van de onbekende tekst Vergelijk die met opgeslagen frequentie-tabellen van diverse talen
Modelleren Aanpak: Bepaal de letterfrequentie van de onbekende tekst Vergelijk die met opgeslagen frequentie-tabellen van diverse talen De best passende is het!
Modelleren Aanpak: Bepaal de letterfrequentie van de onbekende tekst Vergelijk die met opgeslagen frequentie-tabellen van diverse talen De best passende is het!
Modelleren Aanpak: Bepaal de letterfrequentie van de onbekende tekst Vergelijk die met opgeslagen frequentie-tabellen van diverse talen De best passende is het! (misschien)
Modelleren In plaats van kant-en-klare tabellen, gebruiken we voorbeeldteksten
Modelleren In plaats van kant-en-klare tabellen, gebruiken we voorbeeldteksten Programma kan daar zelf wel voor turven
Modelleren In plaats van kant-en-klare tabellen, gebruiken we voorbeeldteksten Programma kan daar zelf wel voor turven Is dit nou Kunstmatige Intelligentie?
Modelleren In plaats van kant-en-klare tabellen, gebruiken we voorbeeldteksten Programma kan daar zelf wel voor turven Is dit nou Kunstmatige Intelligentie?
Modelleren In plaats van kant-en-klare tabellen, gebruiken we voorbeeldteksten Programma kan daar zelf wel voor turven Is dit nou Kunstmatige Intelligentie? Ja, subsymbolische kunstmatige intelligentie
Specificeren
Specificeren
Specificeren Hoe vergelijk je frequentietabellen?
Specificeren Hoe vergelijk je frequentietabellen? Totaal verschil over alle letters
Specificeren Hoe vergelijk je frequentietabellen? Totaal verschil over alle letters Tekstlengte maakt niet uit, dus neem relatieve frequentie
Specificeren Hoe vergelijk je frequentietabellen? Totaal verschil over alle letters Tekstlengte maakt niet uit, dus neem relatieve frequentie Minder a s mogen extra b s niet compenseren, dus gebruik voor verschil altijd positief getal
Ontwerp class TurfTabel: om letters te tellen
Ontwerp class TurfTabel: om letters te tellen class Taal extends Frame: gebruikersinterface
Implementeren
Implementatie public class Taal extends Frame implements ActionListener { TextArea tekst; Label uitvoer; TextField[] taal; TextField[] url; final int aantal = 10; //...
Implementatie public void actionperformed(actionevent e) { TurfTabel onbekend, voorbeeld; onbekend = new TurfTabel(); onbekend.turf(tekst.gettext()); voorbeeld = new TurfTabel(); voorbeeld.leesurl(url[i].gettext());
Implementatie public void actionperformed(actionevent e) { TurfTabel onbekend, voorbeeld; onbekend = new TurfTabel(); onbekend.turf(tekst.gettext()); for (int i = 0; i < aantal; i++) { voorbeeld = new TurfTabel(); voorbeeld.leesurl(url[i].gettext());
Implementatie public void actionperformed(actionevent e) { TurfTabel onbekend, voorbeeld; onbekend = new TurfTabel(); onbekend.turf(tekst.gettext()); for (int i = 0; i < aantal; i++) { voorbeeld = new TurfTabel(); voorbeeld.leesurl(url[i].gettext()); verschil = onbekend.verschil(voorbeeld);
Implementatie public void actionperformed(actionevent e) { TurfTabel onbekend, voorbeeld; onbekend = new TurfTabel(); onbekend.turf(tekst.gettext()); for (int i = 0; i < aantal; i++) { voorbeeld = new TurfTabel(); voorbeeld.leesurl(url[i].gettext()); verschil = onbekend.verschil(voorbeeld); if (verschil < kleinste) { kleinste = verschil;
Implementatie public void actionperformed(actionevent e) { TurfTabel onbekend, voorbeeld; onbekend = new TurfTabel(); onbekend.turf(tekst.gettext()); kleinste = 26.0; antwoord = "niet te bepalen"; for (int i = 0; i < aantal; i++) { voorbeeld = new TurfTabel(); voorbeeld.leesurl(url[i].gettext()); verschil = onbekend.verschil(voorbeeld); if (verschil < kleinste) { kleinste = verschil; antwoord = taal[i].gettext(); uitvoer.settext(antwoord);
Implementatie public void actionperformed(actionevent e) { TurfTabel onbekend, voorbeeld; double kleinste, verschil; String naam, antwoord; onbekend = new TurfTabel(); onbekend.turf(tekst.gettext()); kleinste = 26.0; antwoord = "niet te bepalen"; for (int i = 0; i < aantal; i++) { voorbeeld = new TurfTabel(); voorbeeld.leesurl(url[i].gettext()); verschil = onbekend.verschil(voorbeeld); if (verschil < kleinste) { kleinste = verschil; antwoord = taal[i].gettext(); uitvoer.settext(antwoord);
Turftabel public class TurfTabel { int[] tellers; int totaal; public TurfTabel() {... public void turf(string s) {... public double verschil(turftabel andere) {... public void leesurl(string naam) {... private void turf(char c) {...
Turftabel public class TurfTabel { int[] tellers; int totaal; public TurfTabel() { tellers = new int[26]; for(int i = 0; i < tellers.length; i++) tellers[i] = 0; public void turf(string s) { for (int i = 0; i < s.length(); i++) turf(s.charat(i)); //..
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. private void turf(char c) { //.. tellers[c - a ]++; totaal++;
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. private void turf(char c) { if (c >= A && c <= Z ) { tellers[c - A ]++; totaal++; else if (c >= a && c <= z ) { tellers[c - a ]++; totaal++; //..
Specificeren Hoe vergelijk je frequentietabellen?
Specificeren Hoe vergelijk je frequentietabellen? Totaal verschil over alle letters
Specificeren Hoe vergelijk je frequentietabellen? Totaal verschil over alle letters Tekstlengte maakt niet uit, dus neem relatieve frequentie
Specificeren Hoe vergelijk je frequentietabellen? Totaal verschil over alle letters Tekstlengte maakt niet uit, dus neem relatieve frequentie Minder a s mogen extra b s niet compenseren, dus gebruik voor verschil altijd positief getal
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. public double relatief(int i) { public double verschil(turftabel andere) { //..
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. public double relatief(int i) { return (double) tellers[i] / totaal; public double verschil(turftabel andere) { //..
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. public double relatief(int i) { return (double) tellers[i] / totaal; public double verschil(turftabel andere) { double totaal = 0.0; for (int i = 0; i < 26; i++) totaal += Math.abs(this.relatief(i) - andere.relatief(i)); return totaal; //..
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. public void leesurl(string naam) { //..
Turftabel public class TurfTabel { int[] tellers; int totaal; //.. public void leesurl(string naam) { BufferedReader reader; String s; reader = new BufferedReader( new InputStreamReader( new URL(naam).openConnection().getInputStream())); while ((s = reader.readline())!= null) turf(s); //..
Modelleren
Modelleren Onze voorbeeldteksten komen van het internet
Modelleren Onze voorbeeldteksten komen van het internet Maar dat is HTML: <html> <a href=www.cs.uu.nl>klik hier</a> <img src=picture.jpg>
Modelleren Onze voorbeeldteksten komen van het internet Maar dat is HTML: <html> <a href=www.cs.uu.nl>klik hier</a> <img src=picture.jpg> De tags verstoren de telling!
Implementeren
Turftabel public class TurfTabel { boolean teltmee = true; //.. private void turf(char c) { if (c == < ) teltmee = false; else if (c == > ) teltmee = true; else if (teltmee) { // Originele code van turf //..
Programmeer-cyclus
Het werkt!