-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
BAI Research edited this page Jun 5, 2022
·
8 revisions
- Install all necessary Dependencies for OpenNLC
- Download the OpenNLC source and compile your own executable
- Place all the input files (including the GIArules.xml and NLCrules.xml files) in your input folder (e.g. folder containing OpenNLC.exe)
- Execute the program based upon the command line requirements
The OpenNLC "examples" archive contains prominent examples of OpenNLC usage (along with respective input files);
- OpenNLCexamples-26October2016a.zip - OpenNLC Examples
e.g.
Linux EL5/EL6/EL7/UB14/UB16:
Examples using NLP input from Stanford Parser + Stanford Core NLP;
./OpenNLC.exe -lrp -lrpfolder "/home/systemusername/source/LRPdata" -ipreprocess -inlc inputText.nlc -oall semanticNet -nlprelation 2 -nlpfeature 1 -nlprelationq 2 -nlpfeatureq 1 -nlprelexfolder "/home/systemusername/relex/relex-1.4.0" -nlpstanfordcorenlpfolder "/home/systemusername/stanford/coreNLP/stanford-corenlp-full-2016-10-31" -nlpstanfordparserfolder "/home/systemusername/stanford/parser/stanford-parser-full-2016-10-31" -notshow
./OpenNLC.exe -lrpfolder "/home/systemusername/source/LRPdata" -ipreprocess -inlcp inputFileList.nlcp -oall semanticNet -nlprelation 2 -nlpfeature 1 -nlprelationq 2 -nlpfeatureq 1 -nlprelexfolder "/home/systemusername/relex/relex-1.4.0" -nlpstanfordcorenlpfolder "/home/systemusername/stanford/coreNLP/stanford-corenlp-full-2016-10-31" -nlpstanfordparserfolder "/home/systemusername/stanford/parser/stanford-parser-full-2016-10-31" -notshow
./OpenNLC.exe -lrpfolder "/home/systemusername/source/LRPdata" -ipreprocess -inlc inputText.nlc -oall semanticNet -nlprelation 2 -nlpfeature 1 -nlprelationq 2 -nlpfeatureq 1 -nlprelexfolder "/home/systemusername/relex/relex-1.4.0" -nlpstanfordcorenlpfolder "/home/systemusername/stanford/coreNLP/stanford-corenlp-full-2016-10-31" -nlpstanfordparserfolder "/home/systemusername/stanford/parser/stanford-parser-full-2016-10-31" -notshow
Windows XP/7/8/10:
Examples using NLP input from Stanford Parser + Stanford Core NLP;
OpenNLC.exe -lrp -lrpfolder "C:/Files/source/LRPdata" -ipreprocess -inlc inputText.nlc -oall semanticNet -nlprelation 2 -nlpfeature 1 -nlprelationq 2 -nlpfeatureq 1 -nlprelexfolder "C:/Files/relex/relex-1.4.0" -nlpstanfordcorenlpfolder "C:/Files/stanford/coreNLP/stanford-corenlp-full-2016-10-31" -nlpstanfordparserfolder "C:/Files/stanford/parser/stanford-parser-full-2016-10-31" -notshow
OpenNLC.exe -lrpfolder "C:/Files/source/LRPdata" -ipreprocess -inlcp inputFileList.nlcp -oall semanticNet -nlprelation 2 -nlpfeature 1 -nlprelationq 2 -nlpfeatureq 1 -nlprelexfolder "C:/Files/relex/relex-1.4.0" -nlpstanfordcorenlpfolder "C:/Files/stanford/coreNLP/stanford-corenlp-full-2016-10-31" -nlpstanfordparserfolder "C:/Files/stanford/parser/stanford-parser-full-2016-10-31" -notshow
OpenNLC.exe -lrpfolder "C:/Files/source/LRPdata" -ipreprocess -inlc inputText.nlc -oall semanticNet -nlprelation 2 -nlpfeature 1 -nlprelationq 2 -nlpfeatureq 1 -nlprelexfolder "C:/Files/relex/relex-1.4.0" -nlpstanfordcorenlpfolder "C:/Files/stanford/coreNLP/stanford-corenlp-full-2016-10-31" -nlpstanfordparserfolder "C:/Files/stanford/parser/stanford-parser-full-2016-10-31" -notshow
Usage: OpenNLC.exe [options]
where options are any of the following
-inlc [string] : plain text .nlc input filename to be parsed by NLC/GIA (def: inputText.nlc)
#ifdef NLC_SUPPORT_INPUT_FUNCTION_LISTS_EXPLICIT_FROM_DEDICATED_FILE
-inlcp [string] : file list (new line delimited) referencing nlc file names (def: inputFileList.nlcp)
#endif
#ifdef NLC_USE_PREPROCESSOR
-ipreprocess : input file(s) will be preprocessed, supporting condition block indentation (eg if the ball is red\\n\\tthe stars are bright\\n\\tthe cat is happy) and multiple functions (delimited by 'function [functionSubject#]functionName)[+functionObject]
#endif
#ifdef NLC_API
-api : expose third party API (wrap with NLC code) using doxygen xml output"
-apisourcefolder [string] : location of third party API source code (def: /home/systemusername/source/doxygen)"
-apiclasslist [string] : third party API class list (def: apiClassList.txt)"
#endif
-onlprel [string] : NLP dependency relation parser .xml intermediary output filename (def: inputNLPrelation.xml)
-onlptag [string] : NLP feature tag parser .xml intermediary output filename (def: inputNLPfeature.xml)
-oxml [string] : semantic network definition .xml output filename (def: semanticNet.xml)
-ocxl [string] : semantic network display .cxl vector graphics output filename (def: semanticNet.cxl)
-osvg [string] : semantic network display .svg 2D vector graphics output filename (def: semanticNet.svg)
-oldr [string] : semantic network display .ldr 3D vector graphics output filename (def: semanticNet.ldr)
-oppm [string] : semantic network display .ppm raster graphics output filename (def: semanticNet.ppm)
-ocff [string] : NLP parser generated .cff output filename (def: outputNLP.cff)
-oall [string] : semantic network display xml/.svg/.ldr/.ppm default generic output filename (def: semanticNet)
-show : display output in opengl
-width [int] : raster graphics width in pixels (def: 640)
-height [int] : raster graphics height in pixels (def: 480)
-nlprelation [int] : NLP dependency relation parser to be executed by GIA (0 - Relex, 1 - Stanford Core NLP, 2 - Stanford Parser [def])
-nlpfeature [int] : NLP feature parser to be executed by GIA (0 - Relex, 1 - Stanford Core NLP [def], 2 - Stanford Parser (ie, none))
-nlpcompmode [int] : sets Relex into Stanford compatibility mode (0 - off [def], 1 - (assumes) Relex dependency relations are(/were) generated by Relex parser in Stanford compatibility mode, 2 - assumes Relex dependency relations were generated by GIA in cff) [EXPERIMENTAL]
#ifdef GIA_USE_DATABASE
-dbread : read from database (GIA knowledge base) [improves referencing capacity]
-dbwrite : write to database (GIA knowledge base) [saves knowledge]
-dbfolder : database base folder path (def: /home/systemusername/source/GIAKBdatabase)
#endif
#ifdef GIA_SEMANTIC_PARSER
-dbsemanticparserfolder : direct semantic parser (corpus or optimised) database base folder path (def: /home/systemusername/source/GIAsemanticparserdatabase)"
#endif
#ifdef GIA_PREPROCESSOR
-lrp : language reduction preprocessor
-olrptxt [string] : plain text .txt output filename with GIA language reduction preprocessor applied (def: inputTextWithLRP.txt)
-lrpfolder : folder of LRP data files (list of multiword verbs, multiword prepositions etc) (def: same as exe)
#endif
#ifdef USE_WORDNET
-syndet : wordnet synonymn detection (0 - off, 1 - during queries only, 2 - during referencing and queries [def])"
#endif
-inputfolder [string] : input directory name for input files (def: same as exe)
-nlprelexfolder [string] : directory name for Relex (def: same as exe)
-nlpstanfordcorenlpfolder [string] : directory name for Stanford Parser (def: same as exe)
-nlpstanfordparserfolder [string] : directory name for Stanford CoreNLP (def: same as exe)
#ifdef GIA_NLP_CLIENT_SERVER
-nlpclient : execute NLP as client (requires server to be already started)"
#endif
-outputfolder [string] : output directory name for temporary and output files (def: same as exe)
-version : print version
This program performs NLC (Natural Language Compiler) operations - generates computer code (eg C++) from natural language statements (it currently requires to be compiled with GIA source code).
inputText.txt:
An apple is near a pie. The pie is next to a bike.
output1.cpp:
#include <string>
#include <vector>
#include <unordered_map>
#include <utility>
using namespace std;
class appleClass
{
public:
appleClass(void);
~appleClass(void);
string name;
unordered_map<nearClass*, pieClass*> nearClasspieClassConditionList;
};
appleClass::appleClass(void)
{
name = "apple";
};
class nearClass
{
public:
nearClass(void);
~nearClass(void);
string name;
};
nearClass::nearClass(void)
{
name = "near";
};
class pieClass
{
public:
pieClass(void);
~pieClass(void);
string name;
unordered_map<next_toClass*, bikeClass*> next_toClassbikeClassConditionList;
};
pieClass::pieClass(void)
{
name = "pie";
};
class next_toClass
{
public:
next_toClass(void);
~next_toClass(void);
string name;
};
next_toClass::next_toClass(void)
{
name = "next_to";
};
class bikeClass
{
public:
bikeClass(void);
~bikeClass(void);
string name;
};
bikeClass::bikeClass(void)
{
name = "bike";
};
void NLCexample1Function(NLCexample1Class* NLCexample1)
{
vector<appleClass*> apple1PropertyList;
appleClass* apple1 = new appleClass();
apple1PropertyList.push_back(apple1);
for(vector<appleClass*> ::iterator iter1 = apple1PropertyList.begin(); iter1 < apple1PropertyList.end(); iter1++)
{
appleClass* apple1 = *iter1;
pieClass* pie1 = new pieClass();
nearClass* near1 = new nearClass();
apple1->nearClasspieClassConditionList.insert(pair<nearClass*, pieClass*>(near1, pie1));
}
for(vector<appleClass*> ::iterator iter1 = apple1PropertyList.begin(); iter1 < apple1PropertyList.end(); iter1++)
{
appleClass* apple1 = *iter1;
for(unordered_map<nearClass*, pieClass*> ::iterator iter2 = apple1->nearClasspieClassConditionList.begin(); iter2 != apple1->nearClasspieClassConditionList.end(); iter2++)
{
pieClass* pie1 = iter2->second;
bikeClass* bike1 = new bikeClass();
next_toClass* next_to1 = new next_toClass();
pie1->next_toClassbikeClassConditionList.insert(pair<next_toClass*, bikeClass*>(next_to1, bike1));
}
}
}
NLCfunctionList.txt:
main dog#ride+bike
main:
Blue dogs are fat. A blue dog rides the bike.
dog#ride+bike:
The dog's energy decreases.
output2.cpp:
#include <string>
#include <vector>
#include <unordered_map>
#include <utility>
using namespace std;
class blueClass
{
public:
blueClass(void);
~blueClass(void);
string name;
};
blueClass::blueClass(void)
{
name = "blue";
};
class dogClass
{
public:
dogClass(void);
~dogClass(void);
string name;
vector<blueClass*> blueClassPropertyList;
vector<fatClass*> fatClassPropertyList;
vector<energyClass*> energyClassPropertyList;
void rideFunction(rideClass* ride1, bikeClass* bike1);
};
dogClass::dogClass(void)
{
name = "dog";
};
class fatClass
{
public:
fatClass(void);
~fatClass(void);
string name;
};
fatClass::fatClass(void)
{
name = "fat";
};
class rideClass
{
public:
rideClass(void);
~rideClass(void);
string name;
};
rideClass::rideClass(void)
{
name = "ride";
};
class bikeClass
{
public:
bikeClass(void);
~bikeClass(void);
string name;
};
bikeClass::bikeClass(void)
{
name = "bike";
};
class energyClass
{
public:
energyClass(void);
~energyClass(void);
string name;
void decreaseFunction(decreaseClass* decrease1);
};
energyClass::energyClass(void)
{
name = "energy";
};
class decreaseClass
{
public:
decreaseClass(void);
~decreaseClass(void);
string name;
};
decreaseClass::decreaseClass(void)
{
name = "decrease";
};
void mainFunction(vector<bikeClass*> bike1PropertyList, mainClass* main)
{
vector<rideClass*> ride1PropertyList;
rideClass* ride1 = new rideClass();
ride1PropertyList.push_back(ride1);
vector<dogClass*> dog2PropertyList;
dogClass* dog2 = new dogClass();
dog2PropertyList.push_back(dog2);
for(vector<dogClass*> ::iterator iter1 = dog2PropertyList.begin(); iter1 < dog2PropertyList.end(); iter1++)
{
dogClass* dog2 = *iter1;
blueClass* blue2 = new blueClass();
dog2->blueClassPropertyList.push_back(blue2);
}
for(vector<dogClass*> ::iterator iter1 = dog2PropertyList.begin(); iter1 < dog2PropertyList.end(); iter1++)
{
dogClass* dog2 = *iter1;
fatClass* fat1 = new fatClass();
dog2->fatClassPropertyList.push_back(fat1);
}
for(vector<dogClass*> ::iterator iter1 = dog2PropertyList.begin(); iter1 < dog2PropertyList.end(); iter1++)
{
dogClass* dog2 = *iter1;
for(vector<bikeClass*> ::iterator iter2 = bike1PropertyList.begin(); iter2 < bike1PropertyList.end(); iter2++)
{
bikeClass* bike1 = *iter2;
for(vector<blueClass*> ::iterator iter3 = dog2->blueClassPropertyList.begin(); iter3 < dog2->blueClassPropertyList.end(); iter3++)
{
blueClass* blue2 = *iter3;
dog2->rideFunction(ride1, bike1);
}
}
}
}
void dogClass::rideFunction(rideClass* ride, bikeClass* bike)
{
dogClass* dog1 = this;
vector<dogClass*> dog1PropertyList;
dog1PropertyList.push_back(dog1);
vector<decreaseClass*> decrease1PropertyList;
decreaseClass* decrease1 = new decreaseClass();
decrease1PropertyList.push_back(decrease1);
for(vector<dogClass*> ::iterator iter1 = dog1PropertyList.begin(); iter1 < dog1PropertyList.end(); iter1++)
{
dogClass* dog1 = *iter1;
for(vector<energyClass*> ::iterator iter2 = dog1->energyClassPropertyList.begin(); iter2 < dog1->energyClassPropertyList.end(); iter2++)
{
energyClass* energy1 = *iter2;
energy1->decreaseFunction(decrease1);
}
}
}