Opgave 3 - Informatie-extractie

Introductie

In deze opgave gaan we met het Alpino ontleedsysteem werken. Alpino is een unificatie-grammatica die analyses in de vorm van dependency structures oplevert. In deze opgave zal je aan de hand van dependency structures informatie extraheren, en toegankelijk maken als Prolog feiten. In de opdracht van volgende week zul je dezelfde feiten gebruiken om vragen te beantwoorden.

Gegeven zijn een aantal Prolog bestanden in het archief opgave3.tar.gz:

  • extraction.pl Predikaten voor het extraheren van informatie.
  • suite.pl Zinnen waar informatie uit geëxtraheerd moet worden.

Na het downloaden van het archief kun je het uitpakken met tar:

$ tar zxf opgave3.tar.gz
$ cd opgave3

Alpino

Zoals gezegd, zal Alpino gebruikt worden voor het ontleden van zinnen. Voor het gebruik van Alpino moet je eerst de ALPINO_HOME en PATH variabelen instellen:

export ALPINO_HOME=/net/aps/64/src/Alpino
export PATH=$PATH:/net/aps/64/bin

Deze regels kun je ook aan ~/.bashrc toevoegen, zodat je ze de volgende keer niet in hoeft te tikken. Je kunt nu Alpino starten met:

$ sh run_alpino.sh

Dit commando zal Alpino starten, en extraction.pl en suite.pl laden. In Alpino kun je een zin ontleden in de command interpreter (in de terminal waar Alpino gestart is) met het ster (*) commando:

1 |: * Amsterdam is de hoofdstad van Nederland .

Let op dat je tokens moet scheiden met een spatie. Na het ontleden van een zin zul je in het linkervlak een dependency tree zien. Door het commando sdt te gebruiken kun je de daadwerkelijke dependency structure tonen. Deze zal dan in het rechtervlak van het Hdrug-scherm verschijnen.

Om de extractie van feiten te kunnen testen, kun je altijd het facts commando uitvoeren om feiten te extraheren uit de laatst ontlede zin. Extractie is al gedefinieerd voor een aantal veelvoorkomende structuren voor landen en hoofdsteden:

1 |: * Amsterdam is de hoofdstad van Nederland .
[...]
2 |: facts
capital('Nederland','Amsterdam').

Opdracht

In deze opdracht zul je vooral in extraction.pl werken. Hier kun je al een voorbeeld vinden van extractie van (nog niet alle) land/hoofdstad combinaties. Je kunt zelf extra extracties toevoegen door bijvoorbeeld fact/2 en su_pref_fact predikaten te definiëren. De beste werkprocedure is:

  • Ontleed een zin waarbij informatie-extractie nog niet werkt.
  • Bekijk met het sdt commando hoe de informatie in de dependency-structure beschikbaar is, en bedenk een zo algemeen (maar niet te algemeen) mogelijke manier om die informatie te extraheren.
  • Voeg predikaten toe om de informatie te extraheren, je kunt dezelfde methoden gebruiken om attribute-value structures te analyseren als het vorige practicum.
  • Test: werkt het, is het algemeen genoeg, en werken andere gevallen nog goed?

De opdracht:

  1. Voeg informatie-extractie toe voor zinnen met landen/provincies/… en hoofdsteden, waarbij de informatie-extractie nog niet werkt.
  2. Voeg informatie-extractie toe voor personen en geboortedata. Stel ge-extraheerde feiten beschikbaar als het birth_date(Person,Date) predikaat.
  3. Sluit Alpino af, en voer het extract-all.sh script uit (sh extract-all.sh), de feiten zullen nu geëxtraheerd worden en geschreven worden naar facts.pl.

Voor deze opgave lever je in: extraction.pl en facts.pl. Stuur je uitwerking naar:

Let op: Je zult de komende twee weken verder werken met deze programmacode, bewaar het dus goed.

Tips

  • Zoals je in suite.pl kunt zien heeft elke zin een identifier. Je kunt een zin ontleden met het sen commando, bijvoorbeeld: sen hoofdstad1
  • Je kunt de volgende zin ontleden met next en de vorige met prev.
  • Als je extraction.pl gewijzigd hebt, kun je het opnieuw laden (reconsult) met het rc commando: rc extraction.pl
  • Je kunt een predikaat ‘tracen’ met het spy commando. De volgende keer dat het predikaat bewezen wordt, zul je automatisch een Prolog trace prompt krijgen. Bijvoorbeeld: spy fact
  • Met het p commando kun je een Sicstus prompt krijgen. Met het r/0 predikaat kom je weer terug in de command interpreter.

Overzicht dependentielabels

Dependentielabel Omschrijving
APP appositie, bijstelling
BODY romp (bij complementizer)
CMP complementizer
CNJ lid van nevenschikking
CRD nevenschikker (als hoofd van conjunctie)
DET determinator
DLINK discourse-link
DP discourse-part
HD hoofd
HDF afsluitend element van circumpositie
LD locatief of directioneel complement
ME maat (duur, gewicht,…) complement
MOD bijwoordelijke bepaling
MWP deel van een multi-word-unit
NUCL kernzin
OBCOMP vergelijkingscomplement
OBJ1 direct object, lijdend voorwerp
OBJ2 secundair object (meewerkend, belanghebbend, ondervindend)
PC voorzetselvoorwerp
POBJ1 voorlopig direct object
PREDC predicatief complement
PREDM bepaling van gesteldheid tijdens de handeling
RHD hoofd van een relatieve zin
SAT satelliet; aan- of uitloop
SE verplicht reflexief object
SU subject, onderwerp
SUP voorlopig subject
SVP scheidbaar deel van werkwoord
TAG aanhangsel, tussenvoegsel
VC verbaal complement
WHD hoofd van een vraagzin