-
Sebastian Höffner authoredSebastian Höffner authored
Web OpenCCG
This repository builds a small nginx-webserver and python wrapper around OpenCCG using the GUM-space ontology, ready to run inside a docker container.
After an initial docker-compose up
, the service can be queried using a simple POST request, e.g. using curl:
$ curl --data "The yellow robot under the table." localhost:8080
{"sentence": "the yellow robot under the table", "number": 1, "parses": {"np": "(@w2:slm-Robot(slm-Robot ^ <det>the ^ <ident>specific ^ <quant>singular) ^ @x2:gs-SpatialLocating( <gs-locatum>w2:slm-Robot ^ <gs-placement>(x1:gs-GeneralizedLocation ^ <gs-hasSpatialModality>(w3:gs-UnderProjectionExternal ^ slm-Under) ^ <gs-relatum>(w5:slm-Table ^ slm-Table ^ <det>the ^ <ident>specific ^ <quant>singular))) ^ @x3:gum-ColorPropertyAscription( <concrete>true ^ <domain>w2:slm-Robot ^ <range>(w1:slm-Yellow ^ yellow ^ <concrete>true)))"}}
Or, as an example, using Python requests:
import requests
print(requests.post('http://localhost:8080', data={'sentence': 'The yellow robot under the table.'}).json())
Note that is is not production ready, as it is really slow and not optimized: Instead of keeping one (or multiple) instances of OpenCCG running to query them faster, each request spawns an individual OpenCCG instance.
Usage
Response format
The response is a JSON object and contains four fields:
-
sentence
: The cleaned input sentence (all lowercase, punctuation removed, ...). -
number
: The number of possible parses as determined from OpenCCG. -
parses
: A dictionary of parse-identifiers (e.g. "np") to actual parses as OpenCCG outputs them. -
http_status
: The HTTP status from the request.
Thus, an example response for the sentence "The yellow robot under the table." is:
{"sentence": "the yellow robot under the table",
"number": 1,
"parses": {"np": "(@w2:slm-Robot(slm-Robot ^ <det>the ^ <ident>specific ^ <quant>singular) ^ @x2:gs-SpatialLocating( <gs-locatum>w2:slm-Robot ^ <gs-placement>(x1:gs-GeneralizedLocation ^ <gs-hasSpatialModality>(w3:gs-UnderProjectionExternal ^ slm-Under) ^ <gs-relatum>(w5:slm-Table ^ slm-Table ^ <det>the ^ <ident>specific ^ <quant>singular))) ^ @x3:gum-ColorPropertyAscription( <concrete>true ^ <domain>w2:slm-Robot ^ <range>(w1:slm-Yellow ^ yellow ^ <concrete>true)))"},
"http_status": 200}
Querying OpenCCG
The OpenCCG service allows to parse sentences using the English CCG grammar based on the Generalized Upper Model by the SFB/TR 8 Spatial Cognition.
It is wrapped into a small web app which can either be queried using a post request (e.g. using curl or wget), or used with a crude GUI:
$ curl --data "The yellow robot under the table." localhost:8080
{"sentence": "the yellow robot under the table", "number": 1, "parses": {"np": "(@w2:slm-Robot(slm-Robot ^ <det>the ^ <ident>specific ^ <quant>singular) ^ @x2:gs-SpatialLocating( <gs-locatum>w2:slm-Robot ^ <gs-placement>(x1:gs-GeneralizedLocation ^ <gs-hasSpatialModality>(w3:gs-UnderProjectionExternal ^ slm-Under) ^ <gs-relatum>(w5:slm-Table ^ slm-Table ^ <det>the ^ <ident>specific ^ <quant>singular))) ^ @x3:gum-ColorPropertyAscription( <concrete>true ^ <domain>w2:slm-Robot ^ <range>(w1:slm-Yellow ^ yellow ^ <concrete>true)))"}}
When using the GUI (open your browser at http://localhost:8080), the response is more human readable:
"the yellow robot under the table": 1 parse found.
Parse: np :
(@w2:slm-Robot(slm-Robot ^
<det>the ^
<ident>specific ^
<quant>singular) ^ @x2:gs-SpatialLocating(
<gs-locatum>w2:slm-Robot ^
<gs-placement>(x1:gs-GeneralizedLocation ^
<gs-hasSpatialModality>(w3:gs-UnderProjectionExternal ^ slm-Under) ^
<gs-relatum>(w5:slm-Table ^ slm-Table ^
<det>the ^
<ident>specific ^
<quant>singular))) ^ @x3:gum-ColorPropertyAscription(
<concrete>true ^
<domain>w2:slm-Robot ^
<range>(w1:slm-Yellow ^ yellow ^
<concrete>true)))
Changing the port
Many webservices use port 8080 as a default port.
To change the port of this software, adjust the docker-compose file and change the port line from "8080:80"
to your port on the left side (but keep the 80 in tact), so for example to set up the service on Port 9043, you would change it to "9043:80"
.