Merge "Improve query language documentation"
diff --git a/.gitignore b/.gitignore
index 219d538..87ea481 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
cache/data
public
kalamar.*.conf
+kalamar.conf.json
script/hypnotoad.pid
.sass-cache
dev/css
diff --git a/Gruntfile.js b/Gruntfile.js
index af74d0e..830a0eb 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -14,26 +14,48 @@
* TODO: Implement a LaTeX generator for a pdf of the dokumentation
*/
-// Generate requireJS files for l10n
-var reqTasks = [];
-for (var i in {'en' : 0, 'de' : 1}) {
- reqTasks.push({
- options: {
- // optimize: "uglify",
- baseUrl: 'dev/js/src',
- paths : {
- 'lib': '../lib'
- },
- wrap:true,
- // dir : 'public/js',
- name: 'lib/almond',
- include : ['app/' + i],
- out: 'public/js/kalamar-<%= pkg.version %>-' + i + '.js'
- }
- })
-};
-
module.exports = function(grunt) {
+
+ var config;
+
+ try {
+ config = grunt.file.readJSON('kalamar.conf.json');
+ }
+ catch(err) {
+ console.log("Error: " + err);
+ config = {};
+ };
+
+ if (config["include"] === undefined) {
+ config["include"] = [
+ 'hint/foundries/base',
+ 'hint/foundries/dereko'
+ ];
+ };
+
+ // Generate requireJS files for l10n
+ var reqTasks = [];
+ for (var i in {'en' : 0, 'de' : 1}) {
+
+ var includeFiles = config["include"].slice();
+ includeFiles.push('app/' + i);
+
+ reqTasks.push({
+ options: {
+ // optimize: "uglify",
+ baseUrl: 'dev/js/src',
+ paths : {
+ 'lib': '../lib'
+ },
+ wrap:true,
+ // dir : 'public/js',
+ name: 'lib/almond',
+ include : includeFiles,
+ out: 'public/js/kalamar-<%= pkg.version %>-' + i + '.js'
+ }
+ })
+ };
+
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
requirejs: reqTasks,
diff --git a/dev/js/spec/hintSpec.js b/dev/js/spec/hintSpec.js
index 5df65fd..1ff9343 100644
--- a/dev/js/spec/hintSpec.js
+++ b/dev/js/spec/hintSpec.js
@@ -143,7 +143,7 @@
describe('KorAP.Hint', function () {
- KorAP.hintArray = {
+ KorAP.annotationHelper = {
"-" : [
["Base Annotation", "base/s=", "Structure"],
["CoreNLP", "corenlp/", "Constituency, Named Entities, Part-of-Speech"]
diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index aba3f1e..a60d7ab 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -295,6 +295,7 @@
// Highlight in the middle - both
menuItem = KorAP.ComplexMenuItem.create(['CoreNLP', 'corenlp/', 'This is my Example']);
menuItem.highlight("e");
+
expect(menuItem.element().innerHTML).toEqual("<div><h1>Cor<mark>e</mark>NLP</h1><h2>cor<mark>e</mark>nlp/</h2><h3>This is my <mark>E</mark>xampl<mark>e</mark></h3></div>");
menuItem.lowlight();
@@ -328,6 +329,21 @@
["Syntax", "syn="]
];
+ var listMultiPrefix = [
+ ["PP","PP ","Personal Pronoun"],
+ ["PPP","PPP ","Personal Pronoun, Plural"],
+ ["PPPA","PPPA ","Personal Pronoun, Plural, Acc."],
+ ["PPPD","PPPD ","Personal Pronoun, Plural, Dative"],
+ ["PPPR","PPPR ","Personal Pronoun, Plural, Direct"],
+ ["PPPO","PPPO ","Personal Pronoun, Plural, Oblique"],
+ ["PPS","PPS ","Personal Pronoun, Singular"],
+ ["PPSA","PPSA ","Personal Pronoun, Singular, Accusative"],
+ ["PPSD","PPSD ","Personal Pronoun, Singular, Dative"],
+ ["PPSR","PPSR ","Personal Pronoun, Singular, Direct"],
+ ["PPSN","PPSN ","Personal Pronoun, Singular, Nominative"],
+ ["PPSO","PPSO ","Personal Pronoun, Singular, Oblique"]
+ ];
+
var demolist = [
['Titel', 'title'],
['Untertitel', 'subTitle'],
@@ -784,7 +800,43 @@
expect(menu.shownItem(2)).toBe(undefined);
});
+ it('should be filterable (multiple prefix = "pro sin")', function () {
+ var menu = KorAP.HintMenu.create("drukola/p=", listMultiPrefix);
+ menu._firstActive = true;
+ menu.limit(2);
+ expect(menu.prefix("pro sin").show()).toBe(true);
+ expect(menu.shownItem(0).name()).toEqual("PPS");
+ expect(menu.element().childNodes[3].innerHTML).toEqual(
+ "<strong>PPS</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular</span>"
+ );
+
+ expect(menu.shownItem(0).active()).toBe(true);
+ expect(menu.shownItem(1).name()).toEqual("PPSA");
+ expect(menu.element().childNodes[4].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
+ expect(menu.shownItem(1).active()).toBe(false);
+
+ expect(menu.shownItem(2)).toBe(undefined);
+ });
+
+ it('should be filterable (trimming = " p")', function () {
+ var menu = KorAP.HintMenu.create("/p=", listMultiPrefix);
+ // menu._firstActive = true;
+
+ menu.limit(2);
+ expect(menu.show()).toBe(true);
+ menu._prefix.add(" ");
+ expect(menu.show()).toBe(true);
+ menu._prefix.add("p")
+ expect(menu.show()).toBe(true);
+ expect(menu.shownItem(0).name()).toEqual("PP");
+ expect(menu.element().childNodes[3].innerHTML).toEqual(
+ "<strong><mark>P</mark><mark>P</mark></strong>"+
+ "<span><mark>P</mark>ersonal <mark>P</mark>ronoun</span>"
+ );
+ });
+
+
it('should choose prefix with failing prefix (1)', function () {
var menu = KorAP.HintMenu.create("cnx/", list);
menu.limit(2);
diff --git a/dev/js/src/hint.js b/dev/js/src/hint.js
index 238b737..2ebc395 100644
--- a/dev/js/src/hint.js
+++ b/dev/js/src/hint.js
@@ -42,7 +42,7 @@
")?" +
")?" +
")$";
- KorAP.hintArray = KorAP.hintArray || {};
+ KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
/**
* Return keycode based on event
@@ -175,12 +175,12 @@
if (this._menu[action] === undefined) {
// No matching hint menu
- if (KorAP.hintArray[action] === undefined)
+ if (KorAP.annotationHelper[action] === undefined)
return;
// Create matching hint menu
this._menu[action] = menuClass.create(
- this, action, KorAP.hintArray[action]
+ this, action, KorAP.annotationHelper[action]
);
};
diff --git a/dev/js/src/hint/array.js b/dev/js/src/hint/array.js
deleted file mode 100644
index fcfe9a2..0000000
--- a/dev/js/src/hint/array.js
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
-var menuContent = [
- ['cnx/c', 'cnx', 'c'],
- ['mate/c', 'mate', 'c'],
- ['base/c', 'base', 'c'],
- ['xip/c', 'xip', 'c'],
- ['tt/c', 'tt', 'c']
-];
-*/
-
-var namedEntities = [
- ["I-LOC", "I-LOC ", "Location"],
- ["I-MISC", "I-MISC ", "Miscellaneous"],
- ["I-ORG", "I-ORG ", "Organization"],
- ["I-PER", "I-PER ", "Person"]
-];
-
-// http://www.ids-mannheim.de/cosmas2/projekt/referenz/stts/morph.html
-// http://nachhalt.sfb632.uni-potsdam.de/owl-docu/stts.html
-var sttsArray = [
- // "$.", "$(", "$,"
- ["ADJA","ADJA ", "Attributive Adjective"],
- ["ADJD","ADJD ", "Predicative Adjective"],
- ["ADV","ADV ", "Adverb"],
- ["APPO","APPO ", "Postposition"],
- ["APPR","APPR ", "Preposition"],
- ["APPRART","APPRART ", "Preposition with Determiner"],
- ["APZR","APZR ","Right Circumposition"],
- ["ART","ART ", "Determiner"],
- ["CARD","CARD ", "Cardinal Number"],
- ["FM","FM ", "Foreign Material"],
- ["ITJ","ITJ ", "Interjection"],
- ["KOKOM","KOKOM ", "Comparison Particle"],
- ["KON","KON ", "Coordinating Conjuncion"],
- ["KOUI","KOUI ", "Subordinating Conjunction with 'zu'"],
- ["KOUS","KOUS ", "Subordinating Conjunction with Sentence"],
- ["NE","NE ", "Named Entity"],
- ["NN","NN ", "Normal Nomina"],
- ["PAV", "PAV ", "Pronominal Adverb"],
- ["PDAT","PDAT ","Attributive Demonstrative Pronoun"],
- ["PDS","PDS ", "Substitutive Demonstrative Pronoun"],
- ["PIAT","PIAT ", "Attributive Indefinite Pronoun without Determiner"],
- ["PIDAT","PIDAT ", "Attributive Indefinite Pronoun with Determiner"],
- ["PIS","PIS ", "Substitutive Indefinite Pronoun"],
- ["PPER","PPER ", "Personal Pronoun"],
- ["PPOSAT","PPOSAT ", "Attributive Possessive Pronoun"],
- ["PPOSS","PPOSS ", "Substitutive Possessive Pronoun"],
- ["PRELAT","PRELAT ", "Attributive Relative Pronoun"],
- ["PRELS","PRELS ", "Substitutive Relative Pronoun"],
- ["PRF","PRF ", "Reflexive Pronoun"],
- ["PROAV","PROAV ", "Pronominal Adverb"],
- ["PTKA","PTKA ","Particle with Adjective"],
- ["PTKANT","PTKANT ", "Answering Particle"],
- ["PTKNEG","PTKNEG ", "Negation Particle"],
- ["PTKVZ","PTKVZ ", "Separated Verbal Particle"],
- ["PTKZU","PTKZU ", "'zu' Particle"],
- ["PWAT","PWAT ", "Attributive Interrogative Pronoun"],
- ["PWAV","PWAV ", "Adverbial Interrogative Pronoun"],
- ["PWS","PWS ", "Substitutive Interrogative Pronoun"],
- ["TRUNC","TRUNC ","Truncated"],
- ["VAFIN","VAFIN ", "Auxiliary Finite Verb"],
- ["VAIMP","VAIMP ", "Auxiliary Finite Imperative Verb"],
- ["VAINF","VAINF ", "Auxiliary Infinite Verb"],
- ["VAPP","VAPP ", "Auxiliary Perfect Participle"],
- ["VMFIN","VMFIN ", "Modal Finite Verb"],
- ["VMINF","VMINF ", "Modal Infinite Verb"],
- ["VMPP","VMPP ", "Modal Perfect Participle"],
- ["VVFIN","VVFIN ","Finite Verb"],
- ["VVIMP","VVIMP ", "Finite Imperative Verb"],
- ["VVINF","VVINF ", "Infinite Verb"],
- ["VVIZU","VVIZU ", "Infinite Verb with 'zu'"],
- ["VVPP","VVPP ", "Perfect Participle"],
- ["XY", "XY ", "Non-Word"]
-];
-
-
-// http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html
-// http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/knoten.html
-var negraNodes = [
- ["AA", "AA", "superlative phrase with 'am'"],
- ["AP","AP", "adjektive phrase"],
- ["AVP","AVP", "adverbial phrase"],
- ["CAP","CAP", "coordinated adjektive phrase"],
- ["CAVP","CAVP", "coordinated adverbial phrase"],
- ["CAC","CAC", "coordinated adposition"],
- ["CCP","CCP", "coordinated complementiser"],
- ["CH","CH", "chunk"],
- ["CNP","CNP", "coordinated noun phrase"],
- ["CO","CO", "coordination"],
- ["CPP","CPP", "coordinated adpositional phrase"],
- ["CS","CS", "coordinated sentence"],
- ["CVP","CVP", "coordinated verb phrase (non-finite)"],
- ["CVZ","CVZ", "coordinated zu-marked infinitive"],
- ["DL","DL", "discourse level constituent"],
- ["ISU","ISU", "idiosyncratis unit"],
- ["MPN","MPN", "multi-word proper noun"],
- ["MTA","MTA", "multi-token adjective"],
- ["NM","NM", "multi-token number"],
- ["NP","NP", "noun phrase"],
- ["PP","PP", "adpositional phrase"],
- ["QL","QL", "quasi-languag"],
- ["ROOT","ROOT", "root node"],
- ["S","S", "sentence"],
- ["VP","VP", "verb phrase (non-finite)"],
- ["VZ","VZ", "zu-marked infinitive"]
-];
-
-// http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/kanten.html
-var negraEdges = [
- ["AC","AC","adpositional case marker"],
- ["ADC","ADC","adjective component"],
- ["AMS","AMS","measure argument of adj"],
- ["APP","APP","apposition"],
- ["AVC","AVC","adverbial phrase component"],
- ["CC","CC","comparative complement"],
- ["CD","CD","coordinating conjunction"],
- ["CJ","CJ","conjunct"],
- ["CM","CM","comparative concjunction"],
- ["CP","CP","complementizer"],
- ["DA","DA","dative"],
- ["DH","DH","discourse-level head"],
- ["DM","DM","discourse marker"],
- ["GL","GL","prenominal genitive"],
- ["GR","GR","postnominal genitive"],
- ["HD","HD","head"],
- ["JU","JU","junctor"],
- ["MC","MC","comitative"],
- ["MI","MI","instrumental"],
- ["ML","ML","locative"],
- ["MNR","MNR","postnominal modifier"],
- ["MO","MO","modifier"],
- ["MR","MR","rhetorical modifier"],
- ["MW","MW","way (directional modifier)"],
- ["NG","NG","negation"],
- ["NK","NK","noun kernel modifier"],
- ["NMC","NMC","numerical component"],
- ["OA","OA","accusative object"],
- ["OA2","OA2","second accusative object"],
- ["OC","OC","clausal object"],
- ["OG","OG","genitive object"],
- ["PD","PD","predicate"],
- ["PG","PG","pseudo-genitive"],
- ["PH","PH","placeholder"],
- ["PM","PM","morphological particle"],
- ["PNC","PNC","proper noun component"],
- ["RC","RC","relative clause"],
- ["RE","RE","repeated element"],
- ["RS","RS","reported speech"],
- ["SB","SB","subject"],
- ["SBP","SBP","passivised subject (PP)"],
- ["SP","SP","subject or predicate"],
- ["SVP","SVP","separable verb prefix"],
- ["UC","UC","(idiosyncratic) unit component"],
- ["VO","VO","vocative"]
-];
-
-var mateSttsArray = sttsArray.slice(0);
-mateSttsArray.push(
- ["<root-POS>","<root-POS>","Root Part of Speech"]
-);
-
-var sgbrSttsArray = sttsArray.slice(0);
-
-// Push specific information for Schreibgebrauch
-sgbrSttsArray.push(
- ["NNE", "NNE", "Normal Nomina with Named Entity"],
- ["ADVART","ADVART", "Adverb with Article"],
- ["EMOASC","EMOASC", "ASCII emoticon"],
- ["EMOIMG","EMOIMG", "Graphic emoticon"],
- ["ERRTOK","ERRTOK", "Tokenisation Error"],
- ["HST", "HST", "Hashtag"],
- ["KOUSPPER","KOUSPPER", "Subordinating Conjunction (with Sentence) with Personal Pronoun"],
- ["ONO", "ONO", "Onomatopoeia"],
- ["PPERPPER","PPERPPER", "Personal Pronoun with Personal Pronoun"],
- ["URL", "URL", "Uniform Resource Locator"],
- ["VAPPER", "VAPPER", "Finite Auxiliary Verb with Personal Pronoun"],
- ["VMPPER", "VMPPER", "Fintite Modal Verb with Personal Pronoun"],
- ["VVPPER", "VVPPER", "Finite Full Verb with Personal Pronoun"],
- ["AW", "AW", "Interaction Word"],
- ["ADR", "ADR", "Addressing Term"],
- ["AWIND", "AWIND", "Punctuation Indicating Addressing Term"],
- ["ERRAW","ERRAW", "Part of Erroneously Separated Compound"]
- /*
- As KorAP currently doesn't support these tags, they could also be ommited
- ["_KOMMA", "_KOMMA", "Comma"],
- ["_SONST", "_SONST", "Intrasentential Punctuation Mark"],
- ["_ENDE", "_ENDE", "Punctuation Mark at the end of the Sentence"]
- */
-);
-
-// Sort by tag
-sgbrSttsArray.sort(function (a,b) { return a[0].localeCompare(b[0]) });
-
-define(function () {
- var obj = {
- "-" : [
- ["Base Annotation", "base/s=", "Structure"],
-// ["Connexor", "cnx/", "Constituency, Lemma, Morphology, Part-of-Speech, Syntax"],
- ["CoreNLP", "corenlp/", "Constituency, Named Entities, Part-of-Speech"],
- ["DeReKo", "dereko/s=", "Structure"],
- ["DRuKoLa", "drukola/", "Lemma, Morphology, Part-of-Speech"],
-// ["Mate", "mate/", "Lemma, Morphology, Part-of-Speech"],
- ["Malt", "malt/", "Dependency"],
- ["OpenNLP", "opennlp/", "Part-of-Speech"],
-// ["Schreibgebrauch", "sgbr/", "Lemma, Lemma Variants, Part-of-Speech"],
- ["TreeTagger", "tt/", "Lemma, Part-of-Speech"],
-// ["Xerox Parser", "xip/", "Constituency, Lemma, Part-of-Speech"]
- ["MarMoT", "marmot/", "Morphology, Part-of-Speech"],
- ],
- "base/s=" : [
- ["s", "s", "Sentence"],
- ["p", "p", "Paragraph"],
- ["t", "t", "Text"]
- ],
- "corenlp/" : [
- ["Constituency", "c="],
- ["Named Entity", "ne=" , "Combined"],
- ["Named Entity", "ne_dewac_175m_600=" , "ne_dewac_175m_600"],
- ["Named Entity", "ne_hgc_175m_600=", "ne_hgc_175m_600"],
- ["Part-of-Speech", "p="]
- ],
- "corenlp/ne=" : namedEntities,
- "corenlp/ne_dewac_175m_600=" : namedEntities,
- "corenlp/ne_hgc_175m_600=" : namedEntities,
- "corenlp/p=" : sttsArray,
- "corenlp/c=" : negraNodes,
- "cnx/" : [
- ["Constituency", "c="],
- ["Lemma", "l="],
- ["Morphology", "m="],
- ["Part-of-Speech", "p="],
- ["Syntax", "syn="]
- ],
- "cnx/c=" : [
- ["np", "np ", "Nominal Phrase"]
- ],
- // http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
- "cnx/m=" : [
- ["Abbr","Abbr ", "Nouns: Abbreviation"],
- ["CMP","CMP ", "Adjective: Comparative"],
- ["IMP", "IMP ", "Mood: Imperative"],
- ["IND", "IND ", "Mood: Indicative"],
- ["INF", "INF ", "Infinitive"],
- ["ORD","ORD ", "Numeral: Ordinal"],
- ["PAST", "PAST ", "Tense: past"],
- ["PCP", "PCP ", "Participle"],
- ["PERF", "PERF ", "Perfective Participle"],
- ["PL","PL ", "Nouns: Plural"],
- ["PRES", "PRES ", "Tense: present"],
- ["PROG", "PROG ", "Progressive Participle"],
- ["Prop","Prop ", "Nouns: Proper Noun"],
- ["SUB", "SUB ", "Mood: Subjunctive"],
- ["SUP","SUP ", "Adjective: Superlative"]
- ],
- // http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
- "cnx/p=" : [
- ["A", "A ", "Adjective"],
- ["ADV", "ADV ", "Adverb"],
- ["CC", "CC ", "Coordination Marker"],
- ["CS", "CS ", "Clause Marker"],
- ["DET", "DET ", "Determiner"],
- ["INTERJ", "INTERJ ", "Interjection"],
- ["N", "N ", "Noun"],
- ["NUM", "NUM ", "Numeral"],
- ["PREP", "PREP ", "Preposition"],
- ["PRON", "PRON ", "Pro-Nominal"],
- ["V", "V ", "Verb"]
- ],
- // http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/syntax.html
- "cnx/syn=" : [
- ["@ADVL", "@ADVL ", "Adverbial Head"],
- ["@AUX", "@AUX ", "Auxiliary Verb"],
- ["@CC", "@CC ", "Coordination"]
- ["@MAIN", "@MAIN ", "Main Verb"],
- ["@NH", "@NH ", "Nominal Head"],
- ["@POSTMOD", "@POSTMOD ", "Postmodifier"],
- ["@PREMARK", "@PREMARK ", "Preposed Marker"],
- ["@PREMOD", "@POSTMOD ", "Premodifier"]
- ],
- "drukola/" : [
- ["Lemma", "l="],
- ["Morphology", "m="],
- ["Part-of-Speech", "p="]
- ],
- "opennlp/" : [
- ["Part-of-Speech", "p="]
- ],
- "opennlp/p=" : sttsArray,
- "sgbr/" : [
- ["Lemma", "l="],
- ["Lemma Variants", "lv="],
- ["Part-of-Speech", "p="]
- ],
- "sgbr/p=" : sgbrSttsArray,
- "xip/" : [
- ["Constituency", "c="],
- // Inactive: ["Dependency", "d="],
- ["Lemma", "l="],
- ["Part-of-Speech", "p="],
- ],
- // "xip/c=" : [],
- // Inactive: "xip/d=" : [],
- // "xip/p=" : [],
- "tt/" : [
- ["Lemma", "l="],
- ["Part-of-Speech", "p="]
- ],
- "tt/p=" : sttsArray,
- "marmot/" : [
- ["Morphology", "m="],
- ["Part-of-Speech", "p="]
- ],
- "marmot/p=" : sttsArray,
- "malt/" : [
- ["Dependency", "d="]
- ],
- "mate/" : [
- // Inactive: "d" : ["d=", "Dependency"],
- ["Lemma", "l="],
- ["Morphology", "m="],
- ["Part-of-Speech", "p="]
- ],
- // Inactive: mate/d=
- "mate/p=" : mateSttsArray,
- "mate/m=" : [
- ["Case", "case:"],
- ["Degree", "degree:"],
- ["Gender", "gender:"],
- ["Mood", "mood:"],
- ["Number", "number:"],
- ["Person", "person:"],
- ["Tense","tense:"],
- ["No type", "<no-type> "]
- ],
- "marmot/m=" : [
- ["Case", "case:"],
- ["Degree", "degree:"],
- ["Gender", "gender:"],
- ["Mood", "mood:"],
- ["Number", "number:"],
- ["Person", "person:"],
- ["Tense","tense:"],
- ["No type", "<no-type> "]
- ],
- "mate/m=case:" : [
- ["acc", "acc ", "Accusative"],
- ["dat","dat ", "Dative"],
- ["gen", "gen ","Genitive"],
- ["nom","nom ", "Nominative"],
- ["*","* ", "Undefined"]
- ],
- "marmot/m=case:" : [
- ["acc", "acc ", "Accusative"],
- ["dat","dat ", "Dative"],
- ["gen", "gen ","Genitive"],
- ["nom","nom ", "Nominative"],
- ["*","* ", "Undefined"]
- ],
- "mate/m=degree:" : [
- ["comp","comp ", "Comparative"],
- ["pos","pos ", "Positive"],
- ["sup","sup ", "Superative"]
- ],
- "marmot/m=degree:" : [
- ["comp","comp ", "Comparative"],
- ["pos","pos ", "Positive"],
- ["sup","sup ", "Superative"]
- ],
- "mate/m=gender:" : [
- ["fem", "fem ", "Feminium"],
- ["masc", "masc ", "Masculinum"],
- ["neut","neut ", "Neuter"],
- ["*","* ","Undefined"]
- ],
- "marmot/m=gender:" : [
- ["fem", "fem ", "Feminium"],
- ["masc", "masc ", "Masculinum"],
- ["neut","neut ", "Neuter"],
- ["*","* ","Undefined"]
- ],
- "mate/m=mood:" : [
- ["imp","imp ", "Imperative"],
- ["ind","ind ", "Indicative"],
- ["subj","subj ", "Subjunctive"]
- ],
- "marmot/m=mood:" : [
- ["imp","imp ", "Imperative"],
- ["ind","ind ", "Indicative"],
- ["subj","subj ", "Subjunctive"]
- ],
- "mate/m=number:" : [
- ["pl","pl ","Plural"],
- ["sg","sg ","Singular"],
- ["*","* ","Undefined"]
- ],
- "marmot/m=number" : [
- ["pl","pl ","Plural"],
- ["sg","sg ","Singular"],
- ["*","* ","Undefined"]
- ],
- "mate/m=person:" : [
- ["1","1 ", "First Person"],
- ["2","2 ", "Second Person"],
- ["3","3 ", "Third Person"]
- ],
- "marmot/m=person:" : [
- ["1","1 ", "First Person"],
- ["2","2 ", "Second Person"],
- ["3","3 ", "Third Person"]
- ],
- "mate/m=tense:" : [
- ["past","past ", "Past"],
- ["pres","pres ", "Present"]
- ],
- "marmot/m=tense:" : [
- ["past","past ", "Past"],
- ["pres","pres ", "Present"]
- ],
- "malt/d=" : [
- ["-PUNCT-", "-PUNCT- "],
- ["-UNKNOWN-","-UNKNOWN- "],
- ["ADV","ADV "],
- ["APP","APP "],
- ["ATTR","ATTR "],
- ["AUX","AUX "],
- ["AVZ","AVZ "],
- ["CJ","CJ "],
- ["DET","DET "],
- ["EXPL","EXPL "],
- ["GMOD","GMOD "],
- ["GRAD","GRAD "],
- ["KOM","KOM "],
- ["KON","KON "],
- ["KONJ","KONJ "],
- ["NEB","NEB "],
- ["OBJA","OBJA "],
- ["OBJC","OBJC "],
- ["OBJD","OBJD "],
- ["OBJG","OBJG "],
- ["OBJI","OBJI "],
- ["OBJP","OBJP "],
- ["PAR","PAR "],
- ["PART","PART "],
- ["PN","PN "],
- ["PP","PP "],
- ["PRED","PRED "],
- ["REL","REL "],
- ["ROOT","ROOT "],
- ["S","S "],
- ["SUBJ","SUBJ "],
- ["SUBJC","SUBJC "],
- ["ZEIT","ZEIT "],
- ["gmod-app","gmod-app "],
- ["koord","koord "]
- ]
- };
-
- for (var i in negraNodes) {
- obj["corenlp/c=" + negraNodes[i][0] + '-'] = negraEdges;
- };
-
- return obj;
-});
diff --git a/dev/js/src/hint/foundries/base.js b/dev/js/src/hint/foundries/base.js
new file mode 100644
index 0000000..0bb26fc
--- /dev/null
+++ b/dev/js/src/hint/foundries/base.js
@@ -0,0 +1,11 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+ ["Base Annotation", "base/s=", "Structure"]
+);
+
+ah["base/s="] = [
+ ["s", "s", "Sentence"],
+ ["p", "p", "Paragraph"],
+ ["t", "t", "Text"]
+];
diff --git a/dev/js/src/hint/foundries/cnx.js b/dev/js/src/hint/foundries/cnx.js
new file mode 100644
index 0000000..0c6f8cb
--- /dev/null
+++ b/dev/js/src/hint/foundries/cnx.js
@@ -0,0 +1,63 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+ ["Connexor", "cnx/", "Constituency, Lemma, Morphology, Part-of-Speech, Syntax"]
+);
+
+ah["cnx/"] = [
+ ["Constituency", "c="],
+ ["Lemma", "l="],
+ ["Morphology", "m="],
+ ["Part-of-Speech", "p="],
+ ["Syntax", "syn="]
+];
+
+ah["cnx/c="] = [
+ ["np", "np ", "Nominal Phrase"]
+];
+
+// http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
+ah["cnx/m="] = [
+ ["Abbr","Abbr ", "Nouns: Abbreviation"],
+ ["CMP","CMP ", "Adjective: Comparative"],
+ ["IMP", "IMP ", "Mood: Imperative"],
+ ["IND", "IND ", "Mood: Indicative"],
+ ["INF", "INF ", "Infinitive"],
+ ["ORD","ORD ", "Numeral: Ordinal"],
+ ["PAST", "PAST ", "Tense: past"],
+ ["PCP", "PCP ", "Participle"],
+ ["PERF", "PERF ", "Perfective Participle"],
+ ["PL","PL ", "Nouns: Plural"],
+ ["PRES", "PRES ", "Tense: present"],
+ ["PROG", "PROG ", "Progressive Participle"],
+ ["Prop","Prop ", "Nouns: Proper Noun"],
+ ["SUB", "SUB ", "Mood: Subjunctive"],
+ ["SUP","SUP ", "Adjective: Superlative"]
+];
+
+// http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/morph.html
+ah["cnx/p="] = [
+ ["A", "A ", "Adjective"],
+ ["ADV", "ADV ", "Adverb"],
+ ["CC", "CC ", "Coordination Marker"],
+ ["CS", "CS ", "Clause Marker"],
+ ["DET", "DET ", "Determiner"],
+ ["INTERJ", "INTERJ ", "Interjection"],
+ ["N", "N ", "Noun"],
+ ["NUM", "NUM ", "Numeral"],
+ ["PREP", "PREP ", "Preposition"],
+ ["PRON", "PRON ", "Pro-Nominal"],
+ ["V", "V ", "Verb"]
+];
+
+// http://www.ids-mannheim.de/cosmas2/projekt/referenz/connexor/syntax.html
+ah["cnx/syn="] = [
+ ["@ADVL", "@ADVL ", "Adverbial Head"],
+ ["@AUX", "@AUX ", "Auxiliary Verb"],
+ ["@CC", "@CC ", "Coordination"]
+ ["@MAIN", "@MAIN ", "Main Verb"],
+ ["@NH", "@NH ", "Nominal Head"],
+ ["@POSTMOD", "@POSTMOD ", "Postmodifier"],
+ ["@PREMARK", "@PREMARK ", "Preposed Marker"],
+ ["@PREMOD", "@POSTMOD ", "Premodifier"]
+];
diff --git a/dev/js/src/hint/foundries/corenlp.js b/dev/js/src/hint/foundries/corenlp.js
new file mode 100644
index 0000000..b591c62
--- /dev/null
+++ b/dev/js/src/hint/foundries/corenlp.js
@@ -0,0 +1,112 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+ var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ var namedEntities = [
+ ["I-LOC", "I-LOC ", "Location"],
+ ["I-MISC", "I-MISC ", "Miscellaneous"],
+ ["I-ORG", "I-ORG ", "Organization"],
+ ["I-PER", "I-PER ", "Person"]
+ ];
+
+ // http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html
+ // http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/knoten.html
+ var negraNodes = [
+ ["AA", "AA", "superlative phrase with 'am'"],
+ ["AP","AP", "adjektive phrase"],
+ ["AVP","AVP", "adverbial phrase"],
+ ["CAP","CAP", "coordinated adjektive phrase"],
+ ["CAVP","CAVP", "coordinated adverbial phrase"],
+ ["CAC","CAC", "coordinated adposition"],
+ ["CCP","CCP", "coordinated complementiser"],
+ ["CH","CH", "chunk"],
+ ["CNP","CNP", "coordinated noun phrase"],
+ ["CO","CO", "coordination"],
+ ["CPP","CPP", "coordinated adpositional phrase"],
+ ["CS","CS", "coordinated sentence"],
+ ["CVP","CVP", "coordinated verb phrase (non-finite)"],
+ ["CVZ","CVZ", "coordinated zu-marked infinitive"],
+ ["DL","DL", "discourse level constituent"],
+ ["ISU","ISU", "idiosyncratis unit"],
+ ["MPN","MPN", "multi-word proper noun"],
+ ["MTA","MTA", "multi-token adjective"],
+ ["NM","NM", "multi-token number"],
+ ["NP","NP", "noun phrase"],
+ ["PP","PP", "adpositional phrase"],
+ ["QL","QL", "quasi-languag"],
+ ["ROOT","ROOT", "root node"],
+ ["S","S", "sentence"],
+ ["VP","VP", "verb phrase (non-finite)"],
+ ["VZ","VZ", "zu-marked infinitive"]
+ ];
+
+ // http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/kanten.html
+ var negraEdges = [
+ ["AC","AC","adpositional case marker"],
+ ["ADC","ADC","adjective component"],
+ ["AMS","AMS","measure argument of adj"],
+ ["APP","APP","apposition"],
+ ["AVC","AVC","adverbial phrase component"],
+ ["CC","CC","comparative complement"],
+ ["CD","CD","coordinating conjunction"],
+ ["CJ","CJ","conjunct"],
+ ["CM","CM","comparative concjunction"],
+ ["CP","CP","complementizer"],
+ ["DA","DA","dative"],
+ ["DH","DH","discourse-level head"],
+ ["DM","DM","discourse marker"],
+ ["GL","GL","prenominal genitive"],
+ ["GR","GR","postnominal genitive"],
+ ["HD","HD","head"],
+ ["JU","JU","junctor"],
+ ["MC","MC","comitative"],
+ ["MI","MI","instrumental"],
+ ["ML","ML","locative"],
+ ["MNR","MNR","postnominal modifier"],
+ ["MO","MO","modifier"],
+ ["MR","MR","rhetorical modifier"],
+ ["MW","MW","way (directional modifier)"],
+ ["NG","NG","negation"],
+ ["NK","NK","noun kernel modifier"],
+ ["NMC","NMC","numerical component"],
+ ["OA","OA","accusative object"],
+ ["OA2","OA2","second accusative object"],
+ ["OC","OC","clausal object"],
+ ["OG","OG","genitive object"],
+ ["PD","PD","predicate"],
+ ["PG","PG","pseudo-genitive"],
+ ["PH","PH","placeholder"],
+ ["PM","PM","morphological particle"],
+ ["PNC","PNC","proper noun component"],
+ ["RC","RC","relative clause"],
+ ["RE","RE","repeated element"],
+ ["RS","RS","reported speech"],
+ ["SB","SB","subject"],
+ ["SBP","SBP","passivised subject (PP)"],
+ ["SP","SP","subject or predicate"],
+ ["SVP","SVP","separable verb prefix"],
+ ["UC","UC","(idiosyncratic) unit component"],
+ ["VO","VO","vocative"]
+ ];
+
+ ah["-"].push(
+ ["CoreNLP", "corenlp/", "Constituency, Named Entities, Part-of-Speech"]
+ );
+
+ ah["corenlp/"] = [
+ ["Constituency", "c="],
+ ["Named Entity", "ne=" , "Combined"],
+ ["Named Entity", "ne_dewac_175m_600=" , "ne_dewac_175m_600"],
+ ["Named Entity", "ne_hgc_175m_600=", "ne_hgc_175m_600"],
+ ["Part-of-Speech", "p="]
+ ];
+
+ ah["corenlp/ne="] = namedEntities;
+ ah["corenlp/ne_dewac_175m_600="] = namedEntities;
+ ah["corenlp/ne_hgc_175m_600="] = namedEntities;
+ ah["corenlp/p="] = sttsArray;
+ ah["corenlp/c="] = negraNodes;
+
+ for (var i in negraNodes) {
+ ah["corenlp/c=" + negraNodes[i][0] + '-'] = negraEdges;
+ };
+});
diff --git a/dev/js/src/hint/foundries/dereko.js b/dev/js/src/hint/foundries/dereko.js
new file mode 100644
index 0000000..c8afe08
--- /dev/null
+++ b/dev/js/src/hint/foundries/dereko.js
@@ -0,0 +1,5 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+ ["DeReKo", "dereko/s=", "Structure"]
+);
diff --git a/dev/js/src/hint/foundries/drukola.js b/dev/js/src/hint/foundries/drukola.js
new file mode 100644
index 0000000..2fec26d
--- /dev/null
+++ b/dev/js/src/hint/foundries/drukola.js
@@ -0,0 +1,105 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+ ["DRuKoLa", "drukola/", "Lemma, Morphology, Part-of-Speech"]
+);
+
+ah["drukola/"] = [
+ ["Lemma", "l="],
+ ["Morphology", "m="],
+ ["Part-of-Speech", "p="]
+];
+
+ah["drukola/m="] = [
+ ["CTAG", "ctag:"]
+];
+
+ah["drukola/m=ctag:"] = [
+ ["A","A ","Adjective"],
+ ["Y","Y ","Abbreviation"],
+ ["AN","AN ","Adjective, Indefinite"],
+ ["APRY","APRY ","Adjective, Plural, Direct, Definite"],
+ ["APN","APN ","Adjective, Plural, Indefinite"],
+ ["APOY","APOY ","Adjective, Plural, Oblique, Definite"],
+ ["APON","APON ","Adjective, Plural, Oblique, Indefinite"],
+ ["ASRY","ASRY ","Adjective, Singular, Direct, Definite"],
+ ["ASN","ASN ","Adjective, Singular, Indefinite"],
+ ["ASOY","ASOY ","Adjective, Singular, Oblique, Definite"],
+ ["ASON","ASON ","Adjective, Singular, Oblique, Indefinite"],
+ ["ASVY","ASVY ","Adjective, Singular, Vocative, Definite"],
+ ["ASVN","ASVN ","Adjective, Singular, Vocative, Indefinite"],
+ ["R","R ","Adverb"],
+ ["RC","RC ","Adverb, Portmanteau"],
+ ["TS","TS ","Article, Definite or Possessive, Singular"],
+ ["TP","TP ","Article, Indefinite or Possessive, Plural"],
+ ["TPR","TPR ","Article, non-Possessive, Plural, Direct"],
+ ["TPO","TPO ","Article, non-Possessive, Plural, Oblique"],
+ ["TSR","TSR ","Article, non-Possessive, Singular, Direct"],
+ ["TSO","TSO ","Article, non-Possessive, Singular, Oblique"],
+ ["NPRY","NPRY ","Common Noun, Plural, Direct, Definite"],
+ ["NPN","NPN ","Common Noun, Plural, Indefinite"],
+ ["NPOY","NPOY ","Common Noun, Plural, Oblique, Definite"],
+ ["NPVY","NPVY ","Common Noun, Plural, Vocative, Definite"],
+ ["NN","NN ","Common Noun, singular"],
+ ["NSY","NSY ","Common Noun, Singular, Definite"],
+ ["NSRY","NSRY ","Common Noun, Singular, Direct, Definite"],
+ ["NSRN","NSRN ","Common Noun, Singular, Direct, Indefinite"],
+ ["NSN","NSN ","Common Noun, Singular, Indefinite"],
+ ["NSOY","NSOY ","Common Noun, Singular, Oblique, Definite"],
+ ["NSON","NSON ","Common Noun, Singular, Oblique, Indefinite"],
+ ["NSVY","NSVY ","Common Noun, Singular, Vocative, Definite"],
+ ["NSVN","NSVN ","Common Noun, Singular, Vocative, Indefinite"],
+ ["CR","CR ","Conjunctio, portmanteau"],
+ ["C","C ","Conjunction"],
+ ["QF","QF ","Future Particle"],
+ ["QN","QN ","Infinitival Particle"],
+ ["I","I ","Interjection"],
+ ["QZ","QZ ","Negative Particle"],
+ ["M","M ","Numeral"],
+ ["PP","PP ","Personal Pronoun"],
+ ["PPP","PPP ","Personal Pronoun, Plural"],
+ ["PPPA","PPPA ","Personal Pronoun, Plural, Acc."],
+ ["PPPD","PPPD ","Personal Pronoun, Plural, Dative"],
+ ["PPPR","PPPR ","Personal Pronoun, Plural, Direct"],
+ ["PPPO","PPPO ","Personal Pronoun, Plural, Oblique"],
+ ["PPS","PPS ","Personal Pronoun, Singular"],
+ ["PPSA","PPSA ","Personal Pronoun, Singular, Accusative"],
+ ["PPSD","PPSD ","Personal Pronoun, Singular, Dative"],
+ ["PPSR","PPSR ","Personal Pronoun, Singular, Direct"],
+ ["PPSN","PPSN ","Personal Pronoun, Singular, Nominative"],
+ ["PPSO","PPSO ","Personal Pronoun, Singular, Oblique"],
+ ["S","S ","Preposition"],
+ ["DMPR","DMPR ","Pronoun or Determiner, Demonstrative, Plural, Direct"],
+ ["DMPO","DMPO ","Pronoun or Determiner, Demonstrative, Plural, Oblique"],
+ ["DMSR","DMSR ","Pronoun or Determiner, Demonstrative, Singular, Direct"],
+ ["DMSO","DMSO ","Pronoun or Determiner, Demonstrative, Singular, Oblique"],
+ ["PS","PS ","Pronoun or Determiner, Poss or Emph"],
+ ["PSS","PSS ","Pronoun or Determiner, Poss or Emph, Singular"],
+ ["RELR","RELR ","Pronoun or Determiner, Relative, Direct"],
+ ["RELO","RELO ","Pronoun or Determiner, Relative, Oblique"],
+ ["NP","NP ","Proper Noun"],
+ ["PI","PI ","Quantifier Pronoun or Determiner"],
+ ["PXA","PXA ","Reflexive Pronoun, Accusative"],
+ ["PXD","PXD ","Reflexive Pronoun, Dative"],
+ ["X","X ","Residual"],
+ ["QS","QS ","Subjunctive Particle"],
+ ["VA","VA ","Verb, Auxiliary"],
+ ["VA1","VA1 ","Verb, Auxiliary, 1st person"],
+ ["VA2P","VA2P ","Verb, Auxiliary, 2nd person, Plural"],
+ ["VA2S","VA2S ","Verb, Auxiliary, 2nd person, Singular"],
+ ["VA3","VA3 ","Verb, Auxiliary, 3rd person"],
+ ["VA3P","VA3P ","Verb, Auxiliary, 3rd person, Plural"],
+ ["VA3S","VA3S ","Verb, Auxiliary, 3rd person, Singular"],
+ ["VA1P","VA1P ","Verb, Auxiliary,1st person, Plural"],
+ ["VA1S","VA1S ","Verb, Auxiliary,1st person, Singular"],
+ ["VG","VG ","Verb, Gerund"],
+ ["VN","VN ","Verb, Infinitive"],
+ ["V1","V1 ","Verb, Main, 1st person"],
+ ["V2","V2 ","Verb, Main, 2nd person"],
+ ["V3","V3 ","Verb, Main, 3rd person"],
+ ["VPPF","VPPF ","Verb, Participle, Plural, Feminine"],
+ ["VPPM","VPPM ","Verb, Participle, Plural, Masculine"],
+ ["VPSF","VPSF ","Verb, Participle, Singular, Feminine"],
+ ["VPSM","VPSM ","Verb, Participle, Singular, Masculine"]
+];
+
diff --git a/dev/js/src/hint/foundries/malt.js b/dev/js/src/hint/foundries/malt.js
new file mode 100644
index 0000000..c81df9e
--- /dev/null
+++ b/dev/js/src/hint/foundries/malt.js
@@ -0,0 +1,47 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+ ["Malt", "malt/", "Dependency"]
+);
+
+ah["malt/"] = [
+ ["Dependency", "d="]
+];
+
+ah["malt/d="] = [
+ ["-PUNCT-", "-PUNCT- "],
+ ["-UNKNOWN-","-UNKNOWN- "],
+ ["ADV","ADV "],
+ ["APP","APP "],
+ ["ATTR","ATTR "],
+ ["AUX","AUX "],
+ ["AVZ","AVZ "],
+ ["CJ","CJ "],
+ ["DET","DET "],
+ ["EXPL","EXPL "],
+ ["GMOD","GMOD "],
+ ["GRAD","GRAD "],
+ ["KOM","KOM "],
+ ["KON","KON "],
+ ["KONJ","KONJ "],
+ ["NEB","NEB "],
+ ["OBJA","OBJA "],
+ ["OBJC","OBJC "],
+ ["OBJD","OBJD "],
+ ["OBJG","OBJG "],
+ ["OBJI","OBJI "],
+ ["OBJP","OBJP "],
+ ["PAR","PAR "],
+ ["PART","PART "],
+ ["PN","PN "],
+ ["PP","PP "],
+ ["PRED","PRED "],
+ ["REL","REL "],
+ ["ROOT","ROOT "],
+ ["S","S "],
+ ["SUBJ","SUBJ "],
+ ["SUBJC","SUBJC "],
+ ["ZEIT","ZEIT "],
+ ["gmod-app","gmod-app "],
+ ["koord","koord "]
+];
diff --git a/dev/js/src/hint/foundries/marmot.js b/dev/js/src/hint/foundries/marmot.js
new file mode 100644
index 0000000..0b80292
--- /dev/null
+++ b/dev/js/src/hint/foundries/marmot.js
@@ -0,0 +1,69 @@
+require(["hint/foundries/stts"], function () {
+ var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ ah["-"].push(
+ ["MarMoT", "marmot/", "Morphology, Part-of-Speech"]
+ );
+
+ ah["marmot/"] = [
+ ["Morphology", "m="],
+ ["Part-of-Speech", "p="]
+ ];
+
+ ah["marmot/p="] = sttsArray;
+
+ ah["marmot/m="] = [
+ ["Case", "case:"],
+ ["Degree", "degree:"],
+ ["Gender", "gender:"],
+ ["Mood", "mood:"],
+ ["Number", "number:"],
+ ["Person", "person:"],
+ ["Tense","tense:"],
+ ["No type", "<no-type> "]
+ ];
+
+ ah["marmot/m=case:"] = [
+ ["acc", "acc ", "Accusative"],
+ ["dat","dat ", "Dative"],
+ ["gen", "gen ","Genitive"],
+ ["nom","nom ", "Nominative"],
+ ["*","* ", "Undefined"]
+ ];
+
+ ah["marmot/m=degree:"] = [
+ ["comp","comp ", "Comparative"],
+ ["pos","pos ", "Positive"],
+ ["sup","sup ", "Superative"]
+ ];
+
+ ah["marmot/m=gender:"] = [
+ ["fem", "fem ", "Feminium"],
+ ["masc", "masc ", "Masculinum"],
+ ["neut","neut ", "Neuter"],
+ ["*","* ","Undefined"]
+ ];
+
+ ah["marmot/m=mood:"] = [
+ ["imp","imp ", "Imperative"],
+ ["ind","ind ", "Indicative"],
+ ["subj","subj ", "Subjunctive"]
+ ];
+
+ ah["marmot/m=number"] = [
+ ["pl","pl ","Plural"],
+ ["sg","sg ","Singular"],
+ ["*","* ","Undefined"]
+ ];
+
+ ah["marmot/m=person:"] = [
+ ["1","1 ", "First Person"],
+ ["2","2 ", "Second Person"],
+ ["3","3 ", "Third Person"]
+ ];
+
+ ah["marmot/m=tense:"] = [
+ ["past","past ", "Past"],
+ ["pres","pres ", "Present"]
+ ];
+});
diff --git a/dev/js/src/hint/foundries/mate.js b/dev/js/src/hint/foundries/mate.js
new file mode 100644
index 0000000..d837fd7
--- /dev/null
+++ b/dev/js/src/hint/foundries/mate.js
@@ -0,0 +1,76 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+ var mateSttsArray = sttsArray.slice(0);
+ mateSttsArray.push(
+ ["<root-POS>","<root-POS>","Root Part of Speech"]
+ );
+
+ var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ ah["-"].push(
+ ["Mate", "mate/", "Lemma, Morphology, Part-of-Speech"]
+ );
+
+ ah["mate/"] = [
+ // Inactive: "d" : ["d=", "Dependency"],
+ ["Lemma", "l="],
+ ["Morphology", "m="],
+ ["Part-of-Speech", "p="]
+ ];
+
+ // Inactive: mate/d=
+ ah["mate/p="] = mateSttsArray;
+
+ ah["mate/m="] = [
+ ["Case", "case:"],
+ ["Degree", "degree:"],
+ ["Gender", "gender:"],
+ ["Mood", "mood:"],
+ ["Number", "number:"],
+ ["Person", "person:"],
+ ["Tense","tense:"],
+ ["No type", "<no-type> "]
+ ];
+
+ ah["mate/m=case:"] = [
+ ["acc", "acc ", "Accusative"],
+ ["dat","dat ", "Dative"],
+ ["gen", "gen ","Genitive"],
+ ["nom","nom ", "Nominative"],
+ ["*","* ", "Undefined"]
+ ];
+
+ ah["mate/m=degree:"] = [
+ ["comp","comp ", "Comparative"],
+ ["pos","pos ", "Positive"],
+ ["sup","sup ", "Superative"]
+ ];
+
+ ah["mate/m=gender:"] = [
+ ["fem", "fem ", "Feminium"],
+ ["masc", "masc ", "Masculinum"],
+ ["neut","neut ", "Neuter"],
+ ["*","* ","Undefined"]
+ ];
+
+ ah["mate/m=mood:"] = [
+ ["imp","imp ", "Imperative"],
+ ["ind","ind ", "Indicative"],
+ ["subj","subj ", "Subjunctive"]
+ ];
+
+ ah["mate/m=number:"] = [
+ ["pl","pl ","Plural"],
+ ["sg","sg ","Singular"],
+ ["*","* ","Undefined"]
+ ];
+
+ ah["mate/m=person:"] = [
+ ["1","1 ", "First Person"],
+ ["2","2 ", "Second Person"],
+ ["3","3 ", "Third Person"]
+ ];
+ ah["mate/m=tense:"] = [
+ ["past","past ", "Past"],
+ ["pres","pres ", "Present"]
+ ];
+});
diff --git a/dev/js/src/hint/foundries/opennlp.js b/dev/js/src/hint/foundries/opennlp.js
new file mode 100644
index 0000000..267bf8d
--- /dev/null
+++ b/dev/js/src/hint/foundries/opennlp.js
@@ -0,0 +1,14 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+
+ var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ ah["-"].push(
+ ["OpenNLP", "opennlp/", "Part-of-Speech"]
+ );
+
+ ah["opennlp/"] = [
+ ["Part-of-Speech", "p="]
+ ];
+
+ ah["opennlp/p="] = sttsArray;
+});
diff --git a/dev/js/src/hint/foundries/schreibgebrauch.js b/dev/js/src/hint/foundries/schreibgebrauch.js
new file mode 100644
index 0000000..7cce57e
--- /dev/null
+++ b/dev/js/src/hint/foundries/schreibgebrauch.js
@@ -0,0 +1,48 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+ var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ var sgbrSttsArray = sttsArray.slice(0);
+
+ // Push specific information for Schreibgebrauch
+ sgbrSttsArray.push(
+ ["NNE", "NNE", "Normal Nomina with Named Entity"],
+ ["ADVART","ADVART", "Adverb with Article"],
+ ["EMOASC","EMOASC", "ASCII emoticon"],
+ ["EMOIMG","EMOIMG", "Graphic emoticon"],
+ ["ERRTOK","ERRTOK", "Tokenisation Error"],
+ ["HST", "HST", "Hashtag"],
+ ["KOUSPPER","KOUSPPER", "Subordinating Conjunction (with Sentence) with Personal Pronoun"],
+ ["ONO", "ONO", "Onomatopoeia"],
+ ["PPERPPER","PPERPPER", "Personal Pronoun with Personal Pronoun"],
+ ["URL", "URL", "Uniform Resource Locator"],
+ ["VAPPER", "VAPPER", "Finite Auxiliary Verb with Personal Pronoun"],
+ ["VMPPER", "VMPPER", "Fintite Modal Verb with Personal Pronoun"],
+ ["VVPPER", "VVPPER", "Finite Full Verb with Personal Pronoun"],
+ ["AW", "AW", "Interaction Word"],
+ ["ADR", "ADR", "Addressing Term"],
+ ["AWIND", "AWIND", "Punctuation Indicating Addressing Term"],
+ ["ERRAW","ERRAW", "Part of Erroneously Separated Compound"]
+ /*
+ As KorAP currently doesn't support these tags, they could also be ommited
+ ["_KOMMA", "_KOMMA", "Comma"],
+ ["_SONST", "_SONST", "Intrasentential Punctuation Mark"],
+ ["_ENDE", "_ENDE", "Punctuation Mark at the end of the Sentence"]
+ */
+ );
+
+ // Sort by tag
+ sgbrSttsArray.sort(function (a,b) { return a[0].localeCompare(b[0]) });
+
+
+ ah["-"].push(
+ ["Schreibgebrauch", "sgbr/", "Lemma, Lemma Variants, Part-of-Speech"]
+ );
+
+ ah["sgbr/"] = [
+ ["Lemma", "l="],
+ ["Lemma Variants", "lv="],
+ ["Part-of-Speech", "p="]
+ ];
+
+ ah["sgbr/p="] = sgbrSttsArray;
+});
diff --git a/dev/js/src/hint/foundries/stts.js b/dev/js/src/hint/foundries/stts.js
new file mode 100644
index 0000000..f7d3b62
--- /dev/null
+++ b/dev/js/src/hint/foundries/stts.js
@@ -0,0 +1,59 @@
+define(function () {
+ return [
+ // http://www.ids-mannheim.de/cosmas2/projekt/referenz/stts/morph.html
+ // http://nachhalt.sfb632.uni-potsdam.de/owl-docu/stts.html
+ // "$.", "$(", "$,"
+ ["ADJA","ADJA ", "Attributive Adjective"],
+ ["ADJD","ADJD ", "Predicative Adjective"],
+ ["ADV","ADV ", "Adverb"],
+ ["APPO","APPO ", "Postposition"],
+ ["APPR","APPR ", "Preposition"],
+ ["APPRART","APPRART ", "Preposition with Determiner"],
+ ["APZR","APZR ","Right Circumposition"],
+ ["ART","ART ", "Determiner"],
+ ["CARD","CARD ", "Cardinal Number"],
+ ["FM","FM ", "Foreign Material"],
+ ["ITJ","ITJ ", "Interjection"],
+ ["KOKOM","KOKOM ", "Comparison Particle"],
+ ["KON","KON ", "Coordinating Conjuncion"],
+ ["KOUI","KOUI ", "Subordinating Conjunction with 'zu'"],
+ ["KOUS","KOUS ", "Subordinating Conjunction with Sentence"],
+ ["NE","NE ", "Named Entity"],
+ ["NN","NN ", "Normal Nomina"],
+ ["PAV", "PAV ", "Pronominal Adverb"],
+ ["PDAT","PDAT ","Attributive Demonstrative Pronoun"],
+ ["PDS","PDS ", "Substitutive Demonstrative Pronoun"],
+ ["PIAT","PIAT ", "Attributive Indefinite Pronoun without Determiner"],
+ ["PIDAT","PIDAT ", "Attributive Indefinite Pronoun with Determiner"],
+ ["PIS","PIS ", "Substitutive Indefinite Pronoun"],
+ ["PPER","PPER ", "Personal Pronoun"],
+ ["PPOSAT","PPOSAT ", "Attributive Possessive Pronoun"],
+ ["PPOSS","PPOSS ", "Substitutive Possessive Pronoun"],
+ ["PRELAT","PRELAT ", "Attributive Relative Pronoun"],
+ ["PRELS","PRELS ", "Substitutive Relative Pronoun"],
+ ["PRF","PRF ", "Reflexive Pronoun"],
+ ["PROAV","PROAV ", "Pronominal Adverb"],
+ ["PTKA","PTKA ","Particle with Adjective"],
+ ["PTKANT","PTKANT ", "Answering Particle"],
+ ["PTKNEG","PTKNEG ", "Negation Particle"],
+ ["PTKVZ","PTKVZ ", "Separated Verbal Particle"],
+ ["PTKZU","PTKZU ", "'zu' Particle"],
+ ["PWAT","PWAT ", "Attributive Interrogative Pronoun"],
+ ["PWAV","PWAV ", "Adverbial Interrogative Pronoun"],
+ ["PWS","PWS ", "Substitutive Interrogative Pronoun"],
+ ["TRUNC","TRUNC ","Truncated"],
+ ["VAFIN","VAFIN ", "Auxiliary Finite Verb"],
+ ["VAIMP","VAIMP ", "Auxiliary Finite Imperative Verb"],
+ ["VAINF","VAINF ", "Auxiliary Infinite Verb"],
+ ["VAPP","VAPP ", "Auxiliary Perfect Participle"],
+ ["VMFIN","VMFIN ", "Modal Finite Verb"],
+ ["VMINF","VMINF ", "Modal Infinite Verb"],
+ ["VMPP","VMPP ", "Modal Perfect Participle"],
+ ["VVFIN","VVFIN ","Finite Verb"],
+ ["VVIMP","VVIMP ", "Finite Imperative Verb"],
+ ["VVINF","VVINF ", "Infinite Verb"],
+ ["VVIZU","VVIZU ", "Infinite Verb with 'zu'"],
+ ["VVPP","VVPP ", "Perfect Participle"],
+ ["XY", "XY ", "Non-Word"]
+ ];
+});
diff --git a/dev/js/src/hint/foundries/treetagger.js b/dev/js/src/hint/foundries/treetagger.js
new file mode 100644
index 0000000..35fcfcc
--- /dev/null
+++ b/dev/js/src/hint/foundries/treetagger.js
@@ -0,0 +1,14 @@
+require(["hint/foundries/stts"], function (sttsArray) {
+ var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ ah["-"].push(
+ ["TreeTagger", "tt/", "Lemma, Part-of-Speech"]
+ );
+
+ ah["tt/"] = [
+ ["Lemma", "l="],
+ ["Part-of-Speech", "p="]
+ ];
+
+ ah["tt/p="] = sttsArray;
+});
diff --git a/dev/js/src/hint/foundries/xip.js b/dev/js/src/hint/foundries/xip.js
new file mode 100644
index 0000000..cd9fc8a
--- /dev/null
+++ b/dev/js/src/hint/foundries/xip.js
@@ -0,0 +1,12 @@
+var ah = KorAP.annotationHelper = KorAP.annotationHelper || { "-" : [] };
+
+ah["-"].push(
+ ["Xerox Parser", "xip/", "Constituency, Lemma, Part-of-Speech"]
+);
+
+ah["xip/"] = [
+ ["Constituency", "c="],
+ // Inactive: ["Dependency", "d="],
+ ["Lemma", "l="],
+ ["Part-of-Speech", "p="]
+];
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index 6eee4f8..fdc2fab 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -16,7 +16,6 @@
'vc',
'tutorial',
'lib/domReady',
- 'hint/array',
'vc/array',
'lib/alertify',
'session',
@@ -31,16 +30,12 @@
vcClass,
tutClass,
domReady,
- hintArray,
vcArray,
alertifyClass,
sessionClass,
tagger,
selectMenuClass) {
- // Set hint array for hint helper
- KorAP.hintArray = hintArray;
-
// Localization values
var loc = KorAP.Locale;
loc.VC_allCorpora = loc.VC_allCorpora || 'all corpora';
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index e575b7e..d7ec89f 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -4,7 +4,6 @@
* @author Nils Diewald
*/
/*
- * TODO: space is not a valid prefix!
* TODO: Show the slider briefly on move (whenever screen is called).
* TODO: Ignore alt+ and strg+ key strokes.
* TODO: Should scroll to a chosen value after prefixing, if the chosen value is live
@@ -13,6 +12,7 @@
* or anytime items would be outside the screen.
* TODO: Add a .match() method to items for scrolling and probably for prefixing.
* TODO: Add static header (for title, sortation fields, but also for menu points like "fragments" and "history".
+ * TODO: Support space separated list of prefixes so "co no" will highlight "common noun"
*/
define([
'menu/item',
@@ -181,18 +181,44 @@
* There is a prefix set, so filter the list!
*/
var pos;
- var prefix = " " + this.prefix().toLowerCase();
+ var prefixList = this.prefix().toLowerCase().split(" ");
+
+ var items = [];
+ var maxPoints = 1; // minimum 1
// Iterate over all items and choose preferred matching items
// i.e. the matching happens at the word start
for (pos = 0; pos < this._items.length; pos++) {
- if ((this.item(pos).lcField().indexOf(prefix)) >= 0)
+
+ var points = 0;
+
+ for (pref = 0; pref < prefixList.length; pref++) {
+ var prefix = " " + prefixList[pref];
+
+ // Check if it matches at the beginning
+ if ((this.item(pos).lcField().indexOf(prefix)) >= 0) {
+ points += 5;
+ }
+
+ // Check if it matches anywhere
+ else if ((this.item(pos).lcField().indexOf(prefix.substring(1))) >= 0) {
+ points += 1;
+ };
+ };
+
+ if (points > maxPoints) {
+ this._list = [pos];
+ maxPoints = points;
+ }
+ else if (points == maxPoints) {
this._list.push(pos);
+ }
};
// The list is empty - so lower your expectations
// Iterate over all items and choose matching items
// i.e. the matching happens anywhere in the word
+ /*
prefix = prefix.substring(1);
if (this._list.length == 0) {
for (pos = 0; pos < this._items.length; pos++) {
@@ -200,6 +226,7 @@
this._list.push(pos);
};
};
+ */
this._slider.length(this._list.length).reInit();
diff --git a/dev/js/src/menu/item.js b/dev/js/src/menu/item.js
index 3f955be..812a398 100644
--- a/dev/js/src/menu/item.js
+++ b/dev/js/src/menu/item.js
@@ -5,6 +5,8 @@
* further: action happen on right arrow
*/
+"use strict";
+
/**
* Item in the Dropdown menu
*/
@@ -153,13 +155,13 @@
for (var i = marks.length - 1; i >= 0; i--) {
// Create text node clone
var x = document.createTextNode(
- marks[i].firstChild.nodeValue
+ marks[i].firstChild.nodeValue
);
// Replace with content
marks[i].parentNode.replaceChild(
- x,
- marks[i]
+ x,
+ marks[i]
);
};
@@ -169,48 +171,82 @@
},
// Highlight a certain substring of the menu item
- _highlight : function (elem, prefix) {
+ _highlight : function (elem, prefixString) {
if (elem.nodeType === 3) {
var text = elem.nodeValue;
var textlc = text.toLowerCase();
- var pos = textlc.indexOf(prefix);
- if (pos >= 0) {
+
+ // Split prefixes
+ if (prefixString) {
+
+ // ND:
+ // Doing this in a single line can trigger
+ // a deep-recursion in Firefox 57.01, though I don't know why.
+ prefixString = prefixString.trim();
+ var prefixes = prefixString.split(" ");
+
+ var prefix;
+ var testPos;
+ var pos = -1;
+ var len = 0;
+
+ // Iterate over all prefixes and get the best one
+ for (var i = 0; i < prefixes.length; i++) {
+
+ // Get first pos of a matching prefix
+ testPos = textlc.indexOf(prefixes[i]);
+ if (testPos < 0)
+ continue;
+
+ if (pos === -1 || testPos < pos) {
+ pos = testPos;
+ len = prefixes[i].length;
+ }
+ else if (testPos === pos && prefixes[i].length > len) {
+ len = prefixes[i].length;
+ };
+ };
+
+ // Matches!
+ if (pos >= 0) {
- // First element
- if (pos > 0) {
- elem.parentNode.insertBefore(
- document.createTextNode(text.substr(0, pos)),
- elem
- );
- };
+ // First element
+ if (pos > 0) {
+ elem.parentNode.insertBefore(
+ document.createTextNode(text.substr(0, pos)),
+ elem
+ );
+ };
- // Second element
- var hl = document.createElement("mark");
- hl.appendChild(
- document.createTextNode(text.substr(pos, prefix.length))
- );
- elem.parentNode.insertBefore(hl, elem);
+ // Second element
+ var hl = document.createElement("mark");
+ hl.appendChild(
+ document.createTextNode(text.substr(pos, len))
+ );
+ elem.parentNode.insertBefore(hl, elem);
- // Third element
- var third = text.substr(pos + prefix.length);
- if (third.length > 0) {
- var thirdE = document.createTextNode(third);
- elem.parentNode.insertBefore(
- thirdE,
- elem
- );
- this._highlight(thirdE, prefix);
- };
+ // Third element
+ var third = text.substr(pos + len);
+
+ if (third.length > 0) {
+ var thirdE = document.createTextNode(third);
+ elem.parentNode.insertBefore(
+ thirdE,
+ elem
+ );
+ this._highlight(thirdE, prefixString);
+ };
- var p = elem.parentNode;
- p.removeChild(elem);
+ var p = elem.parentNode;
+ p.removeChild(elem);
+ };
};
}
else {
var children = elem.childNodes;
for (var i = children.length -1; i >= 0; i--) {
- this._highlight(children[i], prefix);
+ this._highlight(children[i], prefixString);
};
};
},
diff --git a/dev/js/src/menu/prefix.js b/dev/js/src/menu/prefix.js
index abcf66c..90924c9 100644
--- a/dev/js/src/menu/prefix.js
+++ b/dev/js/src/menu/prefix.js
@@ -107,7 +107,7 @@
// Prefix is long enough for backspace
if (this._string.length > 1) {
this._string = this._string.substring(
- 0, this._string.length - 1
+ 0, this._string.length - 1
);
}
else {