This project is based on the paper "Specifying and Verbalising Answer Set Programs in Controlled Natural Language" by Rolf Schwitter. I recreated what was done in the paper but on a much smaller scale, focusing on creating a bi-directional grammar suitable for both processing and generation of program specifications in CNL.
The program big.pl (stands for Bi-directional Grammar) should be run using SWI-Prolog. To give it a test run, simply load the file using command: [big].
And then query: test.
Having done that, you will see the output of the program for a pre-defined example.
If you want to run the program on YOUR OWN INPUT SENTENCES, you have to modify the file big.pl:
Note that each sentence must be a list of words, where all words must be separated by a comma, and a sentence must end with the special symbol '.'. Each sentence must start with the system word 'every'
/'no'
or have an agent in it, e.g. like in [bob,dreams,'.']
, where bob is an agent. System words are: 'every', 'no', 'is', 'is not', 'does not', '.'
.
See samples.txt for samples of input sentences that you can try running.
In case you'd like to introduce new words and/or agents not included in the program, you have to add them yourself in big.pl. Current lexicon is defined in lines 175-198. For each of your custom words, add a line following the format of:
lexicon(cat:noun, wform:[student], arg:X, term:student(X)).
where cat argument is the category of the word (noun, verb, det, etc.); wform stands for word-form, i.e. the exact word that appears in a sentence; arg specifies argument of the term that the word refers to; term denotes the actual term that will be used in the internal format and in the ASP. For each of your custom agents, add a line of the format agent(name).
, where name is the name of your agent, e.g. bob
.
Note that currently the program only supports the following categories: noun (cat:noun
), verb (cat:iv
), determinant ('every', 'no'
), adjective (cat:jj
). All sentences must have a simple structure, no articles ("a", "an", "the"), no "and"/"or"-linked components.
Program big.pl gives out four outputs at once:
Please refer to Report.pdf for more detail about the representations.
Note that 3. ASP representation is a valid answer-set program, which you can solve using e.g. clingo, which I encourage you to try.
Created by Yevheniia Soroka, MS student, Stony Brook University, NY (CSE505: Computing with Logic, Fall 2018)
Special thanks to Rolf Schwitter for guidance on how to get started and sharing useful resources.