Skip to content

Examples

BAI Research edited this page Jun 5, 2022 · 8 revisions

Usage Instructions

  • 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

Usage Example(s)

The OpenNLC "examples" archive contains prominent examples of OpenNLC usage (along with respective input files);

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

Formal Usage

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).

Basic Examples (release-27May2014)

Example 1

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));
		}
	}
}

Example 2 (multiple functions)

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);
		}
	}
}
Clone this wiki locally