initial commit

This commit is contained in:
2026-03-22 03:21:45 +02:00
commit 897fea9f4e
15431 changed files with 2548840 additions and 0 deletions

View File

@@ -0,0 +1 @@
cmd_Release/jsjibonlu.node := c++ -bundle -stdlib=libc++ -undefined dynamic_lookup -Wl,-no_pie -Wl,-search_paths_first -mmacosx-version-min=10.7 -arch x86_64 -L./Release -o Release/jsjibonlu.node Release/obj.target/jsjibonlu/src/jsjibonluapi.o Release/obj.target/jsjibonlu/src/js_fst.o Release/obj.target/jsjibonlu/src/js_sentence_parser.o Release/obj.target/jsjibonlu/src/js_sentence_generator.o Release/obj.target/jsjibonlu/src/v8_engine.o -L../deps/darwin/x64/lib -ljibonlu -lfst -lPocoJSON -lPocoFoundation -lPocoUtil -lPocoXML

View File

@@ -0,0 +1,32 @@
cmd_Release/obj.target/jsjibonlu/src/js_fst.o := c++ '-DNODE_GYP_MODULE_NAME=jsjibonlu' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rprieto/.node-gyp/iojs-1.3.0/include/node -I/Users/rprieto/.node-gyp/iojs-1.3.0/src -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/uv/include -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include -I../deps/include -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -std=c++11 -stdlib=libc++ -fexceptions -MMD -MF ./Release/.deps/Release/obj.target/jsjibonlu/src/js_fst.o.d.raw -c -o Release/obj.target/jsjibonlu/src/js_fst.o ../src/js_fst.cpp
Release/obj.target/jsjibonlu/src/js_fst.o: ../src/js_fst.cpp \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_buffer.h \
../deps/include/jibonluapi/jibonluapi.h \
../deps/include/jibonluapi/stats.h \
../deps/include/jibonluapi/parameters.h \
../deps/include/jibonluapi/error_handling.h \
../deps/include/jibonluapi/exceptions.h ../src/js_error_handling.h \
../src/js_fst.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h \
../src/iojs_now_macros.h
../src/js_fst.cpp:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_buffer.h:
../deps/include/jibonluapi/jibonluapi.h:
../deps/include/jibonluapi/stats.h:
../deps/include/jibonluapi/parameters.h:
../deps/include/jibonluapi/error_handling.h:
../deps/include/jibonluapi/exceptions.h:
../src/js_error_handling.h:
../src/js_fst.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h:
../src/iojs_now_macros.h:

View File

@@ -0,0 +1,30 @@
cmd_Release/obj.target/jsjibonlu/src/js_sentence_generator.o := c++ '-DNODE_GYP_MODULE_NAME=jsjibonlu' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rprieto/.node-gyp/iojs-1.3.0/include/node -I/Users/rprieto/.node-gyp/iojs-1.3.0/src -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/uv/include -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include -I../deps/include -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -std=c++11 -stdlib=libc++ -fexceptions -MMD -MF ./Release/.deps/Release/obj.target/jsjibonlu/src/js_sentence_generator.o.d.raw -c -o Release/obj.target/jsjibonlu/src/js_sentence_generator.o ../src/js_sentence_generator.cpp
Release/obj.target/jsjibonlu/src/js_sentence_generator.o: \
../src/js_sentence_generator.cpp \
../deps/include/jibonluapi/jibonluapi.h \
../deps/include/jibonluapi/stats.h \
../deps/include/jibonluapi/parameters.h \
../deps/include/jibonluapi/error_handling.h ../src/js_fst.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h \
../src/iojs_now_macros.h ../src/js_error_handling.h \
../src/js_sentence_generator.h
../src/js_sentence_generator.cpp:
../deps/include/jibonluapi/jibonluapi.h:
../deps/include/jibonluapi/stats.h:
../deps/include/jibonluapi/parameters.h:
../deps/include/jibonluapi/error_handling.h:
../src/js_fst.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h:
../src/iojs_now_macros.h:
../src/js_error_handling.h:
../src/js_sentence_generator.h:

View File

@@ -0,0 +1,32 @@
cmd_Release/obj.target/jsjibonlu/src/js_sentence_parser.o := c++ '-DNODE_GYP_MODULE_NAME=jsjibonlu' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rprieto/.node-gyp/iojs-1.3.0/include/node -I/Users/rprieto/.node-gyp/iojs-1.3.0/src -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/uv/include -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include -I../deps/include -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -std=c++11 -stdlib=libc++ -fexceptions -MMD -MF ./Release/.deps/Release/obj.target/jsjibonlu/src/js_sentence_parser.o.d.raw -c -o Release/obj.target/jsjibonlu/src/js_sentence_parser.o ../src/js_sentence_parser.cpp
Release/obj.target/jsjibonlu/src/js_sentence_parser.o: \
../src/js_sentence_parser.cpp ../deps/include/jibonluapi/jibonluapi.h \
../deps/include/jibonluapi/stats.h \
../deps/include/jibonluapi/parameters.h \
../deps/include/jibonluapi/error_handling.h ../src/js_fst.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h \
../src/iojs_now_macros.h ../src/js_error_handling.h \
../src/js_sentence_parser.h ../src/v8_engine.h \
../deps/include/jibonluapi/exceptions.h
../src/js_sentence_parser.cpp:
../deps/include/jibonluapi/jibonluapi.h:
../deps/include/jibonluapi/stats.h:
../deps/include/jibonluapi/parameters.h:
../deps/include/jibonluapi/error_handling.h:
../src/js_fst.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h:
../src/iojs_now_macros.h:
../src/js_error_handling.h:
../src/js_sentence_parser.h:
../src/v8_engine.h:
../deps/include/jibonluapi/exceptions.h:

View File

@@ -0,0 +1,29 @@
cmd_Release/obj.target/jsjibonlu/src/jsjibonluapi.o := c++ '-DNODE_GYP_MODULE_NAME=jsjibonlu' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rprieto/.node-gyp/iojs-1.3.0/include/node -I/Users/rprieto/.node-gyp/iojs-1.3.0/src -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/uv/include -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include -I../deps/include -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -std=c++11 -stdlib=libc++ -fexceptions -MMD -MF ./Release/.deps/Release/obj.target/jsjibonlu/src/jsjibonluapi.o.d.raw -c -o Release/obj.target/jsjibonlu/src/jsjibonluapi.o ../src/jsjibonluapi.cpp
Release/obj.target/jsjibonlu/src/jsjibonluapi.o: ../src/jsjibonluapi.cpp \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h \
../deps/include/jibonluapi/jibonluapi.h \
../deps/include/jibonluapi/stats.h \
../deps/include/jibonluapi/parameters.h \
../deps/include/jibonluapi/error_handling.h ../src/js_fst.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h \
../src/iojs_now_macros.h ../src/js_sentence_parser.h \
../src/js_sentence_generator.h
../src/jsjibonluapi.cpp:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h:
../deps/include/jibonluapi/jibonluapi.h:
../deps/include/jibonluapi/stats.h:
../deps/include/jibonluapi/parameters.h:
../deps/include/jibonluapi/error_handling.h:
../src/js_fst.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_object_wrap.h:
../src/iojs_now_macros.h:
../src/js_sentence_parser.h:
../src/js_sentence_generator.h:

View File

@@ -0,0 +1,24 @@
cmd_Release/obj.target/jsjibonlu/src/v8_engine.o := c++ '-DNODE_GYP_MODULE_NAME=jsjibonlu' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rprieto/.node-gyp/iojs-1.3.0/include/node -I/Users/rprieto/.node-gyp/iojs-1.3.0/src -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/uv/include -I/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include -I../deps/include -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=gnu++0x -fno-rtti -fno-exceptions -fno-threadsafe-statics -std=c++11 -stdlib=libc++ -fexceptions -MMD -MF ./Release/.deps/Release/obj.target/jsjibonlu/src/v8_engine.o.d.raw -c -o Release/obj.target/jsjibonlu/src/v8_engine.o ../src/v8_engine.cpp
Release/obj.target/jsjibonlu/src/v8_engine.o: ../src/v8_engine.cpp \
../src/v8_engine.h /Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h \
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h \
../deps/include/jibonluapi/exceptions.h \
../deps/include/jibonluapi/error_handling.h \
../deps/include/jibonluapi/jibonluapi.h \
../deps/include/jibonluapi/stats.h \
../deps/include/jibonluapi/parameters.h
../src/v8_engine.cpp:
../src/v8_engine.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8-version.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/deps/v8/include/v8config.h:
/Users/rprieto/.node-gyp/iojs-1.3.0/src/node_version.h:
../deps/include/jibonluapi/exceptions.h:
../deps/include/jibonluapi/error_handling.h:
../deps/include/jibonluapi/jibonluapi.h:
../deps/include/jibonluapi/stats.h:
../deps/include/jibonluapi/parameters.h:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,15 @@
factory:city_state
factory:date
factory:state
factory:time
factory:yes_no
factory:timer
factory:world_city_country
factory:country
factory:first_name
factory:last_name
factory:music_genre
factory:digits
factory:year
factory:canada_city_province
factory:canada_province

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,4 @@
a
an
that
the

View File

@@ -0,0 +1 @@
factory:yes_no

Binary file not shown.

View File

@@ -0,0 +1 @@
factory:yes_no

Binary file not shown.

679
parser/lib/e2e_tests.js Normal file
View File

@@ -0,0 +1,679 @@
var fs = require('fs');
/********************************/
/* test fuctions */
/********************************/
function check_throw(a) {
if (!does_it_throw(a))
throw new Error('Statement did not throw, but its expected to throw');
}
function check_no_throw(a) {
if (does_it_throw(a))
throw new Error('statement is not expected to throw, but throwed');
}
function does_it_throw(a) {
var throwed = false;
try {
a();
throwed = false;
} catch(e) {
throwed = true;
}
return throwed;
}
function check_parse_ref_json(parses_json, ref_json) {
ref_obj = JSON.parse(ref_json);
parses_obj = JSON.parse(parses_json);
ref_cmp = JSON.stringify(ref_obj);
parses_cmp = JSON.stringify(parses_obj);
if (ref_cmp != parses_cmp)
throw new Error('Expecting reference to be the same as parse, but they were different')
}
/********************************/
/* Initialization */
/********************************/
var argv = process.argv;
// checking for command line arguments
if (argv.length != 4) {
console.log('Incorrect number of command line arguments');
console.log('Usage: node e2e_tests.js full_path_to_dir_containing_jsjibonlu full_path_to_datadir')
console.log('Example: node e2e_tests.js /Users/my_user/my_directory_containig_jsjibonlu/ /Users/my_user/my_directory/data');
process.exit(1);
}
// gteting install prefix
var install_prefix = argv[2];
var datadir = argv[3];
// Loading jsjibonlu library
var jsjibonlu = require(install_prefix + '/jsjibonlu');
/********************************/
/* Compiling tests */
/********************************/
// good rule format
var grm = 'TopRule = aa;'
var f = function() {jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");};
check_no_throw(f);
// bad number of argumets
var f = function() {jsjibonlu.compile_fst_from_text(grm);};
check_throw(f);
// bad number of argumets
var f = function() {jsjibonlu.compile_fst_from_text("handle:my_handle");};
check_throw(f);
// bad argument types
var f = function() {jsjibonlu.compile_fst_from_text("handle:my_handle", grm);};
check_throw(f);
// bad argument types
var f = function() {jsjibonlu.compile_fst_from_text(grm, "handle:my_handle", 3);};
check_throw(f);
// bad argument types
var f = function() {jsjibonlu.compile_fst_from_text(grm, "handle:my_handle", "/filepath/file.rule");};
check_no_throw(f);
// bad rule format
var f = function() {jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");};
grm = 'TopRule = aa';
check_throw(f);
// referencing factory rule
grm = 'TopRule = $factory:date;'
check_no_throw(f)
/********************************/
/* Parsing */
/********************************/
// bad number of arguments
grm = "TopRule = aa{nl='aa'};";
txt = "aaa"
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst, fst);};
check_throw(f)
// incorrect argument type
// bad number of arguments
grm = "TopRule = aa{nl='aa'};";
txt = "aaa"
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser('a');};
check_throw(f)
// correct call
grm = "TopRule = aa{nl='aa'};";
txt = "aaa"
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst);};
check_no_throw(f)
// incorrect argument type
// bad number of arguments
grm = "TopRule = aa{nl='aa'};";
txt = "aaa";
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst);parses_json = parser.parse_sentence(txt,txt);};
check_throw(f)
// incorrect argument type
grm = "TopRule = aa{nl='aa'};";
txt = "aaa";
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst);parses_json = parser.parse_sentence(fst);};
check_throw(f)
// correct parse
grm = "TopRule = aa{nl='aa'};";
txt = "aaa";
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst);parses_json = parser.parse_sentence(txt)};
check_no_throw(f)
// empty parse
grm = "TopRule = aa{nl='aa'};";
txt = "aaa";
parses_json = '';
ref_json = '[]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_no_throw(f)
check_parse_ref_json(parses_json, ref_json);
// some parse
grm = "TopRule = aa{nl='aa'};";
txt = "aa";
parses_json = '';
ref_json = '[{"Input":"aa", "NLParse":{"nl":"aa"}, "heuristic_score":3, "index":0}]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_no_throw(f)
check_parse_ref_json(parses_json, ref_json);
// error with factory, unset data dir
grm = "TopRule = $factory:date{date=date._date_nl};";
txt = "aa";
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_throw(f)
// setting the dat_dir
jsjibonlu.remove_from_memory('handle:my_handle');
jsjibonlu.set_data_dir(datadir);
/********************************/
/* num_fsts_in_mem */
/********************************/
// incorrect call
var f = function() {num_of_fsts_at_start = jsjibonlu.num_fsts_in_mem(3);}
check_throw(f);
// incorrect call
var f = function() {num_of_fsts_at_start = jsjibonlu.num_fsts_in_mem('hi');}
check_throw(f);
// correct call
var f = function() {num_of_fsts_at_start = jsjibonlu.num_fsts_in_mem();}
check_no_throw(f);
// error with unknown factory, data dir is set
grm = "TopRule = $factory:datedate{date=datedate._date_nl};";
txt = "aa";
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_throw(f)
// error with known factory, unknown nl var
grm = "TopRule = $factory:date{mydate=b};";
txt = "july 29th 1995";
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt);};
check_throw(f);
// no error
grm = "TopRule = $factory:date{date=date._date_nl};";
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_no_throw(f)
check_parse_ref_json(parses_json, ref_json);
/********************************/
/* saving fst */
/********************************/
// wrong number of arguments
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");fst.save_fst("my_fst_file.fst", 1)};
check_throw(f)
// wrong type of argument
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");fst.save_fst(1)};
check_throw(f)
// correct call
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");fst.save_fst("my_fst_file.fst")};
check_no_throw(f)
/********************************/
/* opening fst file */
/********************************/
// incorrect number of arguments
var f = function() {fst = jsjibonlu.read_fst_from_uri("file:my_fst_file.fst", 1);};
check_throw(f)
// wrong type of arguments
var f = function() {fst = jsjibonlu.read_fst_from_uri(1);};
check_throw(f)
// non existing file type of arguments
var f = function() {fst = jsjibonlu.read_fst_from_uri("file:my_fst_file2.fst");};
check_throw(f)
// correct call
var f = function() {fst = jsjibonlu.read_fst_from_uri("file:my_fst_file.fst");};
check_no_throw(f)
/********************************/
/* parsingfrom fst file */
/********************************/
// correct call
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
var f = function() {fst = jsjibonlu.read_fst_from_uri("file:my_fst_file.fst");parser = jsjibonlu.build_sentence_parser(fst);parses_json = parser.parse_sentence(txt);};
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
/********************************/
/* parsingfrom fst in memory */
/********************************/
// trying to parse from a removed handle from memory
grm = "TopRule = $factory:date{date=date._date_nl};";
txt = "july 29th 1995"
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");fst1 = jsjibonlu.read_fst_from_uri("handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst1);parses_json = parser.parse_sentence(txt);};
check_no_throw(f)
check_parse_ref_json(parses_json, ref_json);
/************************************/
/* parsing several fsts in parallel */
/************************************/
// correct call
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}, {"Input":"july 29th 1995", "NLParse":{"july":"july"}, "heuristic_score":5, "index":1}]';
second_rule = 'TopRule = $* july {july = \'july\'} $*;';
var f = function() {fst1 = jsjibonlu.read_fst_from_uri("file:my_fst_file.fst");fst2 = jsjibonlu.compile_fst_from_text(second_rule, "handle:my_handle");arr=[fst1, fst2];parser = jsjibonlu.build_sentence_parser(arr);parses_json = parser.parse_sentence(txt);};
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
/************************************/
/* reading from fst file */
/************************************/
// correct call
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file("./my_fst_file.fst", "handle:my_handle_from_fst_file");
parser = jsjibonlu.build_sentence_parser(fst);
parses_json = parser.parse_sentence(txt);
};
f();
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
// correct call, testing handle
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file("./my_fst_file.fst", "handle:my_handle_from_fst_file_2");
fst_2 = jsjibonlu.read_fst_from_uri("handle:my_handle_from_fst_file_2");
parser = jsjibonlu.build_sentence_parser(fst_2);
parses_json = parser.parse_sentence(txt);
};
f();
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
// wrong number of arguments
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file("./my_fst_file.fst");
};
check_throw(f);
// wrong number of argumets
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file("./my_fst_file.fst", "handle:my_handle_fst_file_3", "handle:my_handle_fst_file_3");
};
check_throw(f);
// file that does not exist
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file("./my_fst_file_does_not_exist.fst", "handle:my_handle_fst_file_3");
};
check_throw(f);
// wrong type
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file(3, "handle:my_handle_fst_file_3");
};
check_throw(f);
// wrong type
var f = function() {
fst = jsjibonlu.load_fst_from_fst_file("./my_fst_file.fst", 3);
};
check_throw(f);
/************************************/
/* parsing with union fst */
/************************************/
// correct call
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995","union_original_fst_name":"file:my_fst_file.fst"}, "heuristic_score":15, "index":0}]';
second_rule = 'TopRule = $* july {july = \'july\'} $*;';
var f = function() {
fst2 = jsjibonlu.compile_fst_from_text(second_rule, "handle:my_handle");
arr=["file:my_fst_file.fst", "handle:my_handle"];
union_fst = jsjibonlu.union_fst(arr, "handle:my_union_handle");
parser = jsjibonlu.build_sentence_parser(union_fst);
parses_json = parser.parse_sentence(txt);
};
f();
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
// correct call, testing handle
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995", "union_original_fst_name":"file:my_fst_file.fst"}, "heuristic_score":15, "index":0}]';
second_rule = 'TopRule = $* july {july = \'july\'} $*;';
var f = function() {
fst2 = jsjibonlu.compile_fst_from_text(second_rule, "handle:my_handle");
arr=["file:my_fst_file.fst", "handle:my_handle"];
union_fst = jsjibonlu.union_fst(arr, "handle:my_union_handle");
union_fst_2 = jsjibonlu.read_fst_from_uri("handle:my_union_handle");
parser = jsjibonlu.build_sentence_parser(union_fst_2);
parses_json = parser.parse_sentence(txt);
};
f();
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
// wrong number of arguments
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
second_rule = 'TopRule = $* july {july = \'july\'} $*;';
var f = function() {
fst2 = jsjibonlu.compile_fst_from_text(second_rule, "handle:my_handle");
arr=["file:my_fst_file.fst", "handle:my_handle"];
union_fst = jsjibonlu.union_fst(arr);
parser = jsjibonlu.build_sentence_parser(union_fst);
parses_json = parser.parse_sentence(txt);
};
check_throw(f);
// incorrect argument
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
second_rule = 'TopRule = $* july {july = \'july\'} $*;';
var f = function() {
fst2 = jsjibonlu.compile_fst_from_text(second_rule, "handle:my_handle");
arr=["file:my_fst_file.fst", "handle:my_handle"];
union_fst = jsjibonlu.union_fst(arr, arr);
parser = jsjibonlu.build_sentence_parser(union_fst);
parses_json = parser.parse_sentence(txt);
};
check_throw(f);
// incorrect argument
txt = "july 29th 1995";
parses_json = '';
ref_json = '[{"Input":"july 29th 1995", "NLParse":{"date":"07\\/29\\/1995"}, "heuristic_score":15, "index":0}]';
second_rule = 'TopRule = $* july {july = \'july\'} $*;';
var f = function() {
fst2 = jsjibonlu.compile_fst_from_text(second_rule, "handle:my_handle");
arr=["file:my_fst_file.fst", "handle:my_handle"];
union_fst = jsjibonlu.union_fst(1, "handle:my_union_handle");
parser = jsjibonlu.build_sentence_parser(union_fst);
parses_json = parser.parse_sentence(txt);
};
check_throw(f);
/************************************/
/* dumping fst in array of ints */
/************************************/
// correct call
rule = 'TopRule = $* july {july = \'july\'} $*;';
fs = require('fs');
var f = function() {fst1 = jsjibonlu.compile_fst_from_text(rule, "handle:my_handle");
fst1.save_fst("file-to-cmp1.fst");
arr = fst1.to_buffer();
saved_arr = fs.readFileSync("./file-to-cmp1.fst")
if (arr.length != saved_arr.length)
throw new Error("Length of buffers is different");
for (i = 0; i < arr.length; ++i) {
if (arr[i] != saved_arr[i])
throw new Error("Buffers differ");
}
};
check_no_throw(f);
// wrong number of arguments
rule = 'TopRule = $* july {july = \'july\'} $*;';
fs = require('fs');
var f = function() {fst1 = jsjibonlu.compile_fst_from_text(rule, "handle:my_handle");
fst1.save_fst("file-to-cmp1.fst");
arr = new Buffer(fst1.to_buffer("hello"));
saved_arr = fs.readFileSync("./file-to-cmp1.fst")
if (arr.length != saved_arr.length)
throw new Error("Length of buffers is different");
for (i = 0; i < arr.length; ++i) {
if (arr[i] != saved_arr[i])
throw new Error("Buffers differ");
}
};
check_throw(f);
/*******************************************/
/* reading handle rule inside another rule */
/*******************************************/
grm = "TopRule = $handle:hndl{nl=hndl._nl};";
hndl = "TopRule = julius{_nl='julius'}|marcus{_nl='marcus'};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");fst1 = jsjibonlu.compile_fst_from_text(hndl, "handle:hndl");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
txt = "julius";
parses_json = '';
ref_json = '[{"Input":"julius", "NLParse":{"nl":"julius"}, "heuristic_score":7, "index":0}]';
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
txt = "marcus";
parses_json = '';
ref_json = '[{"Input":"marcus", "NLParse":{"nl":"marcus"}, "heuristic_score":7, "index":0}]';
check_no_throw(f);
check_parse_ref_json(parses_json, ref_json);
/********************************/
/* Removing fst from memory */
/********************************/
// wrong number of arguments
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");jsjibonlu.remove_from_memory("handle:my_handle", 1)};
check_throw(f)
// wrong type of argument
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");jsjibonlu.remove_from_memory(1)};
check_throw(f)
// correct call
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");jsjibonlu.remove_from_memory("handle:my_handle")};
check_no_throw(f)
// trying to parse from a removed handle from memory
grm = "TopRule = $factory:date{date=date._date_nl};";
txt = "july 29th 1995"
parses_json = '';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");jsjibonlu.remove_from_memory("handle:my_handle");fst2 = jsjibonlu.read_fst_from_uri("handle:my_handle");};
check_throw(f)
/********************************/
/* syntax check */
/********************************/
// wrong number of arguments
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {jsjibonlu.syntax_check(grm, "handle:my_handle");};
check_throw(f)
// wrong type of argument
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {jsjibonlu.syntax_check(1);};
check_throw(f)
// correct call
grm = "TopRule = $factory:date{date=date._date_nl};";
var f = function() {jsjibonlu.syntax_check(grm);};
check_no_throw(f)
// bad argument types
var f = function() {jsjibonlu.syntax_check(grm, 3);};
check_throw(f);
// bad argument types
var f = function() {jsjibonlu.syntax_check(grm, "/filepath/file.rule");};
check_no_throw(f);
// with include file
grm = "TopRule = $include:./myfile.rule:my_rule;";
fs.writeFileSync("./myfile.rule","my_rule = aa;\n");
jsjibonlu.syntax_check(grm, process.cwd() + "/file.rule");
var f = function() {jsjibonlu.syntax_check(grm, process.cwd() + "/file.rule");};
check_no_throw(f);
// wrong syntax
grm = "TopRule = $factory:date{date=date._date_nl}";
var f = function() {jsjibonlu.syntax_check(grm);};
check_throw(f)
// undefined rule
grm = "TopRule = $a;"
var f = function() {jsjibonlu.syntax_check(grm);};
check_throw(f)
/********************************/
/* fst error behavior */
/********************************/
// Wrong number of arguments
var f = function() {jsjibonlu.set_fst_error_behavior(0);};
check_throw(f);
// Correct number of arguments
var f = function() {jsjibonlu.set_fst_error_behavior();};
check_no_throw(f);
// Opening valid fst file
var f = function() {fst = jsjibonlu.read_fst_from_uri("file:my_fst_file.fst");};
check_no_throw(f);
// Writing incorrect fst file and attempting to open it
fs.writeFile('./my_normal_text_file.fst', "hello there");
var f = function() {fst = jsjibonlu.read_fst_from_uri("file:my_normal_text_file.fst");};
console.log('**** Expected Error Message: In the next line you will see a std::cerr error message, output by openfst, but you can ignore it')
check_throw(f);
console.log('**** End of Exepcted Error Message')
/********************************/
/* javascript nl returns */
/********************************/
grm = "TopRule = $* $weather $* ;\n";
grm += "weather = weather{%nl='weather'%} {%cities=[]%} *(+(in|and|or) $city{%cities.push(this.city.nl)%});\n";
grm += "city = (palo alto){% this.nl = 'palo alto' %}|(sunnyvale){%this.nl = 'sunnyvale'%}|(los altos){%this.nl = 'los altos'%}|(cupertino){%this.nl = 'cupertino'%};";
txt = "weather in palo alto in cupertino and in sunnyvale"
ref_json = '[{"Input":"weather in palo alto in cupertino and in sunnyvale", "NLParse":{"nl":"weather","cities":["palo alto","cupertino","sunnyvale"]}, "heuristic_score":51, "index":0}]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst);parses_json = parser.parse_sentence(txt);};
check_no_throw(f);
check_parse_ref_json(ref_json, parses_json);
/*******************************/
/* reset_memory */
/*******************************/
// incorrect call
var f = function() {jsjibonlu.reset_memory(3);}
check_throw(f);
// incorrect call
var f = function() {jsjibonlu.reset_memory('hi');}
check_throw(f);
// correct call
var f = function() {jsjibonlu.reset_memory()};
check_no_throw(f);
// compiling a couple of rules
grm = "TopRule = aa{nl='aa'};";
handle = 'handle:my_handle1';
var f = function() {jsjibonlu.compile_fst_from_text(grm, handle);};
check_no_throw(f);
handle = 'handle:my_handle2';
check_no_throw(f);
var f = function() {var n = jsjibonlu.num_fsts_in_mem(); if (n != num_of_fsts_at_start + 2) { throw new Error('Error in num_fsts_in_mem')} }
check_no_throw(f);
var f = function() {jsjibonlu.reset_memory(); var n = jsjibonlu.num_fsts_in_mem(); if (n != num_of_fsts_at_start) { throw new Error('Error in reset_memory')} }
check_no_throw(f);
/*******************************/
/* change_locale */
/*******************************/
// incorrect call wrong number of arguments
var f = function() {jsjibonlu.change_locale('jp-jp', 'jp-jp')};
check_throw(f);
// incorrect call wrong number of arguments
var f = function() {jsjibonlu.change_locale(3)};
check_throw(f);
// correct number of arguments incorrect locale
var f = function() {jsjibonlu.change_locale('incorrect-locale')};
check_throw(f);
// Inputing an incorrect locale causes all factory fsts to get unloaded
var f = function() {var n = jsjibonlu.num_fsts_in_mem(); if (n != 0) { throw new Error('Error in setting locale')} }
check_no_throw(f);
// Reseting datadir
var f = function() { jsjibonlu.set_data_dir(datadir);};
check_no_throw(f);
var f = function() {var n = jsjibonlu.num_fsts_in_mem(); if (n != num_of_fsts_at_start) { throw new Error('Error in setting locale and resetting data_dir')} }
check_no_throw(f);
// correct call
var f = function() {jsjibonlu.change_locale('jp-jp')};
check_no_throw(f);
// parsing
grm = "TopRule = [$factory:yes_no{% nl = this.yes_no._nl %}];";
txt = "はい";
parses_json = '';
ref_json = '[{"Input":"はい", "NLParse":{"nl":"yes"}, "heuristic_score":7, "index":0}]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_no_throw(f)
check_parse_ref_json(parses_json, ref_json);
// correct call
var f = function() {jsjibonlu.change_locale('zh-cn')};
check_no_throw(f);
// parsing
grm = "TopRule = [$factory:yes_no{% nl = this.yes_no._nl %}];";
txt = "是";
parses_json = '';
ref_json = '[{"Input":"是", "NLParse":{"nl":"yes"}, "heuristic_score":4, "index":0}]';
var f = function() {fst = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");parser = jsjibonlu.build_sentence_parser(fst); parses_json = parser.parse_sentence(txt)};
check_no_throw(f)
check_parse_ref_json(parses_json, ref_json);
// removing handle from memory
var f = function() {jsjibonlu.remove_from_memory('handle:my_handle');}
check_no_throw(f);
// bringing locale back to en-us
var f = function() {jsjibonlu.change_locale('en-us')};
check_no_throw(f);
var f = function() {var n = jsjibonlu.num_fsts_in_mem(); if (n != num_of_fsts_at_start) { throw new Error('Error in setting locale and resetting data_dir')} }
check_no_throw(f);
console.log('\n\n\nSuccess');

223
parser/lib/example.js Normal file
View File

@@ -0,0 +1,223 @@
var fs = require('fs');
//////////////////////////
// Library Initialization
//////////////////////////
// checking for command line arguments
var argv = process.argv;
if (argv.length != 4) {
console.log('Incorrect number of command line arguments');
console.log('Usage: node example.js full_path_to_dir_containing_jsjibonlu full_path_to_datadir')
console.log('Example: node example.js /Users/my_user/my_directory_containig_jsjibonlu/ /Users/my_user/my_directory/data');
process.exit(1);
}
// gteting install prefix
var install_prefix = argv[2];
var datadir = argv[3];
// Loading jsjibonlu library
var jsjibonlu = require(install_prefix + '/jsjibonlu');
// Setting datapath (directory with factory rules
// and word lists
jsjibonlu.set_data_dir(datadir)
// Setting fst error behavior so that it does not crash
// every time there is an error
jsjibonlu.set_fst_error_behavior();
//////////////////////////
// Compiling a rule
//////////////////////////
// Rule to be compiled
var grm = "TopRule = $* hello{nl='hello'}|goodbye{nl='goodbye'} $* $factory:date{date=date._date_nl} $* ;";
// Compiling rule (use a handle name)
var fst1 = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");
//////////////////////////
// Parsing
//////////////////////////
// Creating rule parser
var parser = jsjibonlu.build_sentence_parser(fst1);
// Parsing sentence
var sentence = "aaaa hello and the day is july the 29th of the year 1995 yeah";
var parses_json = parser.parse_sentence(sentence);
var parses_obj = JSON.parse(parses_json);
console.log("*** These are the parses of sentence:" + sentence)
console.log(parses_obj)
//////////////////////////
// Parsing from an fst that is already
// in memory
//////////////////////////
var fst4 = jsjibonlu.read_fst_from_uri("handle:my_handle");
var parser = jsjibonlu.build_sentence_parser(fst4);
var sentence = "aaaa hello and the day is july the 29th of the year 1995 yeah";
var parses_json = parser.parse_sentence(sentence);
var parses_obj = JSON.parse(parses_json);
console.log("*** These are the parses of sentence:" + sentence)
console.log(parses_obj)
//////////////////////////
// Saving compiled fst
//////////////////////////
// Saving compiled rule
fst1.save_fst("myfst.fst");
//////////////////////////
// getting buffer from copiled fst
//////////////////////////
// getting buffer
buf = fst1.to_buffer();
console.log("*** example of fst returned as a buffer");
console.log(buf);
//////////////////////////
// Openingfst from file
//////////////////////////
var fst2 = jsjibonlu.read_fst_from_uri("file:myfst.fst");
var fst3 = jsjibonlu.load_fst_from_fst_file("./myfst.fst", "handle:my_fst_file_handle");
//////////////////////////
// Parsing Using fst in parallel
//////////////////////////
// Creating parallel parser
fsts = [fst1, fst2];
var parser = jsjibonlu.build_sentence_parser(fsts);
// Parsing sentence
var sentence = "aaaa hello and the day is july the 29th of the year 1995 yeah";
var parses_json = parser.parse_sentence(sentence);
var parses_obj = JSON.parse(parses_json);
console.log("*** These are the parses of sentence:" + sentence)
console.log(parses_obj)
//////////////////////////
// Parsing with union fst
//////////////////////////
// grms
var grm_union_1 = "TopRule = $* hello{nl='hello'}|goodbye{nl='goodbye'} $* $factory:date{date=date._date_nl} $* ;";
var grm_union_2 = "TopRule = $* here{nl='here'}|there{nl='there'} $* $factory:date{date=date._date_nl} $* ;";
// Compiling rule (use a handle name)
var fst_union_part1 = jsjibonlu.compile_fst_from_text(grm_union_1, "handle:my_handle_union_1");
var fst_union_part2 = jsjibonlu.compile_fst_from_text(grm_union_2, "handle:my_handle_union_2");
// get the union
var fst_union = jsjibonlu.union_fst(["handle:my_handle_union_1", "handle:my_handle_union_2"], "handle:my_handle_union_handle");
// remove parts from memory
jsjibonlu.remove_from_memory("handle:my_handle_union_1");
jsjibonlu.remove_from_memory("handle:my_handle_union_2");
// parse
var parser_union = jsjibonlu.build_sentence_parser(fst_union);
var parsed_union = parser_union.parse_sentence("hello july 31st 1995");
var parsed_union = parser_union.parse_sentence("here july 31st 1995");
///////////////////////////
// Removing rom memory
//////////////////////////
// Atempting to remove from memory a uri that does not exist
// will not throw an error
jsjibonlu.remove_from_memory("file:myfst.fst");
jsjibonlu.remove_from_memory("handle:my_handle");
// the statement in the following line will fail, since it has been removed from memory:
// var fst3 = jsjibonlu.read_fst_from_uri("handle:my_handle");
///////////////////////////
// syntax check (without compiling)
//////////////////////////
// The only difference between compile_fst_from_text and
// syntax_check is that syntax_check does not compile the
// fst. all the syntax checks are exactly the same.
// compile_fst_from_text throws exactly the same errors
// (in the same json format) when finding syntax errors
// correcty syntax (does not throw)
jsjibonlu.syntax_check(grm);
// incorrect syntax (does throw)
var wrong_rule = "TopRule = a b c $a {ret='a'}; a = a {m='b};"
try {
jsjibonlu.syntax_check(wrong_rule)
} catch (e) {
err_obj = JSON.parse(e.message);
console.log("*** Example of compilation error object:");
console.log(err_obj);
console.log("*** example of error member in the error object:");
console.log(err_obj.info.msg);
}
// Rule to be compiled
var grm = "TopRule = $* hello{nl='hello'}|goodbye{nl='goodbye'} $* $factory:date{date=date._date_nl} $* ;";
// Compiling rule (use a handle name)
var fst1 = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");
//////////////////////////
// Parsing
//////////////////////////
// Compiling rule (use a handle name)
grm = "TopRule = $handle:hndl{nl=hndl._nl};";
hndl = "TopRule = julius{_nl='julius'}|marcus{_nl='marcus'};";
var fst1 = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");
var fst2 = jsjibonlu.compile_fst_from_text(hndl, "handle:hndl");
var parser = jsjibonlu.build_sentence_parser(fst1);
var sentence = 'julius';
console.log("*** Example parsing with handle rules referenced inside another rule:");
var parses_json = parser.parse_sentence(sentence);
console.log(parses_json);
var sentence = 'marcus';
var parses_json = parser.parse_sentence(sentence);
console.log(parses_json);
///////////////////////
// With include files
///////////////////////
grm = "TopRule = $include:./myfile.rule:my_rule;";
fs.writeFileSync("./myfile.rule","my_rule = aa;\n");
jsjibonlu.syntax_check(grm, process.cwd() + "/file.rule");
var f = function() {jsjibonlu.syntax_check(grm, process.cwd() + "/file.rule");};
////////////////////////
// reset memory example
////////////////////////
// reset memory eliminates all fsts from memory, except for factories
jsjibonlu.reset_memory();
////////////////////////
// change locale example
////////////////////////
jsjibonlu.reset_memory();
jsjibonlu.change_locale('zh-cn');
grm = "TopRule = [$factory:yes_no{% nl = this.yes_no._nl %}];";
txt = "是";
var fst1 = jsjibonlu.compile_fst_from_text(grm, "handle:my_handle");
var parser = jsjibonlu.build_sentence_parser(fst1);
var parses_json = parser.parse_sentence(txt);
console.log("*** Example parsing with different locale");
console.log(parses_json);
////////////////////////
// locale back to en-us
////////////////////////
jsjibonlu.reset_memory();
jsjibonlu.change_locale('en-us');

1
parser/lib/main.js Normal file
View File

@@ -0,0 +1 @@
module.exports = module.require('../build/Release/jsjibonlu');