[PetersWerkWiki] [TitleIndex] [WordIndex

Werkoverleg met GvN.

Taken:

  1. PaQu

  2. Alpino in docker
  3. Inloggen via surfnet
    • → zie e-mail van surfnet
    • → zie nieuwe login in PaQu

API Alpino-server

TODO:

Request API

return status:

code

status

betekenis

200

OK

202

Accepted

na upload van tekst

400

Bad Request

fout van gebruiker

403

Forbidden

bijvoorbeeld: ip-adres geblokkerd vanwege misbruik

429

Too Many Requests

toegang geweigerd vanwege te veel teksten tegelijk

500

Internal Server Error

501

Not Implemented

503

Service Unavailable

server is overbelast, probeer later opnieuw

Gelijk aan HTTP status codes

return als code 400 of groter is:

type

omschrijving

code

int

zie boven

status

string

zie boven

message

string

de foutmelding

request: parse

doel: zend corpus naar server om te laten parsen

parameters:

type

default

voorwaarde

omschrijving

lines

bool

false

true: één zin per regel / false: doorlopenede tekst

tokens

bool

false

lines: true

zinnen zijn getokeniseerd

labels

bool

false

lines: true

zinnen hebben labels

label

string

"doc"

lines: false

prefix voor labels

hints

bool

false

tokens: true

special betekenis voor [ en ]

voorbeeld aanroep, tekst volgt na json-object:

{
    "request": "parse",
    "lines": true,
    "tokens": true,
    "labels": true
}
doc.1.p.1.s.1|ik besta
doc.1.p.1.s.2|jij bestaat

return voor status is ok:

type

omschrijving

code

int

202

status

string

Accepted

id

string

id van job

lines

int

aantal zinnen, eventueel na splitsen van lopende tekst in zinnen

timeout

int

tijd in seconden waarbinnen output opgevraagd moet worden voordat job wordt gecanceld

voorbeeld uitvoer:

{
    "code": 202,
    "status": "Accepted",
    "id": "118587257602604880",
    "lines": 2,
    "timeout": 300
}

request: output

doel: opvragen van (deel van) de uitvoer van een job, momenteel alleen jobs van type parse

parameters:

type

omschrijving

id

string

id van job

voorbeeld aanroep:

{
    "request": "output",
    "id": "118587257602604880"
}

return voor status is ok, voor job van type "parse":

type

omschrijving

code

int

200

status

string

OK

finished

bool

true als parsen van alle zinnen is voltooid

batch

array van items

de zinnen geparst tot nu toe sinds laatste aanroep
zinnen in batch hoeven niet aansluiten te zijn
volgorde niet gedefinieerd

batch item:

type

omschrijving

status

string

ok, fail

lineno

int

zinnummer

label

string

label van de zin, alleen als die aanwezig is

xml

string

de parse van de zin, alleen voor status=ok

log

string

error-uitvoer van de parser, of van een andere fout

voorbeeld uitvoer:

{
    "code": 200,  
    "status": "OK",
    "finished": true,
    "batch": [
{"status":"ok","lineno":2,"label":"doc.1.p.1.s.2","xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<alpino_ds version=\"1.5\">\n  <node begin=\"0\" cat=\"top\" end=\"2\" id=\"0\" rel=\"top\">\n    <node begin=\"0\" cat=\"smain\" end=\"2\" id=\"1\" rel=\"--\">\n      <node begin=\"0\" case=\"nom\" def=\"def\" end=\"1\" frame=\"pronoun(nwh,je,sg,de,nom,def)\" gen=\"de\" getal=\"ev\" id=\"2\" lcat=\"np\" lemma=\"jij\" naamval=\"nomin\" num=\"sg\" pdtype=\"pron\" per=\"je\" persoon=\"2v\" pos=\"pron\" postag=\"VNW(pers,pron,nomin,vol,2v,ev)\" pt=\"vnw\" rel=\"su\" rnum=\"sg\" root=\"jij\" sense=\"jij\" status=\"vol\" vwtype=\"pers\" wh=\"nwh\" word=\"jij\"/>\n      <node begin=\"1\" end=\"2\" frame=\"verb(hebben,sg3,intransitive)\" id=\"3\" infl=\"sg3\" lcat=\"smain\" lemma=\"bestaan\" pos=\"verb\" postag=\"WW(pv,tgw,met-t)\" pt=\"ww\" pvagr=\"met-t\" pvtijd=\"tgw\" rel=\"hd\" root=\"besta\" sc=\"intransitive\" sense=\"besta\" stype=\"declarative\" tense=\"present\" word=\"bestaat\" wvorm=\"pv\"/>\n    </node>\n  </node>\n  <sentence sentid=\"82.161.115.144\">jij bestaat</sentence>\n</alpino_ds>\n","log":""},
{"status":"ok","lineno":1,"label":"doc.1.p.1.s.1","xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<alpino_ds version=\"1.5\">\n  <node begin=\"0\" cat=\"top\" end=\"2\" id=\"0\" rel=\"top\">\n    <node begin=\"0\" cat=\"smain\" end=\"2\" id=\"1\" rel=\"--\">\n      <node begin=\"0\" case=\"nom\" def=\"def\" end=\"1\" frame=\"pronoun(nwh,fir,sg,de,nom,def)\" gen=\"de\" getal=\"ev\" id=\"2\" lcat=\"np\" lemma=\"ik\" naamval=\"nomin\" num=\"sg\" pdtype=\"pron\" per=\"fir\" persoon=\"1\" pos=\"pron\" postag=\"VNW(pers,pron,nomin,vol,1,ev)\" pt=\"vnw\" rel=\"su\" rnum=\"sg\" root=\"ik\" sense=\"ik\" status=\"vol\" vwtype=\"pers\" wh=\"nwh\" word=\"ik\"/>\n      <node begin=\"1\" end=\"2\" frame=\"verb(hebben,sg1,intransitive)\" id=\"3\" infl=\"sg1\" lcat=\"smain\" lemma=\"bestaan\" pos=\"verb\" postag=\"WW(pv,tgw,ev)\" pt=\"ww\" pvagr=\"ev\" pvtijd=\"tgw\" rel=\"hd\" root=\"besta\" sc=\"intransitive\" sense=\"besta\" stype=\"declarative\" tense=\"present\" word=\"besta\" wvorm=\"pv\"/>\n    </node>\n  </node>\n  <sentence sentid=\"82.161.115.144\">ik besta</sentence>\n</alpino_ds>\n","log":""},
   ]
}

request: cancel

doel: een lopende job afbreken (jobs worden ook afgebroken als de timeout is verstreken)

parameters:

type

omschrijving

id

string

id van job

voorbeeld aanroep:

{
    "request": "cancel",
    "id": "118587257602604880"
}

voorbeeld uitvoer:

{
    "code": 200,  
    "status": "OK"
}

request: info

doel: details over de huidige status van de server opvragen

geen parameters

voorbeeld aanroep:

{
    "request": "info"
}

return voor status is ok:

type

omschrijving

api

object

API-versie gebruikt door deze server

api.major

int

major version number

api.minor

int

minor version number

server

object

optioneel

gegevens over server

server.about

string

optioneel

vrije tekst, beschrijving, contact-info, etc.

server.workers

int

optioneel

aantal werkers op dit moment, bezig of wachtend
kan veranderen doordat sub-servers komen of gaan

server.jobs

int

optioneel

totaal aantal jobs (parse) die op dit moment verwerkt worden

limits

object

regels voor de gebruiker

limits.maxjobs

int

maximum aantal jobs per IP-adres

voorbeeld uitvoer:

{
    "code": 200,  
    "status": "OK"
    "api": {
        "major": 1,
        "minor": 0
    },
    "server": {
        "about": "Experimentele server om de API te testen.\nNiet voor productiedoeleinden.\nContact: Peter Kleiweg <p.c.j.kleiweg@rug.nl>",
        "workers": 10,
        "jobs": 45
    },
    "limits": {
        "maxjobs": 6
    }
}

Gebruik

Draait op zardoz → zie: /net/aistaff/kleiweg/paqu/tmp/alpserve

Voorbeeld aanroep:

curl -s -d '{"request": "parse", "lines": true, "tokens": true, "labels": true}
weer.p.1.s.1|Vandaag & morgen
weer.p.2.s.1|Kans op onweersbuien
weer.p.3.s.1|De buien boven het noorden van het land trekken spoedig weg , waarna de zon op veel plaatsen doorbreekt en het broeierig aanvoelt .
weer.p.3.s.2|In de loop van vanmiddag en vanavond neemt de kans op stevige onweersbuien van het zuidwesten uit toe .
weer.p.3.s.3|Vooral in het oosten kunnen deze lokaal fors uitpakken met veel regen in korte tijd , wat voor wateroverlast kan zorgen .
weer.p.3.s.4|Ook hagel en ( zware ) windstoten zijn mogelijk .
weer.p.3.s.5|De maximumtemperaturen lopen uiteen van 22 graden op de Wadden tot 30 graden in het zuidoosten van het land .
weer.p.3.s.6|De wind draait naar het zuiden en neemt toe naar matig .
weer.p.3.s.7|In de middag draait de wind in het westen naar noordwest en neemt af naar zwak .
weer.p.4.s.1|Komende nacht is er nog steeds kans op enkele forse onweersbuien .
weer.p.4.s.2|De minimumtemperaturen liggen rond de 20 graden en de wind is zwak uit uiteenlopende richtingen .
weer.p.5.s.1|Morgen overdag is het half tot zwaar bewolkt en kan er in het uiterste oosten nog een enkele bui voorkomen , maar de kans op onweer is klein .
weer.p.5.s.2|De middagtemperatuur loopt uiteen van 19 graden vlak aan zee tot 26 graden in het oosten van het land .
weer.p.5.s.3|De wind wordt geleidelijk westelijk en is zwak tot matig .
weer.p.5.s.4|( Bron : KNMI )' http://127.0.0.1:9456/json

Of:

curl -s --data-binary @/net/aistaff/kleiweg/paqu/tmp/alpserve/data http://127.0.0.1:9456/json

Voorbeeld antwoord:

{
    "code": 202,
    "status": "Accepted",
    "id": "5577006791947779410",
    "lines": 15,
    "timeout": 300
}

Je moet resultaten opvragen binnen de gegeven timeout (in seconden), anders wordt de boel weggegooid. Voorbeeld:

curl -s -d '{"request": "output", "id": "5577006791947779410"}' http://127.0.0.1:9456/json

Je krijgt dan de verwerking van de zinnen geparst vanaf de vorige aanroep tot nu toe.

Als daarin staat "finished":false dan zijn dit nog niet alle zinnen. Herhaal dan bovenstaand commando opnieuw, weer binnen de timeout, die gereset is bij de vorige aanroep.


CategoryPaQu CategoryAlpino