diff --git a/NLPPlus/__init__.py b/NLPPlus/__init__.py index 3516e2d..35aed7f 100644 --- a/NLPPlus/__init__.py +++ b/NLPPlus/__init__.py @@ -270,7 +270,7 @@ def clear_logs(self, analyzer_name: PathLike) -> int: return removed def analyze(self, text: str, analyzer_name: PathLike, develop: bool = False, - compiled: bool = False) -> Results: + compiled: bool = False, datum: Optional[str] = None) -> Results: """Analyze text with the named analyzer. Args: @@ -287,6 +287,10 @@ def analyze(self, text: str, analyzer_name: PathLike, develop: bool = False, package README for the cmake / cloud build step that turns them into the actual ``.so``/``.dylib``/ ``.dll`` files. + datum: a string the analyzer reads as ``G("$datum")``, for this + call only -- eg the output format the caller wants + (``"json"``, ``"xml"``). None (the default) is none, and + ``G("$datum")`` is then 0. """ outdir = self.analyzer_dir(analyzer_name) / "output" # Delete the files of the previous run in the outdir. @@ -294,7 +298,7 @@ def analyze(self, text: str, analyzer_name: PathLike, develop: bool = False, if os.path.isfile(file_path): os.remove(file_path) outtext = self.engine.analyze(self._engine_analyzer_arg(analyzer_name), - text, develop, compiled) + text, develop, compiled, datum or "") return Results(outtext, outdir) def compile(self, analyzer_name: PathLike, develop: bool = False, @@ -524,14 +528,16 @@ def put_json_object(analyzer_name: str, obj: Any, name: str) -> Path: def analyze(text: str, parser: str = "parse-en-us", develop: bool = False, - compiled: bool = False) -> str: + compiled: bool = False, datum: Optional[str] = None) -> str: """Run the analyzer named on the input string. If ``compiled=True``, the engine loads the analyzer's compiled shared libraries (``bin/run.`` and ``bin/kb.``) instead of running interpreted. See :func:`compile` for producing those. + ``datum`` reaches the analyzer as ``G("$datum")``; see + :meth:`Engine.analyze`. """ - return engine.analyze(text, parser, develop, compiled).output_text + return engine.analyze(text, parser, develop, compiled, datum).output_text def compile(analyzer: str = "parse-en-us", develop: bool = False, diff --git a/bindings.cpp b/bindings.cpp index 17ec567..d99b12e 100644 --- a/bindings.cpp +++ b/bindings.cpp @@ -108,8 +108,11 @@ wrap_init(NLP_ENGINE *self, const std::string &workingFolder, const std::string wrap_analyze(NLP_ENGINE &engine, const std::string &parser, const std::string &input, const bool develop, - const bool compiled) { + const bool compiled, const std::string &datum) { CLocaleGuard cLocale; + // For this call only: the analyzer sees it as G("$datum"), eg the + // output format the caller wants. "" (the default) is none. + engine.setDatum(datum.c_str()); _TCHAR *_parser = _tcsdup(parser.c_str()); std::istringstream instream(input); std::ostringstream outstream; @@ -184,7 +187,7 @@ NB_MODULE(bindings, m) { "silent"_a = true) .def("analyze", &wrap_analyze, "parser"_a, "input"_a, "develop"_a = false, - "compiled"_a = false, + "compiled"_a = false, "datum"_a = "", "Analyze `input` with `parser`.\n" "The `parser` argument refers to an analyzer contained in the\n" "`analyzers` folder inside the workingFolder used to create\n" @@ -193,7 +196,9 @@ NB_MODULE(bindings, m) { "bin/kb. from the analyzer dir instead of running\n" "interpreted from the .nlp source. Build those shared\n" "libraries first via `compile()` plus an external cmake/\n" - "cloud build step.") + "cloud build step.\n" + "`datum` reaches the analyzer as G(\"$datum\"), eg the output\n" + "format wanted; \"\" (the default) is none.") .def("compile", &wrap_compile, "analyzer"_a, "develop"_a = false, "kbOnly"_a = false, "analyzerOnly"_a = false, diff --git a/tests/analyzers/datum/kb/user/attr.kb b/tests/analyzers/datum/kb/user/attr.kb new file mode 100644 index 0000000..9ef2096 --- /dev/null +++ b/tests/analyzers/datum/kb/user/attr.kb @@ -0,0 +1,254 @@ +ind attr +"concept" +0 +"concept" "sys" "attrs" "common" "var" +psym +"cg_CONCEPT" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "x" "xu" "xwhite" +pst +"true" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "c" "co" "constrain" +pst +"true" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "c" "cl" "closed" +pst +"false" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "l" "li" "lit" +pst +"false" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "s" "sp" "split" +pst +"false" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "g" "ge" "gen" +pst +"false" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "l" "lo" "locked" +pst +"false" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "d" "di" "dirty" +pst +"true" +end ind + + +ind attr +"concept" "gram" +0 +"concept" "sys" "dict" "a" "q" "qu" "quicksem" +pst +"false" +end ind + + +ind attr +"concept" "sys" +0 +"concept" "sys" "attrs" "common" "var" +psym +"con_SYS" +end ind + + +ind attr +"concept" "sys" "attrs" +0 +"concept" "sys" "attrs" "common" "var" +psym +"sys_ATTRS" +end ind + + +ind attr +"concept" "sys" "attrs" "proxy" +0 +"concept" "sys" "attrs" "common" "var" +psym +"attrs_PROXY" +end ind + + +ind attr +"concept" "sys" "attrs" "proxy" "atom" +0 +"concept" "sys" "attrs" "common" "var" +psym +"cg_ATOM" +end ind + + +ind attr +"concept" "sys" "attrs" "pproxy" +0 +"concept" "sys" "attrs" "common" "var" +psym +"attrs_PPROXY" +end ind + + +ind attr +"concept" "sys" "attrs" "pproxy" "phrase" +0 +"concept" "sys" "attrs" "common" "var" +psym +"cg_PHRASE" +end ind + + +ind attr +"concept" "sys" "attrs" "common" +0 +"concept" "sys" "attrs" "common" "var" +psym +"attrs_COMMON" +end ind + + +ind attr +"concept" "sys" "attrs" "common" "var" +0 +"concept" "sys" "attrs" "common" "var" +psym +"cg_VAR" +end ind + + +ind attr +"concept" "sys" "nlp" +0 +"concept" "sys" "attrs" "common" "var" +psym +"sys_NLP" +end ind + + +ind attr +"concept" "sys" "nlp" "lex" "slot" "cases" +0 +"concept" "sys" "attrs" "common" "var" +psym +"id_CASES" +end ind + + +ind attr +"concept" "sys" "mean" "slot" "case" +0 +"concept" "sys" "attrs" "common" "var" +psym +"id_mslot_CASE" +end ind + + +ind attr +"concept" "sys" "mean" "slot" "case" "cap" +0 +"concept" "sys" "attrs" "common" "var" +psym +"id_CAP" +end ind + + +ind attr +"concept" "sys" "mean" "slot" "case" "allcap" +0 +"concept" "sys" "attrs" "common" "var" +psym +"id_ALLCAP" +end ind + + +ind attr +"concept" "sys" "mean" "slot" "case" "mixed" +0 +"concept" "sys" "attrs" "common" "var" +psym +"id_MIXED" +end ind + + +ind attr +"concept" "sys" "mean" "slot" "mixed" +0 +"concept" "sys" "attrs" "common" "var" +psym +"id_mslot_MIXED" +end ind + + +ind attr +"concept" "sys" "dict" +0 +"concept" "sys" "attrs" "common" "var" +psym +"sys_DICT" +end ind + + +ind attr +"concept" "sys" "dict" "a" +0 +"concept" "sys" "attrs" "common" "var" +psym +"dict_ALPHA" +end ind + + +ind attr +"concept" "sys" "dict" "unknown" +0 +"concept" "sys" "attrs" "common" "var" +psym +"dict_UNKNOWN" +end ind + + +quit + diff --git a/tests/analyzers/datum/kb/user/hier.kb b/tests/analyzers/datum/kb/user/hier.kb new file mode 100644 index 0000000..e17d616 --- /dev/null +++ b/tests/analyzers/datum/kb/user/hier.kb @@ -0,0 +1,755 @@ +add empty +add root +add hier "concept" "gram" +add hier "concept" "sys" +add hier "concept" "sys" "attrs" +add hier "concept" "sys" "attrs" "proxy" +add hier "concept" "sys" "attrs" "proxy" "atom" +add hier "concept" "sys" "attrs" "pproxy" +add hier "concept" "sys" "attrs" "pproxy" "phrase" +add hier "concept" "sys" "attrs" "common" +add hier "concept" "sys" "attrs" "common" "var" +add hier "concept" "sys" "attrs" "rule_elt" +add hier "concept" "sys" "vals" +add hier "concept" "sys" "vals" "boolean" +add hier "concept" "sys" "vals" "boolean" "false" +add hier "concept" "sys" "vals" "boolean" "true" +add hier "concept" "sys" "nlp" +add hier "concept" "sys" "nlp" "wht" +add hier "concept" "sys" "nlp" "punct" +add hier "concept" "sys" "nlp" "ctrl" +add hier "concept" "sys" "nlp" "lex" +add hier "concept" "sys" "nlp" "lex" "slot" +add hier "concept" "sys" "nlp" "lex" "slot" "cases" +add hier "concept" "sys" "mean" +add hier "concept" "sys" "mean" "slot" +add hier "concept" "sys" "mean" "slot" "case" +add hier "concept" "sys" "mean" "slot" "case" "cap" +add hier "concept" "sys" "mean" "slot" "case" "allcap" +add hier "concept" "sys" "mean" "slot" "case" "mixed" +add hier "concept" "sys" "mean" "slot" "mixed" +add hier "concept" "sys" "dict" +add hier "concept" "sys" "dict" "a" +add hier "concept" "sys" "dict" "a" "A" +add hier "concept" "sys" "dict" "a" "A" "A" +add hier "concept" "sys" "dict" "a" "A" "Aa" +add hier "concept" "sys" "dict" "a" "A" "Ab" +add hier "concept" "sys" "dict" "a" "A" "Ac" +add hier "concept" "sys" "dict" "a" "A" "Ad" +add hier "concept" "sys" "dict" "a" "A" "Ae" +add hier "concept" "sys" "dict" "a" "A" "Af" +add hier "concept" "sys" "dict" "a" "A" "Ag" +add hier "concept" "sys" "dict" "a" "A" "Ah" +add hier "concept" "sys" "dict" "a" "A" "Ai" +add hier "concept" "sys" "dict" "a" "A" "Aj" +add hier "concept" "sys" "dict" "a" "A" "Ak" +add hier "concept" "sys" "dict" "a" "A" "Al" +add hier "concept" "sys" "dict" "a" "A" "Am" +add hier "concept" "sys" "dict" "a" "A" "An" +add hier "concept" "sys" "dict" "a" "A" "Ap" +add hier "concept" "sys" "dict" "a" "A" "Aq" +add hier "concept" "sys" "dict" "a" "A" "Ar" +add hier "concept" "sys" "dict" "a" "A" "As" +add hier "concept" "sys" "dict" "a" "A" "At" +add hier "concept" "sys" "dict" "a" "A" "Au" +add hier "concept" "sys" "dict" "a" "A" "Av" +add hier "concept" "sys" "dict" "a" "A" "Aw" +add hier "concept" "sys" "dict" "a" "A" "Ax" +add hier "concept" "sys" "dict" "a" "A" "Ay" +add hier "concept" "sys" "dict" "a" "A" "Az" +add hier "concept" "sys" "dict" "a" "B" +add hier "concept" "sys" "dict" "a" "B" "B" +add hier "concept" "sys" "dict" "a" "B" "Ba" +add hier "concept" "sys" "dict" "a" "B" "Be" +add hier "concept" "sys" "dict" "a" "B" "Bi" +add hier "concept" "sys" "dict" "a" "B" "Bl" +add hier "concept" "sys" "dict" "a" "B" "Bo" +add hier "concept" "sys" "dict" "a" "B" "Br" +add hier "concept" "sys" "dict" "a" "B" "Bu" +add hier "concept" "sys" "dict" "a" "B" "By" +add hier "concept" "sys" "dict" "a" "C" +add hier "concept" "sys" "dict" "a" "C" "C" +add hier "concept" "sys" "dict" "a" "C" "Ca" +add hier "concept" "sys" "dict" "a" "C" "Ce" +add hier "concept" "sys" "dict" "a" "C" "Ch" +add hier "concept" "sys" "dict" "a" "C" "Ci" +add hier "concept" "sys" "dict" "a" "C" "Cl" +add hier "concept" "sys" "dict" "a" "C" "Co" +add hier "concept" "sys" "dict" "a" "C" "Cr" +add hier "concept" "sys" "dict" "a" "C" "Cu" +add hier "concept" "sys" "dict" "a" "C" "Cy" +add hier "concept" "sys" "dict" "a" "D" +add hier "concept" "sys" "dict" "a" "D" "D" +add hier "concept" "sys" "dict" "a" "D" "Da" +add hier "concept" "sys" "dict" "a" "D" "De" +add hier "concept" "sys" "dict" "a" "D" "Di" +add hier "concept" "sys" "dict" "a" "D" "Do" +add hier "concept" "sys" "dict" "a" "D" "Dr" +add hier "concept" "sys" "dict" "a" "D" "Du" +add hier "concept" "sys" "dict" "a" "D" "Dy" +add hier "concept" "sys" "dict" "a" "E" +add hier "concept" "sys" "dict" "a" "E" "E" +add hier "concept" "sys" "dict" "a" "E" "Ea" +add hier "concept" "sys" "dict" "a" "E" "Eb" +add hier "concept" "sys" "dict" "a" "E" "Ed" +add hier "concept" "sys" "dict" "a" "E" "Ee" +add hier "concept" "sys" "dict" "a" "E" "Ef" +add hier "concept" "sys" "dict" "a" "E" "Eg" +add hier "concept" "sys" "dict" "a" "E" "Eh" +add hier "concept" "sys" "dict" "a" "E" "Ei" +add hier "concept" "sys" "dict" "a" "E" "Ej" +add hier "concept" "sys" "dict" "a" "E" "El" +add hier "concept" "sys" "dict" "a" "E" "Em" +add hier "concept" "sys" "dict" "a" "E" "En" +add hier "concept" "sys" "dict" "a" "E" "Eo" +add hier "concept" "sys" "dict" "a" "E" "Ep" +add hier "concept" "sys" "dict" "a" "E" "Eq" +add hier "concept" "sys" "dict" "a" "E" "Er" +add hier "concept" "sys" "dict" "a" "E" "Es" +add hier "concept" "sys" "dict" "a" "E" "Et" +add hier "concept" "sys" "dict" "a" "E" "Eu" +add hier "concept" "sys" "dict" "a" "E" "Ev" +add hier "concept" "sys" "dict" "a" "E" "Ew" +add hier "concept" "sys" "dict" "a" "E" "Ex" +add hier "concept" "sys" "dict" "a" "E" "Ey" +add hier "concept" "sys" "dict" "a" "E" "Ez" +add hier "concept" "sys" "dict" "a" "F" +add hier "concept" "sys" "dict" "a" "F" "F" +add hier "concept" "sys" "dict" "a" "F" "Fa" +add hier "concept" "sys" "dict" "a" "F" "Fe" +add hier "concept" "sys" "dict" "a" "F" "Fi" +add hier "concept" "sys" "dict" "a" "F" "Fl" +add hier "concept" "sys" "dict" "a" "F" "Fo" +add hier "concept" "sys" "dict" "a" "F" "Fr" +add hier "concept" "sys" "dict" "a" "F" "Fu" +add hier "concept" "sys" "dict" "a" "F" "Fy" +add hier "concept" "sys" "dict" "a" "G" +add hier "concept" "sys" "dict" "a" "G" "G" +add hier "concept" "sys" "dict" "a" "G" "Ga" +add hier "concept" "sys" "dict" "a" "G" "Ge" +add hier "concept" "sys" "dict" "a" "G" "Gh" +add hier "concept" "sys" "dict" "a" "G" "Gi" +add hier "concept" "sys" "dict" "a" "G" "Gl" +add hier "concept" "sys" "dict" "a" "G" "Gn" +add hier "concept" "sys" "dict" "a" "G" "Go" +add hier "concept" "sys" "dict" "a" "G" "Gr" +add hier "concept" "sys" "dict" "a" "G" "Gu" +add hier "concept" "sys" "dict" "a" "G" "Gy" +add hier "concept" "sys" "dict" "a" "H" +add hier "concept" "sys" "dict" "a" "H" "H" +add hier "concept" "sys" "dict" "a" "H" "Ha" +add hier "concept" "sys" "dict" "a" "H" "He" +add hier "concept" "sys" "dict" "a" "H" "Hi" +add hier "concept" "sys" "dict" "a" "H" "Ho" +add hier "concept" "sys" "dict" "a" "H" "Hu" +add hier "concept" "sys" "dict" "a" "H" "Hy" +add hier "concept" "sys" "dict" "a" "I" +add hier "concept" "sys" "dict" "a" "I" "I" +add hier "concept" "sys" "dict" "a" "I" "Ia" +add hier "concept" "sys" "dict" "a" "I" "Ib" +add hier "concept" "sys" "dict" "a" "I" "Ic" +add hier "concept" "sys" "dict" "a" "I" "Id" +add hier "concept" "sys" "dict" "a" "I" "Ig" +add hier "concept" "sys" "dict" "a" "I" "Il" +add hier "concept" "sys" "dict" "a" "I" "Im" +add hier "concept" "sys" "dict" "a" "I" "In" +add hier "concept" "sys" "dict" "a" "I" "Io" +add hier "concept" "sys" "dict" "a" "I" "Ir" +add hier "concept" "sys" "dict" "a" "I" "Is" +add hier "concept" "sys" "dict" "a" "I" "It" +add hier "concept" "sys" "dict" "a" "J" +add hier "concept" "sys" "dict" "a" "J" "J" +add hier "concept" "sys" "dict" "a" "J" "Ja" +add hier "concept" "sys" "dict" "a" "J" "Je" +add hier "concept" "sys" "dict" "a" "J" "Ji" +add hier "concept" "sys" "dict" "a" "J" "Jo" +add hier "concept" "sys" "dict" "a" "J" "Ju" +add hier "concept" "sys" "dict" "a" "K" +add hier "concept" "sys" "dict" "a" "K" "K" +add hier "concept" "sys" "dict" "a" "K" "Ka" +add hier "concept" "sys" "dict" "a" "K" "Ke" +add hier "concept" "sys" "dict" "a" "K" "Kh" +add hier "concept" "sys" "dict" "a" "K" "Ki" +add hier "concept" "sys" "dict" "a" "K" "Kl" +add hier "concept" "sys" "dict" "a" "K" "Kn" +add hier "concept" "sys" "dict" "a" "K" "Ko" +add hier "concept" "sys" "dict" "a" "K" "Kr" +add hier "concept" "sys" "dict" "a" "K" "Ku" +add hier "concept" "sys" "dict" "a" "L" +add hier "concept" "sys" "dict" "a" "L" "L" +add hier "concept" "sys" "dict" "a" "L" "La" +add hier "concept" "sys" "dict" "a" "L" "Le" +add hier "concept" "sys" "dict" "a" "L" "Li" +add hier "concept" "sys" "dict" "a" "L" "Ll" +add hier "concept" "sys" "dict" "a" "L" "Lo" +add hier "concept" "sys" "dict" "a" "L" "Lu" +add hier "concept" "sys" "dict" "a" "L" "Ly" +add hier "concept" "sys" "dict" "a" "M" +add hier "concept" "sys" "dict" "a" "M" "M" +add hier "concept" "sys" "dict" "a" "M" "Ma" +add hier "concept" "sys" "dict" "a" "M" "Me" +add hier "concept" "sys" "dict" "a" "M" "Mi" +add hier "concept" "sys" "dict" "a" "M" "Mn" +add hier "concept" "sys" "dict" "a" "M" "Mo" +add hier "concept" "sys" "dict" "a" "M" "Mu" +add hier "concept" "sys" "dict" "a" "M" "My" +add hier "concept" "sys" "dict" "a" "N" +add hier "concept" "sys" "dict" "a" "N" "N" +add hier "concept" "sys" "dict" "a" "N" "Na" +add hier "concept" "sys" "dict" "a" "N" "Ne" +add hier "concept" "sys" "dict" "a" "N" "Ni" +add hier "concept" "sys" "dict" "a" "N" "No" +add hier "concept" "sys" "dict" "a" "N" "Nu" +add hier "concept" "sys" "dict" "a" "N" "Ny" +add hier "concept" "sys" "dict" "a" "O" +add hier "concept" "sys" "dict" "a" "O" "O" +add hier "concept" "sys" "dict" "a" "O" "Oa" +add hier "concept" "sys" "dict" "a" "O" "Ob" +add hier "concept" "sys" "dict" "a" "O" "Oc" +add hier "concept" "sys" "dict" "a" "O" "Od" +add hier "concept" "sys" "dict" "a" "O" "Oe" +add hier "concept" "sys" "dict" "a" "O" "Of" +add hier "concept" "sys" "dict" "a" "O" "Og" +add hier "concept" "sys" "dict" "a" "O" "Oh" +add hier "concept" "sys" "dict" "a" "O" "Oi" +add hier "concept" "sys" "dict" "a" "O" "Ok" +add hier "concept" "sys" "dict" "a" "O" "On" +add hier "concept" "sys" "dict" "a" "O" "Oo" +add hier "concept" "sys" "dict" "a" "O" "Op" +add hier "concept" "sys" "dict" "a" "O" "Oq" +add hier "concept" "sys" "dict" "a" "O" "Or" +add hier "concept" "sys" "dict" "a" "O" "Os" +add hier "concept" "sys" "dict" "a" "O" "Ot" +add hier "concept" "sys" "dict" "a" "O" "Ou" +add hier "concept" "sys" "dict" "a" "O" "Ov" +add hier "concept" "sys" "dict" "a" "O" "Ow" +add hier "concept" "sys" "dict" "a" "O" "Ox" +add hier "concept" "sys" "dict" "a" "O" "Oy" +add hier "concept" "sys" "dict" "a" "O" "Oz" +add hier "concept" "sys" "dict" "a" "P" +add hier "concept" "sys" "dict" "a" "P" "P" +add hier "concept" "sys" "dict" "a" "P" "Pa" +add hier "concept" "sys" "dict" "a" "P" "Pe" +add hier "concept" "sys" "dict" "a" "P" "Ph" +add hier "concept" "sys" "dict" "a" "P" "Pi" +add hier "concept" "sys" "dict" "a" "P" "Pl" +add hier "concept" "sys" "dict" "a" "P" "Pn" +add hier "concept" "sys" "dict" "a" "P" "Po" +add hier "concept" "sys" "dict" "a" "P" "Pr" +add hier "concept" "sys" "dict" "a" "P" "Pt" +add hier "concept" "sys" "dict" "a" "P" "Pu" +add hier "concept" "sys" "dict" "a" "P" "Py" +add hier "concept" "sys" "dict" "a" "Q" +add hier "concept" "sys" "dict" "a" "Q" "Q" +add hier "concept" "sys" "dict" "a" "Q" "Qa" +add hier "concept" "sys" "dict" "a" "Q" "Qu" +add hier "concept" "sys" "dict" "a" "R" +add hier "concept" "sys" "dict" "a" "R" "R" +add hier "concept" "sys" "dict" "a" "R" "Ra" +add hier "concept" "sys" "dict" "a" "R" "Re" +add hier "concept" "sys" "dict" "a" "R" "Rh" +add hier "concept" "sys" "dict" "a" "R" "Ri" +add hier "concept" "sys" "dict" "a" "R" "Ro" +add hier "concept" "sys" "dict" "a" "R" "Ru" +add hier "concept" "sys" "dict" "a" "R" "Ry" +add hier "concept" "sys" "dict" "a" "S" +add hier "concept" "sys" "dict" "a" "S" "S" +add hier "concept" "sys" "dict" "a" "S" "Sa" +add hier "concept" "sys" "dict" "a" "S" "Sc" +add hier "concept" "sys" "dict" "a" "S" "Se" +add hier "concept" "sys" "dict" "a" "S" "Sf" +add hier "concept" "sys" "dict" "a" "S" "Sh" +add hier "concept" "sys" "dict" "a" "S" "Si" +add hier "concept" "sys" "dict" "a" "S" "Sk" +add hier "concept" "sys" "dict" "a" "S" "Sl" +add hier "concept" "sys" "dict" "a" "S" "Sm" +add hier "concept" "sys" "dict" "a" "S" "Sn" +add hier "concept" "sys" "dict" "a" "S" "So" +add hier "concept" "sys" "dict" "a" "S" "Sp" +add hier "concept" "sys" "dict" "a" "S" "Sq" +add hier "concept" "sys" "dict" "a" "S" "St" +add hier "concept" "sys" "dict" "a" "S" "Su" +add hier "concept" "sys" "dict" "a" "S" "Sw" +add hier "concept" "sys" "dict" "a" "S" "Sy" +add hier "concept" "sys" "dict" "a" "T" +add hier "concept" "sys" "dict" "a" "T" "T" +add hier "concept" "sys" "dict" "a" "T" "Ta" +add hier "concept" "sys" "dict" "a" "T" "Te" +add hier "concept" "sys" "dict" "a" "T" "Th" +add hier "concept" "sys" "dict" "a" "T" "Ti" +add hier "concept" "sys" "dict" "a" "T" "To" +add hier "concept" "sys" "dict" "a" "T" "Tr" +add hier "concept" "sys" "dict" "a" "T" "Tu" +add hier "concept" "sys" "dict" "a" "T" "Tw" +add hier "concept" "sys" "dict" "a" "T" "Ty" +add hier "concept" "sys" "dict" "a" "U" +add hier "concept" "sys" "dict" "a" "U" "U" +add hier "concept" "sys" "dict" "a" "U" "Ua" +add hier "concept" "sys" "dict" "a" "U" "Un" +add hier "concept" "sys" "dict" "a" "U" "Up" +add hier "concept" "sys" "dict" "a" "U" "Ur" +add hier "concept" "sys" "dict" "a" "V" +add hier "concept" "sys" "dict" "a" "V" "V" +add hier "concept" "sys" "dict" "a" "V" "Va" +add hier "concept" "sys" "dict" "a" "V" "Ve" +add hier "concept" "sys" "dict" "a" "V" "Vi" +add hier "concept" "sys" "dict" "a" "V" "Vo" +add hier "concept" "sys" "dict" "a" "V" "Vu" +add hier "concept" "sys" "dict" "a" "W" +add hier "concept" "sys" "dict" "a" "W" "W" +add hier "concept" "sys" "dict" "a" "W" "Wa" +add hier "concept" "sys" "dict" "a" "W" "We" +add hier "concept" "sys" "dict" "a" "W" "Wh" +add hier "concept" "sys" "dict" "a" "W" "Wi" +add hier "concept" "sys" "dict" "a" "W" "Wo" +add hier "concept" "sys" "dict" "a" "W" "Wr" +add hier "concept" "sys" "dict" "a" "W" "Wu" +add hier "concept" "sys" "dict" "a" "X" +add hier "concept" "sys" "dict" "a" "X" "X" +add hier "concept" "sys" "dict" "a" "X" "Xa" +add hier "concept" "sys" "dict" "a" "X" "Xe" +add hier "concept" "sys" "dict" "a" "X" "Xi" +add hier "concept" "sys" "dict" "a" "X" "Xo" +add hier "concept" "sys" "dict" "a" "X" "Xu" +add hier "concept" "sys" "dict" "a" "X" "Xy" +add hier "concept" "sys" "dict" "a" "Y" +add hier "concept" "sys" "dict" "a" "Y" "Y" +add hier "concept" "sys" "dict" "a" "Y" "Ya" +add hier "concept" "sys" "dict" "a" "Y" "Ye" +add hier "concept" "sys" "dict" "a" "Y" "Yi" +add hier "concept" "sys" "dict" "a" "Y" "Yo" +add hier "concept" "sys" "dict" "a" "Y" "Yu" +add hier "concept" "sys" "dict" "a" "Z" +add hier "concept" "sys" "dict" "a" "Z" "Z" +add hier "concept" "sys" "dict" "a" "Z" "Za" +add hier "concept" "sys" "dict" "a" "Z" "Ze" +add hier "concept" "sys" "dict" "a" "Z" "Zi" +add hier "concept" "sys" "dict" "a" "Z" "Zo" +add hier "concept" "sys" "dict" "a" "Z" "Zu" +add hier "concept" "sys" "dict" "a" "Z" "Zy" +add hier "concept" "sys" "dict" "a" "a" +add hier "concept" "sys" "dict" "a" "a" "a" +add hier "concept" "sys" "dict" "a" "a" "aa" +add hier "concept" "sys" "dict" "a" "a" "ab" +add hier "concept" "sys" "dict" "a" "a" "ac" +add hier "concept" "sys" "dict" "a" "a" "ad" +add hier "concept" "sys" "dict" "a" "a" "ae" +add hier "concept" "sys" "dict" "a" "a" "af" +add hier "concept" "sys" "dict" "a" "a" "ag" +add hier "concept" "sys" "dict" "a" "a" "ah" +add hier "concept" "sys" "dict" "a" "a" "ai" +add hier "concept" "sys" "dict" "a" "a" "aj" +add hier "concept" "sys" "dict" "a" "a" "ak" +add hier "concept" "sys" "dict" "a" "a" "al" +add hier "concept" "sys" "dict" "a" "a" "am" +add hier "concept" "sys" "dict" "a" "a" "an" +add hier "concept" "sys" "dict" "a" "a" "ap" +add hier "concept" "sys" "dict" "a" "a" "aq" +add hier "concept" "sys" "dict" "a" "a" "ar" +add hier "concept" "sys" "dict" "a" "a" "as" +add hier "concept" "sys" "dict" "a" "a" "at" +add hier "concept" "sys" "dict" "a" "a" "au" +add hier "concept" "sys" "dict" "a" "a" "av" +add hier "concept" "sys" "dict" "a" "a" "aw" +add hier "concept" "sys" "dict" "a" "a" "ax" +add hier "concept" "sys" "dict" "a" "a" "ay" +add hier "concept" "sys" "dict" "a" "a" "az" +add hier "concept" "sys" "dict" "a" "b" +add hier "concept" "sys" "dict" "a" "b" "b" +add hier "concept" "sys" "dict" "a" "b" "ba" +add hier "concept" "sys" "dict" "a" "b" "be" +add hier "concept" "sys" "dict" "a" "b" "bi" +add hier "concept" "sys" "dict" "a" "b" "bl" +add hier "concept" "sys" "dict" "a" "b" "bo" +add hier "concept" "sys" "dict" "a" "b" "br" +add hier "concept" "sys" "dict" "a" "b" "bu" +add hier "concept" "sys" "dict" "a" "b" "by" +add hier "concept" "sys" "dict" "a" "c" +add hier "concept" "sys" "dict" "a" "c" "c" +add hier "concept" "sys" "dict" "a" "c" "ca" +add hier "concept" "sys" "dict" "a" "c" "ce" +add hier "concept" "sys" "dict" "a" "c" "ch" +add hier "concept" "sys" "dict" "a" "c" "ci" +add hier "concept" "sys" "dict" "a" "c" "cl" +add hier "concept" "sys" "dict" "a" "c" "co" +add hier "concept" "sys" "dict" "a" "c" "cr" +add hier "concept" "sys" "dict" "a" "c" "cu" +add hier "concept" "sys" "dict" "a" "c" "cy" +add hier "concept" "sys" "dict" "a" "d" +add hier "concept" "sys" "dict" "a" "d" "d" +add hier "concept" "sys" "dict" "a" "d" "da" +add hier "concept" "sys" "dict" "a" "d" "de" +add hier "concept" "sys" "dict" "a" "d" "di" +add hier "concept" "sys" "dict" "a" "d" "do" +add hier "concept" "sys" "dict" "a" "d" "dr" +add hier "concept" "sys" "dict" "a" "d" "du" +add hier "concept" "sys" "dict" "a" "d" "dy" +add hier "concept" "sys" "dict" "a" "e" +add hier "concept" "sys" "dict" "a" "e" "e" +add hier "concept" "sys" "dict" "a" "e" "ea" +add hier "concept" "sys" "dict" "a" "e" "eb" +add hier "concept" "sys" "dict" "a" "e" "ed" +add hier "concept" "sys" "dict" "a" "e" "ee" +add hier "concept" "sys" "dict" "a" "e" "ef" +add hier "concept" "sys" "dict" "a" "e" "eg" +add hier "concept" "sys" "dict" "a" "e" "eh" +add hier "concept" "sys" "dict" "a" "e" "ei" +add hier "concept" "sys" "dict" "a" "e" "ej" +add hier "concept" "sys" "dict" "a" "e" "el" +add hier "concept" "sys" "dict" "a" "e" "em" +add hier "concept" "sys" "dict" "a" "e" "en" +add hier "concept" "sys" "dict" "a" "e" "eo" +add hier "concept" "sys" "dict" "a" "e" "ep" +add hier "concept" "sys" "dict" "a" "e" "eq" +add hier "concept" "sys" "dict" "a" "e" "er" +add hier "concept" "sys" "dict" "a" "e" "es" +add hier "concept" "sys" "dict" "a" "e" "et" +add hier "concept" "sys" "dict" "a" "e" "eu" +add hier "concept" "sys" "dict" "a" "e" "ev" +add hier "concept" "sys" "dict" "a" "e" "ew" +add hier "concept" "sys" "dict" "a" "e" "ex" +add hier "concept" "sys" "dict" "a" "e" "ey" +add hier "concept" "sys" "dict" "a" "e" "ez" +add hier "concept" "sys" "dict" "a" "f" +add hier "concept" "sys" "dict" "a" "f" "f" +add hier "concept" "sys" "dict" "a" "f" "fa" +add hier "concept" "sys" "dict" "a" "f" "fe" +add hier "concept" "sys" "dict" "a" "f" "fi" +add hier "concept" "sys" "dict" "a" "f" "fl" +add hier "concept" "sys" "dict" "a" "f" "fo" +add hier "concept" "sys" "dict" "a" "f" "fr" +add hier "concept" "sys" "dict" "a" "f" "fu" +add hier "concept" "sys" "dict" "a" "f" "fy" +add hier "concept" "sys" "dict" "a" "g" +add hier "concept" "sys" "dict" "a" "g" "g" +add hier "concept" "sys" "dict" "a" "g" "ga" +add hier "concept" "sys" "dict" "a" "g" "ge" +add hier "concept" "sys" "dict" "a" "g" "gh" +add hier "concept" "sys" "dict" "a" "g" "gi" +add hier "concept" "sys" "dict" "a" "g" "gl" +add hier "concept" "sys" "dict" "a" "g" "gn" +add hier "concept" "sys" "dict" "a" "g" "go" +add hier "concept" "sys" "dict" "a" "g" "gr" +add hier "concept" "sys" "dict" "a" "g" "gu" +add hier "concept" "sys" "dict" "a" "g" "gy" +add hier "concept" "sys" "dict" "a" "h" +add hier "concept" "sys" "dict" "a" "h" "h" +add hier "concept" "sys" "dict" "a" "h" "ha" +add hier "concept" "sys" "dict" "a" "h" "he" +add hier "concept" "sys" "dict" "a" "h" "hi" +add hier "concept" "sys" "dict" "a" "h" "ho" +add hier "concept" "sys" "dict" "a" "h" "hu" +add hier "concept" "sys" "dict" "a" "h" "hy" +add hier "concept" "sys" "dict" "a" "i" +add hier "concept" "sys" "dict" "a" "i" "i" +add hier "concept" "sys" "dict" "a" "i" "ia" +add hier "concept" "sys" "dict" "a" "i" "ib" +add hier "concept" "sys" "dict" "a" "i" "ic" +add hier "concept" "sys" "dict" "a" "i" "id" +add hier "concept" "sys" "dict" "a" "i" "ig" +add hier "concept" "sys" "dict" "a" "i" "il" +add hier "concept" "sys" "dict" "a" "i" "im" +add hier "concept" "sys" "dict" "a" "i" "in" +add hier "concept" "sys" "dict" "a" "i" "io" +add hier "concept" "sys" "dict" "a" "i" "ir" +add hier "concept" "sys" "dict" "a" "i" "is" +add hier "concept" "sys" "dict" "a" "i" "it" +add hier "concept" "sys" "dict" "a" "j" +add hier "concept" "sys" "dict" "a" "j" "j" +add hier "concept" "sys" "dict" "a" "j" "ja" +add hier "concept" "sys" "dict" "a" "j" "je" +add hier "concept" "sys" "dict" "a" "j" "ji" +add hier "concept" "sys" "dict" "a" "j" "jo" +add hier "concept" "sys" "dict" "a" "j" "ju" +add hier "concept" "sys" "dict" "a" "k" +add hier "concept" "sys" "dict" "a" "k" "k" +add hier "concept" "sys" "dict" "a" "k" "ka" +add hier "concept" "sys" "dict" "a" "k" "ke" +add hier "concept" "sys" "dict" "a" "k" "kh" +add hier "concept" "sys" "dict" "a" "k" "ki" +add hier "concept" "sys" "dict" "a" "k" "kl" +add hier "concept" "sys" "dict" "a" "k" "kn" +add hier "concept" "sys" "dict" "a" "k" "ko" +add hier "concept" "sys" "dict" "a" "k" "kr" +add hier "concept" "sys" "dict" "a" "k" "ku" +add hier "concept" "sys" "dict" "a" "l" +add hier "concept" "sys" "dict" "a" "l" "l" +add hier "concept" "sys" "dict" "a" "l" "la" +add hier "concept" "sys" "dict" "a" "l" "le" +add hier "concept" "sys" "dict" "a" "l" "li" +add hier "concept" "sys" "dict" "a" "l" "ll" +add hier "concept" "sys" "dict" "a" "l" "lo" +add hier "concept" "sys" "dict" "a" "l" "lu" +add hier "concept" "sys" "dict" "a" "l" "ly" +add hier "concept" "sys" "dict" "a" "m" +add hier "concept" "sys" "dict" "a" "m" "m" +add hier "concept" "sys" "dict" "a" "m" "ma" +add hier "concept" "sys" "dict" "a" "m" "me" +add hier "concept" "sys" "dict" "a" "m" "mi" +add hier "concept" "sys" "dict" "a" "m" "mn" +add hier "concept" "sys" "dict" "a" "m" "mo" +add hier "concept" "sys" "dict" "a" "m" "mu" +add hier "concept" "sys" "dict" "a" "m" "my" +add hier "concept" "sys" "dict" "a" "n" +add hier "concept" "sys" "dict" "a" "n" "n" +add hier "concept" "sys" "dict" "a" "n" "na" +add hier "concept" "sys" "dict" "a" "n" "ne" +add hier "concept" "sys" "dict" "a" "n" "ni" +add hier "concept" "sys" "dict" "a" "n" "no" +add hier "concept" "sys" "dict" "a" "n" "nu" +add hier "concept" "sys" "dict" "a" "n" "ny" +add hier "concept" "sys" "dict" "a" "o" +add hier "concept" "sys" "dict" "a" "o" "o" +add hier "concept" "sys" "dict" "a" "o" "oa" +add hier "concept" "sys" "dict" "a" "o" "ob" +add hier "concept" "sys" "dict" "a" "o" "oc" +add hier "concept" "sys" "dict" "a" "o" "od" +add hier "concept" "sys" "dict" "a" "o" "oe" +add hier "concept" "sys" "dict" "a" "o" "of" +add hier "concept" "sys" "dict" "a" "o" "og" +add hier "concept" "sys" "dict" "a" "o" "oh" +add hier "concept" "sys" "dict" "a" "o" "oi" +add hier "concept" "sys" "dict" "a" "o" "ok" +add hier "concept" "sys" "dict" "a" "o" "on" +add hier "concept" "sys" "dict" "a" "o" "oo" +add hier "concept" "sys" "dict" "a" "o" "op" +add hier "concept" "sys" "dict" "a" "o" "oq" +add hier "concept" "sys" "dict" "a" "o" "or" +add hier "concept" "sys" "dict" "a" "o" "os" +add hier "concept" "sys" "dict" "a" "o" "ot" +add hier "concept" "sys" "dict" "a" "o" "ou" +add hier "concept" "sys" "dict" "a" "o" "ov" +add hier "concept" "sys" "dict" "a" "o" "ow" +add hier "concept" "sys" "dict" "a" "o" "ox" +add hier "concept" "sys" "dict" "a" "o" "oy" +add hier "concept" "sys" "dict" "a" "o" "oz" +add hier "concept" "sys" "dict" "a" "p" +add hier "concept" "sys" "dict" "a" "p" "p" +add hier "concept" "sys" "dict" "a" "p" "pa" +add hier "concept" "sys" "dict" "a" "p" "pe" +add hier "concept" "sys" "dict" "a" "p" "ph" +add hier "concept" "sys" "dict" "a" "p" "pi" +add hier "concept" "sys" "dict" "a" "p" "pl" +add hier "concept" "sys" "dict" "a" "p" "pn" +add hier "concept" "sys" "dict" "a" "p" "po" +add hier "concept" "sys" "dict" "a" "p" "pr" +add hier "concept" "sys" "dict" "a" "p" "pt" +add hier "concept" "sys" "dict" "a" "p" "pu" +add hier "concept" "sys" "dict" "a" "p" "py" +add hier "concept" "sys" "dict" "a" "q" +add hier "concept" "sys" "dict" "a" "q" "q" +add hier "concept" "sys" "dict" "a" "q" "qa" +add hier "concept" "sys" "dict" "a" "q" "qu" +add hier "concept" "sys" "dict" "a" "r" +add hier "concept" "sys" "dict" "a" "r" "r" +add hier "concept" "sys" "dict" "a" "r" "ra" +add hier "concept" "sys" "dict" "a" "r" "re" +add hier "concept" "sys" "dict" "a" "r" "rh" +add hier "concept" "sys" "dict" "a" "r" "ri" +add hier "concept" "sys" "dict" "a" "r" "ro" +add hier "concept" "sys" "dict" "a" "r" "ru" +add hier "concept" "sys" "dict" "a" "r" "ry" +add hier "concept" "sys" "dict" "a" "s" +add hier "concept" "sys" "dict" "a" "s" "s" +add hier "concept" "sys" "dict" "a" "s" "sa" +add hier "concept" "sys" "dict" "a" "s" "sc" +add hier "concept" "sys" "dict" "a" "s" "se" +add hier "concept" "sys" "dict" "a" "s" "sf" +add hier "concept" "sys" "dict" "a" "s" "sh" +add hier "concept" "sys" "dict" "a" "s" "si" +add hier "concept" "sys" "dict" "a" "s" "sk" +add hier "concept" "sys" "dict" "a" "s" "sl" +add hier "concept" "sys" "dict" "a" "s" "sm" +add hier "concept" "sys" "dict" "a" "s" "sn" +add hier "concept" "sys" "dict" "a" "s" "so" +add hier "concept" "sys" "dict" "a" "s" "sp" +add hier "concept" "sys" "dict" "a" "s" "sq" +add hier "concept" "sys" "dict" "a" "s" "st" +add hier "concept" "sys" "dict" "a" "s" "su" +add hier "concept" "sys" "dict" "a" "s" "sw" +add hier "concept" "sys" "dict" "a" "s" "sy" +add hier "concept" "sys" "dict" "a" "t" +add hier "concept" "sys" "dict" "a" "t" "t" +add hier "concept" "sys" "dict" "a" "t" "ta" +add hier "concept" "sys" "dict" "a" "t" "te" +add hier "concept" "sys" "dict" "a" "t" "th" +add hier "concept" "sys" "dict" "a" "t" "ti" +add hier "concept" "sys" "dict" "a" "t" "to" +add hier "concept" "sys" "dict" "a" "t" "tr" +add hier "concept" "sys" "dict" "a" "t" "tu" +add hier "concept" "sys" "dict" "a" "t" "tw" +add hier "concept" "sys" "dict" "a" "t" "ty" +add hier "concept" "sys" "dict" "a" "u" +add hier "concept" "sys" "dict" "a" "u" "u" +add hier "concept" "sys" "dict" "a" "u" "ua" +add hier "concept" "sys" "dict" "a" "u" "un" +add hier "concept" "sys" "dict" "a" "u" "up" +add hier "concept" "sys" "dict" "a" "u" "ur" +add hier "concept" "sys" "dict" "a" "v" +add hier "concept" "sys" "dict" "a" "v" "v" +add hier "concept" "sys" "dict" "a" "v" "va" +add hier "concept" "sys" "dict" "a" "v" "ve" +add hier "concept" "sys" "dict" "a" "v" "vi" +add hier "concept" "sys" "dict" "a" "v" "vo" +add hier "concept" "sys" "dict" "a" "v" "vu" +add hier "concept" "sys" "dict" "a" "w" +add hier "concept" "sys" "dict" "a" "w" "w" +add hier "concept" "sys" "dict" "a" "w" "wa" +add hier "concept" "sys" "dict" "a" "w" "we" +add hier "concept" "sys" "dict" "a" "w" "wh" +add hier "concept" "sys" "dict" "a" "w" "wi" +add hier "concept" "sys" "dict" "a" "w" "wo" +add hier "concept" "sys" "dict" "a" "w" "wr" +add hier "concept" "sys" "dict" "a" "w" "wu" +add hier "concept" "sys" "dict" "a" "x" +add hier "concept" "sys" "dict" "a" "x" "x" +add hier "concept" "sys" "dict" "a" "x" "xa" +add hier "concept" "sys" "dict" "a" "x" "xe" +add hier "concept" "sys" "dict" "a" "x" "xi" +add hier "concept" "sys" "dict" "a" "x" "xo" +add hier "concept" "sys" "dict" "a" "x" "xu" +add hier "concept" "sys" "dict" "a" "x" "xy" +add hier "concept" "sys" "dict" "a" "y" +add hier "concept" "sys" "dict" "a" "y" "y" +add hier "concept" "sys" "dict" "a" "y" "ya" +add hier "concept" "sys" "dict" "a" "y" "ye" +add hier "concept" "sys" "dict" "a" "y" "yi" +add hier "concept" "sys" "dict" "a" "y" "yo" +add hier "concept" "sys" "dict" "a" "y" "yu" +add hier "concept" "sys" "dict" "a" "z" +add hier "concept" "sys" "dict" "a" "z" "z" +add hier "concept" "sys" "dict" "a" "z" "za" +add hier "concept" "sys" "dict" "a" "z" "ze" +add hier "concept" "sys" "dict" "a" "z" "zi" +add hier "concept" "sys" "dict" "a" "z" "zo" +add hier "concept" "sys" "dict" "a" "z" "zu" +add hier "concept" "sys" "dict" "a" "z" "zy" +add hier "concept" "sys" "dict" "0" +add hier "concept" "sys" "dict" "0" "0" +add hier "concept" "sys" "dict" "0" "0" "0" +add hier "concept" "sys" "dict" "0" "0" "00" +add hier "concept" "sys" "dict" "0" "0" "01" +add hier "concept" "sys" "dict" "0" "0" "02" +add hier "concept" "sys" "dict" "0" "0" "03" +add hier "concept" "sys" "dict" "0" "0" "04" +add hier "concept" "sys" "dict" "0" "0" "05" +add hier "concept" "sys" "dict" "0" "0" "06" +add hier "concept" "sys" "dict" "0" "0" "07" +add hier "concept" "sys" "dict" "0" "0" "08" +add hier "concept" "sys" "dict" "0" "0" "09" +add hier "concept" "sys" "dict" "0" "1" +add hier "concept" "sys" "dict" "0" "1" "1" +add hier "concept" "sys" "dict" "0" "1" "10" +add hier "concept" "sys" "dict" "0" "1" "11" +add hier "concept" "sys" "dict" "0" "1" "12" +add hier "concept" "sys" "dict" "0" "1" "13" +add hier "concept" "sys" "dict" "0" "1" "14" +add hier "concept" "sys" "dict" "0" "1" "15" +add hier "concept" "sys" "dict" "0" "1" "16" +add hier "concept" "sys" "dict" "0" "1" "17" +add hier "concept" "sys" "dict" "0" "1" "18" +add hier "concept" "sys" "dict" "0" "1" "19" +add hier "concept" "sys" "dict" "0" "2" +add hier "concept" "sys" "dict" "0" "2" "2" +add hier "concept" "sys" "dict" "0" "2" "20" +add hier "concept" "sys" "dict" "0" "2" "21" +add hier "concept" "sys" "dict" "0" "2" "22" +add hier "concept" "sys" "dict" "0" "2" "23" +add hier "concept" "sys" "dict" "0" "2" "24" +add hier "concept" "sys" "dict" "0" "2" "25" +add hier "concept" "sys" "dict" "0" "2" "26" +add hier "concept" "sys" "dict" "0" "2" "27" +add hier "concept" "sys" "dict" "0" "2" "28" +add hier "concept" "sys" "dict" "0" "2" "29" +add hier "concept" "sys" "dict" "0" "3" +add hier "concept" "sys" "dict" "0" "3" "3" +add hier "concept" "sys" "dict" "0" "3" "30" +add hier "concept" "sys" "dict" "0" "3" "31" +add hier "concept" "sys" "dict" "0" "3" "32" +add hier "concept" "sys" "dict" "0" "3" "33" +add hier "concept" "sys" "dict" "0" "3" "34" +add hier "concept" "sys" "dict" "0" "3" "35" +add hier "concept" "sys" "dict" "0" "3" "36" +add hier "concept" "sys" "dict" "0" "3" "37" +add hier "concept" "sys" "dict" "0" "3" "38" +add hier "concept" "sys" "dict" "0" "3" "39" +add hier "concept" "sys" "dict" "0" "4" +add hier "concept" "sys" "dict" "0" "4" "4" +add hier "concept" "sys" "dict" "0" "4" "40" +add hier "concept" "sys" "dict" "0" "4" "41" +add hier "concept" "sys" "dict" "0" "4" "42" +add hier "concept" "sys" "dict" "0" "4" "43" +add hier "concept" "sys" "dict" "0" "4" "44" +add hier "concept" "sys" "dict" "0" "4" "45" +add hier "concept" "sys" "dict" "0" "4" "46" +add hier "concept" "sys" "dict" "0" "4" "47" +add hier "concept" "sys" "dict" "0" "4" "48" +add hier "concept" "sys" "dict" "0" "4" "49" +add hier "concept" "sys" "dict" "0" "5" +add hier "concept" "sys" "dict" "0" "5" "5" +add hier "concept" "sys" "dict" "0" "5" "50" +add hier "concept" "sys" "dict" "0" "5" "51" +add hier "concept" "sys" "dict" "0" "5" "52" +add hier "concept" "sys" "dict" "0" "5" "53" +add hier "concept" "sys" "dict" "0" "5" "54" +add hier "concept" "sys" "dict" "0" "5" "55" +add hier "concept" "sys" "dict" "0" "5" "56" +add hier "concept" "sys" "dict" "0" "5" "57" +add hier "concept" "sys" "dict" "0" "5" "58" +add hier "concept" "sys" "dict" "0" "5" "59" +add hier "concept" "sys" "dict" "0" "6" +add hier "concept" "sys" "dict" "0" "6" "6" +add hier "concept" "sys" "dict" "0" "6" "60" +add hier "concept" "sys" "dict" "0" "6" "61" +add hier "concept" "sys" "dict" "0" "6" "62" +add hier "concept" "sys" "dict" "0" "6" "63" +add hier "concept" "sys" "dict" "0" "6" "64" +add hier "concept" "sys" "dict" "0" "6" "65" +add hier "concept" "sys" "dict" "0" "6" "66" +add hier "concept" "sys" "dict" "0" "6" "67" +add hier "concept" "sys" "dict" "0" "6" "68" +add hier "concept" "sys" "dict" "0" "6" "69" +add hier "concept" "sys" "dict" "0" "7" +add hier "concept" "sys" "dict" "0" "7" "7" +add hier "concept" "sys" "dict" "0" "7" "70" +add hier "concept" "sys" "dict" "0" "7" "71" +add hier "concept" "sys" "dict" "0" "7" "72" +add hier "concept" "sys" "dict" "0" "7" "73" +add hier "concept" "sys" "dict" "0" "7" "74" +add hier "concept" "sys" "dict" "0" "7" "75" +add hier "concept" "sys" "dict" "0" "7" "76" +add hier "concept" "sys" "dict" "0" "7" "77" +add hier "concept" "sys" "dict" "0" "7" "78" +add hier "concept" "sys" "dict" "0" "7" "79" +add hier "concept" "sys" "dict" "0" "8" +add hier "concept" "sys" "dict" "0" "8" "8" +add hier "concept" "sys" "dict" "0" "8" "80" +add hier "concept" "sys" "dict" "0" "8" "81" +add hier "concept" "sys" "dict" "0" "8" "82" +add hier "concept" "sys" "dict" "0" "8" "83" +add hier "concept" "sys" "dict" "0" "8" "84" +add hier "concept" "sys" "dict" "0" "8" "85" +add hier "concept" "sys" "dict" "0" "8" "86" +add hier "concept" "sys" "dict" "0" "8" "87" +add hier "concept" "sys" "dict" "0" "8" "88" +add hier "concept" "sys" "dict" "0" "8" "89" +add hier "concept" "sys" "dict" "0" "9" +add hier "concept" "sys" "dict" "0" "9" "9" +add hier "concept" "sys" "dict" "0" "9" "90" +add hier "concept" "sys" "dict" "0" "9" "91" +add hier "concept" "sys" "dict" "0" "9" "92" +add hier "concept" "sys" "dict" "0" "9" "93" +add hier "concept" "sys" "dict" "0" "9" "94" +add hier "concept" "sys" "dict" "0" "9" "95" +add hier "concept" "sys" "dict" "0" "9" "96" +add hier "concept" "sys" "dict" "0" "9" "97" +add hier "concept" "sys" "dict" "0" "9" "98" +add hier "concept" "sys" "dict" "0" "9" "99" +add hier "concept" "sys" "dict" "A" +add hier "concept" "sys" "dict" "wht" +add hier "concept" "sys" "dict" "pnct" +add hier "concept" "sys" "dict" "ctrl" +add hier "concept" "sys" "dict" "unknown" + +quit + diff --git a/tests/analyzers/datum/kb/user/phr.kb b/tests/analyzers/datum/kb/user/phr.kb new file mode 100644 index 0000000..3b3c7fc --- /dev/null +++ b/tests/analyzers/datum/kb/user/phr.kb @@ -0,0 +1,3 @@ + +quit + diff --git a/tests/analyzers/datum/kb/user/word.kb b/tests/analyzers/datum/kb/user/word.kb new file mode 100644 index 0000000..36151ce --- /dev/null +++ b/tests/analyzers/datum/kb/user/word.kb @@ -0,0 +1,57 @@ +add word " +" +add word " " +add word " " +add word ">" +add word "<" +add word "/" +add word "\\" +add word "|" +add word "]" +add word "[" +add word "}" +add word "{" +add word "+" +add word "=" +add word "_" +add word "-" +add word ")" +add word "(" +add word "*" +add word "&" +add word "^" +add word "%" +add word "$" +add word "#" +add word "@" +add word "`" +add word "~" +add word "?" +add word "!" +add word "\"" +add word "'" +add word ":" +add word "," +add word "." +add word ";" +add word "closed" +add word "constrain" +add word "dirty" +add word "gen" +add word "lit" +add word "locked" +add word "quicksem" +add word "split" +add word "xwhite" +add word active +add word algo +add word building +add word comment +add word data +add word pass +add word passnum +add word state +add word type + +quit + diff --git a/tests/analyzers/datum/spec/analyzer.seq b/tests/analyzers/datum/spec/analyzer.seq new file mode 100644 index 0000000..bd07841 --- /dev/null +++ b/tests/analyzers/datum/spec/analyzer.seq @@ -0,0 +1,3 @@ +# +tokenize nil # Gen: Convert input to token list +nlp datum # Echo G("$datum") to the output buffer diff --git a/tests/analyzers/datum/spec/datum.nlp b/tests/analyzers/datum/spec/datum.nlp new file mode 100644 index 0000000..0aa7624 --- /dev/null +++ b/tests/analyzers/datum/spec/datum.nlp @@ -0,0 +1,7 @@ +# Echoes the datum the caller passed to analyze(), or "none". +@CODE +if (G("$datum")) + cbuf() << G("$datum"); +else + cbuf() << "none"; +@@CODE diff --git a/tests/data/emailaddress/text.txt_log/output.json b/tests/data/emailaddress/text.txt_log/output.json index d14eb3e..da87358 100644 --- a/tests/data/emailaddress/text.txt_log/output.json +++ b/tests/data/emailaddress/text.txt_log/output.json @@ -63,10 +63,14 @@ { "id": "10", "local": "kenethfpp", - "tld": "yahoo" + "subdomain": "mails", + "domainname": "yahoo", + "cd": "uk", + "country": "UnitedKingdom" }, { "id": "11", + "local": "charitysc123", "domainname": "243", "tld": "org" }, diff --git a/tests/test_engine.py b/tests/test_engine.py index e3c3c83..36eea3e 100644 --- a/tests/test_engine.py +++ b/tests/test_engine.py @@ -85,6 +85,25 @@ def test_links_parser(self): self._run_analyzer("links") +class DatumTest(TestCase): + """analyze(datum=...) reaches the analyzer as G("$datum") (issue #1).""" + + def test_datum(self): + with TemporaryDirectory(prefix="test-nlpplus", ignore_cleanup_errors=True) as tmp: + copytree(DATADIR.parent / "analyzers", Path(tmp) / "analyzers") + copytree(NLPPLUSDIR / "data", Path(tmp) / "data") + try: + NLPPlus.set_working_folder(tmp) + analyze = NLPPlus.engine.analyze + self.assertEqual(analyze("x", "datum", datum="json").output_text, "json") + self.assertEqual(analyze("x", "datum", datum="xml").output_text, "xml") + # Each call sets its own: none carries over from the last. + self.assertEqual(analyze("x", "datum").output_text, "none") + finally: + NLPPlus.engine.close() + NLPPlus.engine = NLPPlus.Engine() + + class ReentrancyRegressionTest(TestCase): """nlp-engine #658 / #632 regression.