Nada

Extrauppgift i parsning: En liten grammatik

Välj ut en kortare text på svenska, engelska eller något annat språk som du/ni behärskar flytande.
(Visa texten för oss innan ni kör igång!)

Grunduppgift

Fösök skriva en liten grammatik som täcker huvuddelen av texten. Använd den grammatikformalism som Prologparsrarna från laborationen i syntax och parsning kräver.

Att skriva en heltäckande grammatik är inte det lättaste, även för en kortare text. Försök att öka grammatikens täckningsgrad på något av följande två sätt:

  • Antingen genom att skriva om delar av texten: förkorta en del meningar, byt ut problematiska konstruktioner mot enklare, etc.,
  • eller genom att anpassa grammatiken (och ev. även någon eller några av parsningsalgoritmerna) så att partiella analyser kan produceras.
  • Testkör olika parsningsalgoritmer på texten och jämför deras prestanda.

    Diskussion

    Diskutera möjligheterna att producera delanalyser resp. fullständiga analyser för satserna i texten. På vilket/vilka sätt lämpar sig / lämpar sig inte de olika parsningsalgoritmerna för detta? Hur påverkas parsningseffektiviteten av de olika grammatiska konstruktionerna i texten? Och av valet av parsningsalgoritm?


    Effektivitet

    För testning av de olika parsningsalgoritmerna använder ni lämpligen ett predikat som tillåter er att göra testningar genom att köra alla meningarna i följd på den för tillfället inladdade parsern.

    Se till att testpredikatet ger svar i tidsåtgång. Det kan ni få genom att använda anropet

      | ?- statistics(runtime,Time).
    
    som i Time ger en lista med er CPU-tidsåtgång i millisekunder, dels totalt, dels sedan senaste anropet till statistics.

    statistics/2 har en stor mängd olika mått för minnesåtgång att använda (ni kan få allihop uppräknade med anropet statistics(X,Y).).
    Prova dem. De finns beskrivna i SICStus-manualen.
    Predikatet statistics/0 ger en sammanställning av totalvärdena på dessa olika statistikmått.

    Ett annat sätt att mäta effektivitet är att räkna processteg. Det är knivigare, för parsrarna är olika konstruerade - men om ni till exempel lägger en räknare på varje gång parsern tittar i lexikon, läser en regel, eller anropar parse/4 kan det möjligen ge resultat. Prova.

  • Provkör fyra eller fem av de olika parsrar vi gått igenom:
  • top_down.pl,
  • bup.pl,
  • link.pl,
  • wfst.pl och kanske
  • chart.pl.
  • på er grammatik och jämför prestanda. OBSERVERA att om ni ska använda chart parsern så behöver ni anpassa grammatikformatet så att den kan läsa grammatiken.


    Hem till kursplanen.

    Sidansvarig: Fredrik Olsson <fredriko@sics.se>