diff --git a/website/_includes/_mixins.jade b/website/_includes/_mixins.jade index 3c8493d57..352f59e19 100644 --- a/website/_includes/_mixins.jade +++ b/website/_includes/_mixins.jade @@ -11,6 +11,23 @@ mixin section(id) block +//- Accordion (collapsible sections) + title - [string] Section title. + id - [string] Optional section ID for permalinks. + level - [integer] Headline level for section title. + +mixin accordion(title, id, level) + section.o-accordion.o-block + +h(level || 4).o-no-block(id=id) + button.o-accordion__button.o-grid.o-grid--vcenter.o-grid--space.js-accordion(aria-expanded="false")=title + svg.o-accordion__icon(width="20" height="20" viewBox="0 0 10 10" aria-hidden="true" focusable="false") + rect.o-accordion__hide(height="8" width="2" y="1" x="4") + rect(height="2" width="8" y="4" x="1") + + .o-accordion__content(hidden="") + block + + //- Headlines Helper Mixin level - [integer] 1, 2, 3, 4, or 5 diff --git a/website/_includes/_page_models.jade b/website/_includes/_page_models.jade index c7742fa38..fd413b66a 100644 --- a/website/_includes/_page_models.jade +++ b/website/_includes/_page_models.jade @@ -50,7 +50,7 @@ for id in CURRENT_MODELS +cell span(data-tpl=id data-tpl-key=field) #[em n/a] - +row(data-tpl=id data-tpl-key="compat-wrapper" style="display: none") + +row(data-tpl=id data-tpl-key="compat-wrapper" hidden="") +cell +label Compat #[+help("Latest compatible model version for your spaCy installation").u-color-subtle] +cell @@ -58,15 +58,15 @@ for id in CURRENT_MODELS select.o-field__select.u-text-small(data-tpl=id data-tpl-key="compat") div(data-tpl=id data-tpl-key="compat-versions")   - section(data-tpl=id data-tpl-key="benchmarks" style="display: none") + section(data-tpl=id data-tpl-key="benchmarks" hidden="") +grid.o-block-small for keys, label in MODEL_BENCHMARKS - .u-flex-full.u-padding-small(data-tpl=id data-tpl-key=label.toLowerCase() style="display: none") + .u-flex-full.u-padding-small(data-tpl=id data-tpl-key=label.toLowerCase() hidden="") +table.o-block-small +row("head") +head-cell(colspan="2")=(MODEL_META["benchmark_" + label] || label) for label, field in keys - +row(style="display: none") + +row(hidden="") +cell.u-nowrap +label=label if MODEL_META[field] diff --git a/website/_includes/_scripts.jade b/website/_includes/_scripts.jade index 572a50483..7939a5acc 100644 --- a/website/_includes/_scripts.jade +++ b/website/_includes/_scripts.jade @@ -41,6 +41,7 @@ if IS_PAGE https://medium.com/dev-channel/es6-modules-in-chrome-canary-m60-ba588dfb8ab7 - ProgressBar = "new ProgressBar('.js-progress');" +- Accordion = "new Accordion('.js-accordion');" - Changelog = "new Changelog('" + SOCIAL.github + "', 'spacy');" - NavHighlighter = "new NavHighlighter('data-section', 'data-nav');" - GitHubEmbed = "new GitHubEmbed('" + SOCIAL.github + "', 'data-gh-embed');" @@ -57,6 +58,7 @@ if environment == "deploy" if IS_PAGE !=NavHighlighter !=GitHubEmbed + !=Accordion if HAS_MODELS !=ModelLoader if compare_models @@ -74,6 +76,8 @@ else !=NavHighlighter | import GitHubEmbed from '/assets/js/github-embed.js'; !=GitHubEmbed + | import Accordion from '/assets/js/accordion.js'; + !=Accordion if HAS_MODELS | import { ModelLoader } from '/assets/js/models.js'; !=ModelLoader diff --git a/website/api/_annotation/_dep-labels.jade b/website/api/_annotation/_dep-labels.jade index 427b2f53a..71fec0e50 100644 --- a/website/api/_annotation/_dep-labels.jade +++ b/website/api/_annotation/_dep-labels.jade @@ -1,108 +1,112 @@ //- 💫 DOCS > API > ANNOTATION > DEPENDENCY LABELS -+h(3, "dependency-parsing-english") English dependency labels - p - | The English dependency labels use the #[+a("http://www.clearnlp.com") ClearNLP] - | #[+a("http://www.mathcs.emory.edu/~choi/doc/clear-dependency-2012.pdf") CLEAR Style]. + | This section lists the syntactic dependency labels assigned by + | spaCy's #[+a("/models") models]. The individual labels are + | language-specific and depend on the training corpus. -+table(["Label", "Description"]) - +dep-row("acomp", "adjectival complement") - +dep-row("advcl", "adverbial clause modifier") - +dep-row("advmod", "adverbial modifier") - +dep-row("agent", "agent") - +dep-row("amod", "adjectival modifier") - +dep-row("appos", "appositional modifier") - +dep-row("attr", "attribute") - +dep-row("aux", "auxiliary") - +dep-row("auxpass", "auxiliary (passive)") - +dep-row("cc", "coordinating conjunction") - +dep-row("ccomp", "clausal complement") - +dep-row("complm", "complementizer") - +dep-row("conj", "conjunct") - +dep-row("cop", "copula") - +dep-row("csubj", "clausal subject") - +dep-row("csubjpass", "clausal subject (passive)") - +dep-row("dep", "unclassified dependent") - +dep-row("det", "determiner") - +dep-row("dobj", "direct object") - +dep-row("expl", "expletive") - +dep-row("hmod", "modifier in hyphenation") - +dep-row("hyph", "hyphen") - +dep-row("infmod", "infinitival modifier") - +dep-row("intj", "interjection") - +dep-row("iobj", "indirect object") - +dep-row("mark", "marker") - +dep-row("meta", "meta modifier") - +dep-row("neg", "negation modifier") - +dep-row("nmod", "modifier of nominal") - +dep-row("nn", "noun compound modifier") - +dep-row("npadvmod", "noun phrase as adverbial modifier") - +dep-row("nsubj", "nominal subject") - +dep-row("nsubjpass", "nominal subject (passive)") - +dep-row("num", "number modifier") - +dep-row("number", "number compound modifier") - +dep-row("oprd", "object predicate") - +dep-row("obj", "object") - +dep-row("obl", "oblique nominal") - +dep-row("parataxis", "parataxis") - +dep-row("partmod", "participal modifier") - +dep-row("pcomp", "complement of preposition") - +dep-row("pobj", "object of preposition") - +dep-row("poss", "possession modifier") - +dep-row("possessive", "possessive modifier") - +dep-row("preconj", "pre-correlative conjunction") - +dep-row("prep", "prepositional modifier") - +dep-row("prt", "particle") - +dep-row("punct", "punctuation") - +dep-row("quantmod", "modifier of quantifier") - +dep-row("rcmod", "relative clause modifier") - +dep-row("root", "root") - +dep-row("xcomp", "open clausal complement") ++accordion("English", "dependency-parsing-english") + p + | The English dependency labels use the + | #[+a("http://www.mathcs.emory.edu/~choi/doc/clear-dependency-2012.pdf") CLEAR Style] + | by #[+a("http://www.clearnlp.com") ClearNLP]. -+h(3, "dependency-parsing-german") German dependency labels + +table(["Label", "Description"]) + +dep-row("acomp", "adjectival complement") + +dep-row("advcl", "adverbial clause modifier") + +dep-row("advmod", "adverbial modifier") + +dep-row("agent", "agent") + +dep-row("amod", "adjectival modifier") + +dep-row("appos", "appositional modifier") + +dep-row("attr", "attribute") + +dep-row("aux", "auxiliary") + +dep-row("auxpass", "auxiliary (passive)") + +dep-row("cc", "coordinating conjunction") + +dep-row("ccomp", "clausal complement") + +dep-row("complm", "complementizer") + +dep-row("conj", "conjunct") + +dep-row("cop", "copula") + +dep-row("csubj", "clausal subject") + +dep-row("csubjpass", "clausal subject (passive)") + +dep-row("dep", "unclassified dependent") + +dep-row("det", "determiner") + +dep-row("dobj", "direct object") + +dep-row("expl", "expletive") + +dep-row("hmod", "modifier in hyphenation") + +dep-row("hyph", "hyphen") + +dep-row("infmod", "infinitival modifier") + +dep-row("intj", "interjection") + +dep-row("iobj", "indirect object") + +dep-row("mark", "marker") + +dep-row("meta", "meta modifier") + +dep-row("neg", "negation modifier") + +dep-row("nmod", "modifier of nominal") + +dep-row("nn", "noun compound modifier") + +dep-row("npadvmod", "noun phrase as adverbial modifier") + +dep-row("nsubj", "nominal subject") + +dep-row("nsubjpass", "nominal subject (passive)") + +dep-row("num", "number modifier") + +dep-row("number", "number compound modifier") + +dep-row("oprd", "object predicate") + +dep-row("obj", "object") + +dep-row("obl", "oblique nominal") + +dep-row("parataxis", "parataxis") + +dep-row("partmod", "participal modifier") + +dep-row("pcomp", "complement of preposition") + +dep-row("pobj", "object of preposition") + +dep-row("poss", "possession modifier") + +dep-row("possessive", "possessive modifier") + +dep-row("preconj", "pre-correlative conjunction") + +dep-row("prep", "prepositional modifier") + +dep-row("prt", "particle") + +dep-row("punct", "punctuation") + +dep-row("quantmod", "modifier of quantifier") + +dep-row("rcmod", "relative clause modifier") + +dep-row("root", "root") + +dep-row("xcomp", "open clausal complement") -p - | The German dependency labels use the - | #[+a("http://www.ims.uni-stuttgart.de/forschung/ressourcen/korpora/TIGERCorpus/annotation/index.html") TIGER Treebank] - | annotation scheme. ++accordion("German", "dependency-parsing-german") + p + | The German dependency labels use the + | #[+a("http://www.ims.uni-stuttgart.de/forschung/ressourcen/korpora/TIGERCorpus/annotation/index.html") TIGER Treebank] + | annotation scheme. -+table(["Label", "Description"]) - +dep-row("ac", "adpositional case marker") - +dep-row("adc", "adjective component") - +dep-row("ag", "genitive attribute") - +dep-row("ams", "measure argument of adjective") - +dep-row("app", "apposition") - +dep-row("avc", "adverbial phrase component") - +dep-row("cc", "comparative complement") - +dep-row("cd", "coordinating conjunction") - +dep-row("cj", "conjunct") - +dep-row("cm", "comparative conjunction") - +dep-row("cp", "complementizer") - +dep-row("cvc", "collocational verb construction") - +dep-row("da", "dative") - +dep-row("dh", "discourse-level head") - +dep-row("dm", "discourse marker") - +dep-row("ep", "expletive es") - +dep-row("hd", "head") - +dep-row("ju", "junctor") - +dep-row("mnr", "postnominal modifier") - +dep-row("mo", "modifier") - +dep-row("ng", "negation") - +dep-row("nk", "noun kernel element") - +dep-row("nmc", "numerical component") - +dep-row("oa", "accusative object") - +dep-row("oa", "second accusative object") - +dep-row("oc", "clausal object") - +dep-row("og", "genitive object") - +dep-row("op", "prepositional object") - +dep-row("par", "parenthetical element") - +dep-row("pd", "predicate") - +dep-row("pg", "phrasal genitive") - +dep-row("ph", "placeholder") - +dep-row("pm", "morphological particle") - +dep-row("pnc", "proper noun component") - +dep-row("rc", "relative clause") - +dep-row("re", "repeated element") - +dep-row("rs", "reported speech") - +dep-row("sb", "subject") + +table(["Label", "Description"]) + +dep-row("ac", "adpositional case marker") + +dep-row("adc", "adjective component") + +dep-row("ag", "genitive attribute") + +dep-row("ams", "measure argument of adjective") + +dep-row("app", "apposition") + +dep-row("avc", "adverbial phrase component") + +dep-row("cc", "comparative complement") + +dep-row("cd", "coordinating conjunction") + +dep-row("cj", "conjunct") + +dep-row("cm", "comparative conjunction") + +dep-row("cp", "complementizer") + +dep-row("cvc", "collocational verb construction") + +dep-row("da", "dative") + +dep-row("dh", "discourse-level head") + +dep-row("dm", "discourse marker") + +dep-row("ep", "expletive es") + +dep-row("hd", "head") + +dep-row("ju", "junctor") + +dep-row("mnr", "postnominal modifier") + +dep-row("mo", "modifier") + +dep-row("ng", "negation") + +dep-row("nk", "noun kernel element") + +dep-row("nmc", "numerical component") + +dep-row("oa", "accusative object") + +dep-row("oa", "second accusative object") + +dep-row("oc", "clausal object") + +dep-row("og", "genitive object") + +dep-row("op", "prepositional object") + +dep-row("par", "parenthetical element") + +dep-row("pd", "predicate") + +dep-row("pg", "phrasal genitive") + +dep-row("ph", "placeholder") + +dep-row("pm", "morphological particle") + +dep-row("pnc", "proper noun component") + +dep-row("rc", "relative clause") + +dep-row("re", "repeated element") + +dep-row("rs", "reported speech") + +dep-row("sb", "subject") diff --git a/website/api/_annotation/_pos-tags.jade b/website/api/_annotation/_pos-tags.jade index 51db4f4e2..ad878633f 100644 --- a/website/api/_annotation/_pos-tags.jade +++ b/website/api/_annotation/_pos-tags.jade @@ -1,134 +1,138 @@ //- 💫 DOCS > API > ANNOTATION > POS TAGS -+h(3, "pos-tagging-english") English part-of-speech tag scheme - p - | The English part-of-speech tagger uses the - | #[+a("https://catalog.ldc.upenn.edu/LDC2013T19") OntoNotes 5] version of - | the Penn Treebank tag set. We also map the tags to the simpler Google - | Universal POS tag set. + | This section lists the fine-grained and coarse-grained part-of-speech + | tags assigned by spaCy's #[+a("/models") models]. The individual mapping + | is specific to the training corpus and can be defined in the respective + | language data's #[+a("/usage/adding-languages#tag-map") #[code tag_map.py]]. -+table(["Tag", "POS", "Morphology", "Description"]) - +pos-row("-LRB-", "PUNCT", "PunctType=brck PunctSide=ini", "left round bracket") - +pos-row("-PRB-", "PUNCT", "PunctType=brck PunctSide=fin", "right round bracket") - +pos-row(",", "PUNCT", "PunctType=comm", "punctuation mark, comma") - +pos-row(":", "PUNCT", "", "punctuation mark, colon or ellipsis") - +pos-row(".", "PUNCT", "PunctType=peri", "punctuation mark, sentence closer") - +pos-row("''", "PUNCT", "PunctType=quot PunctSide=fin", "closing quotation mark") - +pos-row("\"\"", "PUNCT", "PunctType=quot PunctSide=fin", "closing quotation mark") - +pos-row("#", "SYM", "SymType=numbersign", "symbol, number sign") - +pos-row("``", "PUNCT", "PunctType=quot PunctSide=ini", "opening quotation mark") - +pos-row("$", "SYM", "SymType=currency", "symbol, currency") - +pos-row("ADD", "X", "", "email") - +pos-row("AFX", "ADJ", "Hyph=yes", "affix") - +pos-row("BES", "VERB", "", 'auxiliary "be"') - +pos-row("CC", "CONJ", "ConjType=coor", "conjunction, coordinating") - +pos-row("CD", "NUM", "NumType=card", "cardinal number") - +pos-row("DT", "DET", "determiner") - +pos-row("EX", "ADV", "AdvType=ex", "existential there") - +pos-row("FW", "X", "Foreign=yes", "foreign word") - +pos-row("GW", "X", "", "additional word in multi-word expression") - +pos-row("HVS", "VERB", "", 'forms of "have"') - +pos-row("HYPH", "PUNCT", "PunctType=dash", "punctuation mark, hyphen") - +pos-row("IN", "ADP", "", "conjunction, subordinating or preposition") - +pos-row("JJ", "ADJ", "Degree=pos", "adjective") - +pos-row("JJR", "ADJ", "Degree=comp", "adjective, comparative") - +pos-row("JJS", "ADJ", "Degree=sup", "adjective, superlative") - +pos-row("LS", "PUNCT", "NumType=ord", "list item marker") - +pos-row("MD", "VERB", "VerbType=mod", "verb, modal auxiliary") - +pos-row("NFP", "PUNCT", "", "superfluous punctuation") - +pos-row("NIL", "", "", "missing tag") - +pos-row("NN", "NOUN", "Number=sing", "noun, singular or mass") - +pos-row("NNP", "PROPN", "NounType=prop Number=sign", "noun, proper singular") - +pos-row("NNPS", "PROPN", "NounType=prop Number=plur", "noun, proper plural") - +pos-row("NNS", "NOUN", "Number=plur", "noun, plural") - +pos-row("PDT", "ADJ", "AdjType=pdt PronType=prn", "predeterminer") - +pos-row("POS", "PART", "Poss=yes", "possessive ending") - +pos-row("PRP", "PRON", "PronType=prs", "pronoun, personal") - +pos-row("PRP$", "ADJ", "PronType=prs Poss=yes", "pronoun, possessive") - +pos-row("RB", "ADV", "Degree=pos", "adverb") - +pos-row("RBR", "ADV", "Degree=comp", "adverb, comparative") - +pos-row("RBS", "ADV", "Degree=sup", "adverb, superlative") - +pos-row("RP", "PART", "", "adverb, particle") - +pos-row("SP", "SPACE", "", "space") - +pos-row("SYM", "SYM", "", "symbol") - +pos-row("TO", "PART", "PartType=inf VerbForm=inf", "infinitival to") - +pos-row("UH", "INTJ", "", "interjection") - +pos-row("VB", "VERB", "VerbForm=inf", "verb, base form") - +pos-row("VBD", "VERB", "VerbForm=fin Tense=past", "verb, past tense") - +pos-row("VBG", "VERB", "VerbForm=part Tense=pres Aspect=prog", "verb, gerund or present participle") - +pos-row("VBN", "VERB", "VerbForm=part Tense=past Aspect=perf", "verb, past participle") - +pos-row("VBP", "VERB", "VerbForm=fin Tense=pres", "verb, non-3rd person singular present") - +pos-row("VBZ", "VERB", "VerbForm=fin Tense=pres Number=sing Person=3", "verb, 3rd person singular present") - +pos-row("WDT", "ADJ", "PronType=int|rel", "wh-determiner") - +pos-row("WP", "NOUN", "PronType=int|rel", "wh-pronoun, personal") - +pos-row("WP$", "ADJ", "Poss=yes PronType=int|rel", "wh-pronoun, possessive") - +pos-row("WRB", "ADV", "PronType=int|rel", "wh-adverb") - +pos-row("XX", "X", "", "unknown") ++accordion("English", "pos-tagging-english") + p + | The English part-of-speech tagger uses the + | #[+a("https://catalog.ldc.upenn.edu/LDC2013T19") OntoNotes 5] version of + | the Penn Treebank tag set. We also map the tags to the simpler Google + | Universal POS tag set. -+h(3, "pos-tagging-german") German part-of-speech tag scheme + +table(["Tag", "POS", "Morphology", "Description"]) + +pos-row("-LRB-", "PUNCT", "PunctType=brck PunctSide=ini", "left round bracket") + +pos-row("-PRB-", "PUNCT", "PunctType=brck PunctSide=fin", "right round bracket") + +pos-row(",", "PUNCT", "PunctType=comm", "punctuation mark, comma") + +pos-row(":", "PUNCT", "", "punctuation mark, colon or ellipsis") + +pos-row(".", "PUNCT", "PunctType=peri", "punctuation mark, sentence closer") + +pos-row("''", "PUNCT", "PunctType=quot PunctSide=fin", "closing quotation mark") + +pos-row("\"\"", "PUNCT", "PunctType=quot PunctSide=fin", "closing quotation mark") + +pos-row("#", "SYM", "SymType=numbersign", "symbol, number sign") + +pos-row("``", "PUNCT", "PunctType=quot PunctSide=ini", "opening quotation mark") + +pos-row("$", "SYM", "SymType=currency", "symbol, currency") + +pos-row("ADD", "X", "", "email") + +pos-row("AFX", "ADJ", "Hyph=yes", "affix") + +pos-row("BES", "VERB", "", 'auxiliary "be"') + +pos-row("CC", "CONJ", "ConjType=coor", "conjunction, coordinating") + +pos-row("CD", "NUM", "NumType=card", "cardinal number") + +pos-row("DT", "DET", "determiner") + +pos-row("EX", "ADV", "AdvType=ex", "existential there") + +pos-row("FW", "X", "Foreign=yes", "foreign word") + +pos-row("GW", "X", "", "additional word in multi-word expression") + +pos-row("HVS", "VERB", "", 'forms of "have"') + +pos-row("HYPH", "PUNCT", "PunctType=dash", "punctuation mark, hyphen") + +pos-row("IN", "ADP", "", "conjunction, subordinating or preposition") + +pos-row("JJ", "ADJ", "Degree=pos", "adjective") + +pos-row("JJR", "ADJ", "Degree=comp", "adjective, comparative") + +pos-row("JJS", "ADJ", "Degree=sup", "adjective, superlative") + +pos-row("LS", "PUNCT", "NumType=ord", "list item marker") + +pos-row("MD", "VERB", "VerbType=mod", "verb, modal auxiliary") + +pos-row("NFP", "PUNCT", "", "superfluous punctuation") + +pos-row("NIL", "", "", "missing tag") + +pos-row("NN", "NOUN", "Number=sing", "noun, singular or mass") + +pos-row("NNP", "PROPN", "NounType=prop Number=sign", "noun, proper singular") + +pos-row("NNPS", "PROPN", "NounType=prop Number=plur", "noun, proper plural") + +pos-row("NNS", "NOUN", "Number=plur", "noun, plural") + +pos-row("PDT", "ADJ", "AdjType=pdt PronType=prn", "predeterminer") + +pos-row("POS", "PART", "Poss=yes", "possessive ending") + +pos-row("PRP", "PRON", "PronType=prs", "pronoun, personal") + +pos-row("PRP$", "ADJ", "PronType=prs Poss=yes", "pronoun, possessive") + +pos-row("RB", "ADV", "Degree=pos", "adverb") + +pos-row("RBR", "ADV", "Degree=comp", "adverb, comparative") + +pos-row("RBS", "ADV", "Degree=sup", "adverb, superlative") + +pos-row("RP", "PART", "", "adverb, particle") + +pos-row("SP", "SPACE", "", "space") + +pos-row("SYM", "SYM", "", "symbol") + +pos-row("TO", "PART", "PartType=inf VerbForm=inf", "infinitival to") + +pos-row("UH", "INTJ", "", "interjection") + +pos-row("VB", "VERB", "VerbForm=inf", "verb, base form") + +pos-row("VBD", "VERB", "VerbForm=fin Tense=past", "verb, past tense") + +pos-row("VBG", "VERB", "VerbForm=part Tense=pres Aspect=prog", "verb, gerund or present participle") + +pos-row("VBN", "VERB", "VerbForm=part Tense=past Aspect=perf", "verb, past participle") + +pos-row("VBP", "VERB", "VerbForm=fin Tense=pres", "verb, non-3rd person singular present") + +pos-row("VBZ", "VERB", "VerbForm=fin Tense=pres Number=sing Person=3", "verb, 3rd person singular present") + +pos-row("WDT", "ADJ", "PronType=int|rel", "wh-determiner") + +pos-row("WP", "NOUN", "PronType=int|rel", "wh-pronoun, personal") + +pos-row("WP$", "ADJ", "Poss=yes PronType=int|rel", "wh-pronoun, possessive") + +pos-row("WRB", "ADV", "PronType=int|rel", "wh-adverb") + +pos-row("XX", "X", "", "unknown") -p - | The German part-of-speech tagger uses the - | #[+a("http://www.ims.uni-stuttgart.de/forschung/ressourcen/korpora/TIGERCorpus/annotation/index.html") TIGER Treebank] - | annotation scheme. We also map the tags to the simpler Google - | Universal POS tag set. ++accordion("German", "pos-tagging-german") + p + | The German part-of-speech tagger uses the + | #[+a("http://www.ims.uni-stuttgart.de/forschung/ressourcen/korpora/TIGERCorpus/annotation/index.html") TIGER Treebank] + | annotation scheme. We also map the tags to the simpler Google + | Universal POS tag set. -+table(["Tag", "POS", "Morphology", "Description"]) - +pos-row("$(", "PUNCT", "PunctType=brck", "other sentence-internal punctuation mark") - +pos-row("$,", "PUNCT", "PunctType=comm", "comma") - +pos-row("$.", "PUNCT", "PunctType=peri", "sentence-final punctuation mark") - +pos-row("ADJA", "ADJ", "", "adjective, attributive") - +pos-row("ADJD", "ADJ", "Variant=short", "adjective, adverbial or predicative") - +pos-row("ADV", "ADV", "", "adverb") - +pos-row("APPO", "ADP", "AdpType=post", "postposition") - +pos-row("APPR", "ADP", "AdpType=prep", "preposition; circumposition left") - +pos-row("APPRART", "ADP", "AdpType=prep PronType=art", "preposition with article") - +pos-row("APZR", "ADP", "AdpType=circ", "circumposition right") - +pos-row("ART", "DET", "PronType=art", "definite or indefinite article") - +pos-row("CARD", "NUM", "NumType=card", "cardinal number") - +pos-row("FM", "X", "Foreign=yes", "foreign language material") - +pos-row("ITJ", "INTJ", "", "interjection") - +pos-row("KOKOM", "CONJ", "ConjType=comp", "comparative conjunction") - +pos-row("KON", "CONJ", "", "coordinate conjunction") - +pos-row("KOUI", "SCONJ", "", 'subordinate conjunction with "zu" and infinitive') - +pos-row("KOUS", "SCONJ", "", "subordinate conjunction with sentence") - +pos-row("NE", "PROPN", "", "proper noun") - +pos-row("NNE", "PROPN", "", "proper noun") - +pos-row("NN", "NOUN", "", "noun, singular or mass") - +pos-row("PAV", "ADV", "PronType=dem", "pronominal adverb") - +pos-row("PROAV", "ADV", "PronType=dem", "pronominal adverb") - +pos-row("PDAT", "DET", "PronType=dem", "attributive demonstrative pronoun") - +pos-row("PDS", "PRON", "PronType=dem", "substituting demonstrative pronoun") - +pos-row("PIAT", "DET", "PronType=ind|neg|tot", "attributive indefinite pronoun without determiner") - +pos-row("PIDAT", "DET", "AdjType=pdt PronType=ind|neg|tot", "attributive indefinite pronoun with determiner") - +pos-row("PIS", "PRON", "PronType=ind|neg|tot", "substituting indefinite pronoun") - +pos-row("PPER", "PRON", "PronType=prs", "non-reflexive personal pronoun") - +pos-row("PPOSAT", "DET", "Poss=yes PronType=prs", "attributive possessive pronoun") - +pos-row("PPOSS", "PRON", "PronType=rel", "substituting possessive pronoun") - +pos-row("PRELAT", "DET", "PronType=rel", "attributive relative pronoun") - +pos-row("PRELS", "PRON", "PronType=rel", "substituting relative pronoun") - +pos-row("PRF", "PRON", "PronType=prs Reflex=yes", "reflexive personal pronoun") - +pos-row("PTKA", "PART", "", "particle with adjective or adverb") - +pos-row("PTKANT", "PART", "PartType=res", "answer particle") - +pos-row("PTKNEG", "PART", "Negative=yes", "negative particle") - +pos-row("PTKVZ", "PART", "PartType=vbp", "separable verbal particle") - +pos-row("PTKZU", "PART", "PartType=inf", '"zu" before infinitive') - +pos-row("PWAT", "DET", "PronType=int", "attributive interrogative pronoun") - +pos-row("PWAV", "ADV", "PronType=int", "adverbial interrogative or relative pronoun") - +pos-row("PWS", "PRON", "PronType=int", "substituting interrogative pronoun") - +pos-row("TRUNC", "X", "Hyph=yes", "word remnant") - +pos-row("VAFIN", "AUX", "Mood=ind VerbForm=fin", "finite verb, auxiliary") - +pos-row("VAIMP", "AUX", "Mood=imp VerbForm=fin", "imperative, auxiliary") - +pos-row("VAINF", "AUX", "VerbForm=inf", "infinitive, auxiliary") - +pos-row("VAPP", "AUX", "Aspect=perf VerbForm=fin", "perfect participle, auxiliary") - +pos-row("VMFIN", "VERB", "Mood=ind VerbForm=fin VerbType=mod", "finite verb, modal") - +pos-row("VMINF", "VERB", "VerbForm=fin VerbType=mod", "infinitive, modal") - +pos-row("VMPP", "VERB", "Aspect=perf VerbForm=part VerbType=mod", "perfect participle, modal") - +pos-row("VVFIN", "VERB", "Mood=ind VerbForm=fin", "finite verb, full") - +pos-row("VVIMP", "VERB", "Mood=imp VerbForm=fin", "imperative, full") - +pos-row("VVINF", "VERB", "VerbForm=inf", "infinitive, full") - +pos-row("VVIZU", "VERB", "VerbForm=inf", 'infinitive with "zu", full') - +pos-row("VVPP", "VERB", "Aspect=perf VerbForm=part", "perfect participle, full") - +pos-row("XY", "X", "", "non-word containing non-letter") - +pos-row("SP", "SPACE", "", "space") + +table(["Tag", "POS", "Morphology", "Description"]) + +pos-row("$(", "PUNCT", "PunctType=brck", "other sentence-internal punctuation mark") + +pos-row("$,", "PUNCT", "PunctType=comm", "comma") + +pos-row("$.", "PUNCT", "PunctType=peri", "sentence-final punctuation mark") + +pos-row("ADJA", "ADJ", "", "adjective, attributive") + +pos-row("ADJD", "ADJ", "Variant=short", "adjective, adverbial or predicative") + +pos-row("ADV", "ADV", "", "adverb") + +pos-row("APPO", "ADP", "AdpType=post", "postposition") + +pos-row("APPR", "ADP", "AdpType=prep", "preposition; circumposition left") + +pos-row("APPRART", "ADP", "AdpType=prep PronType=art", "preposition with article") + +pos-row("APZR", "ADP", "AdpType=circ", "circumposition right") + +pos-row("ART", "DET", "PronType=art", "definite or indefinite article") + +pos-row("CARD", "NUM", "NumType=card", "cardinal number") + +pos-row("FM", "X", "Foreign=yes", "foreign language material") + +pos-row("ITJ", "INTJ", "", "interjection") + +pos-row("KOKOM", "CONJ", "ConjType=comp", "comparative conjunction") + +pos-row("KON", "CONJ", "", "coordinate conjunction") + +pos-row("KOUI", "SCONJ", "", 'subordinate conjunction with "zu" and infinitive') + +pos-row("KOUS", "SCONJ", "", "subordinate conjunction with sentence") + +pos-row("NE", "PROPN", "", "proper noun") + +pos-row("NNE", "PROPN", "", "proper noun") + +pos-row("NN", "NOUN", "", "noun, singular or mass") + +pos-row("PAV", "ADV", "PronType=dem", "pronominal adverb") + +pos-row("PROAV", "ADV", "PronType=dem", "pronominal adverb") + +pos-row("PDAT", "DET", "PronType=dem", "attributive demonstrative pronoun") + +pos-row("PDS", "PRON", "PronType=dem", "substituting demonstrative pronoun") + +pos-row("PIAT", "DET", "PronType=ind|neg|tot", "attributive indefinite pronoun without determiner") + +pos-row("PIDAT", "DET", "AdjType=pdt PronType=ind|neg|tot", "attributive indefinite pronoun with determiner") + +pos-row("PIS", "PRON", "PronType=ind|neg|tot", "substituting indefinite pronoun") + +pos-row("PPER", "PRON", "PronType=prs", "non-reflexive personal pronoun") + +pos-row("PPOSAT", "DET", "Poss=yes PronType=prs", "attributive possessive pronoun") + +pos-row("PPOSS", "PRON", "PronType=rel", "substituting possessive pronoun") + +pos-row("PRELAT", "DET", "PronType=rel", "attributive relative pronoun") + +pos-row("PRELS", "PRON", "PronType=rel", "substituting relative pronoun") + +pos-row("PRF", "PRON", "PronType=prs Reflex=yes", "reflexive personal pronoun") + +pos-row("PTKA", "PART", "", "particle with adjective or adverb") + +pos-row("PTKANT", "PART", "PartType=res", "answer particle") + +pos-row("PTKNEG", "PART", "Negative=yes", "negative particle") + +pos-row("PTKVZ", "PART", "PartType=vbp", "separable verbal particle") + +pos-row("PTKZU", "PART", "PartType=inf", '"zu" before infinitive') + +pos-row("PWAT", "DET", "PronType=int", "attributive interrogative pronoun") + +pos-row("PWAV", "ADV", "PronType=int", "adverbial interrogative or relative pronoun") + +pos-row("PWS", "PRON", "PronType=int", "substituting interrogative pronoun") + +pos-row("TRUNC", "X", "Hyph=yes", "word remnant") + +pos-row("VAFIN", "AUX", "Mood=ind VerbForm=fin", "finite verb, auxiliary") + +pos-row("VAIMP", "AUX", "Mood=imp VerbForm=fin", "imperative, auxiliary") + +pos-row("VAINF", "AUX", "VerbForm=inf", "infinitive, auxiliary") + +pos-row("VAPP", "AUX", "Aspect=perf VerbForm=fin", "perfect participle, auxiliary") + +pos-row("VMFIN", "VERB", "Mood=ind VerbForm=fin VerbType=mod", "finite verb, modal") + +pos-row("VMINF", "VERB", "VerbForm=fin VerbType=mod", "infinitive, modal") + +pos-row("VMPP", "VERB", "Aspect=perf VerbForm=part VerbType=mod", "perfect participle, modal") + +pos-row("VVFIN", "VERB", "Mood=ind VerbForm=fin", "finite verb, full") + +pos-row("VVIMP", "VERB", "Mood=imp VerbForm=fin", "imperative, full") + +pos-row("VVINF", "VERB", "VerbForm=inf", "infinitive, full") + +pos-row("VVIZU", "VERB", "VerbForm=inf", 'infinitive with "zu", full') + +pos-row("VVPP", "VERB", "Aspect=perf VerbForm=part", "perfect participle, full") + +pos-row("XY", "X", "", "non-word containing non-letter") + +pos-row("SP", "SPACE", "", "space") diff --git a/website/api/_annotation/_text-processing.jade b/website/api/_annotation/_text-processing.jade new file mode 100644 index 000000000..564e76f08 --- /dev/null +++ b/website/api/_annotation/_text-processing.jade @@ -0,0 +1,55 @@ +//- 💫 DOCS > API > ANNOTATION > TEXT PROCESSING + ++aside-code("Example"). + from spacy.lang.en import English + nlp = English() + tokens = nlp('Some\nspaces and\ttab characters') + tokens_text = [t.text for t in tokens] + assert tokens_text == ['Some', '\n', 'spaces', ' ', 'and', + '\t', 'tab', 'characters'] + +p + | Tokenization standards are based on the + | #[+a("https://catalog.ldc.upenn.edu/LDC2013T19") OntoNotes 5] corpus. + | The tokenizer differs from most by including + | #[strong tokens for significant whitespace]. Any sequence of + | whitespace characters beyond a single space (#[code ' ']) is included + | as a token. The whitespace tokens are useful for much the same reason + | punctuation is – it's often an important delimiter in the text. By + | preserving it in the token output, we are able to maintain a simple + | alignment between the tokens and the original string, and we ensure + | that #[strong no information is lost] during processing. + ++h(3, "lemmatization") Lemmatization + ++aside("Examples") + | In English, this means:#[br] + | #[strong Adjectives]: happier, happiest → happy#[br] + | #[strong Adverbs]: worse, worst → badly#[br] + | #[strong Nouns]: dogs, children → dog, child#[br] + | #[strong Verbs]: writes, wirting, wrote, written → write + + +p + | A lemma is the uninflected form of a word. The English lemmatization + | data is taken from #[+a("https://wordnet.princeton.edu") WordNet]. + | Lookup tables are taken from + | #[+a("http://www.lexiconista.com/datasets/lemmatization/") Lexiconista]. + | spaCy also adds a #[strong special case for pronouns]: all pronouns + | are lemmatized to the special token #[code -PRON-]. + ++infobox("About spaCy's custom pronoun lemma", "⚠️") + | Unlike verbs and common nouns, there's no clear base form of a personal + | pronoun. Should the lemma of "me" be "I", or should we normalize person + | as well, giving "it" — or maybe "he"? spaCy's solution is to introduce a + | novel symbol, #[code -PRON-], which is used as the lemma for + | all personal pronouns. + ++h(3, "sentence-boundary") Sentence boundary detection + +p + | Sentence boundaries are calculated from the syntactic parse tree, so + | features such as punctuation and capitalisation play an important but + | non-decisive role in determining the sentence boundaries. Usually this + | means that the sentence boundaries will at least coincide with clause + | boundaries, even given poorly punctuated text. diff --git a/website/api/_data.json b/website/api/_data.json index 9d447570f..67b9debf0 100644 --- a/website/api/_data.json +++ b/website/api/_data.json @@ -205,10 +205,8 @@ "title": "Annotation Specifications", "teaser": "Schemes used for labels, tags and training data.", "menu": { - "Tokenization": "tokenization", - "Sentence Boundaries": "sbd", + "Text Processing": "text-processing", "POS Tagging": "pos-tagging", - "Lemmatization": "lemmatization", "Dependencies": "dependency-parsing", "Named Entities": "named-entities", "Models & Training": "training" diff --git a/website/api/annotation.jade b/website/api/annotation.jade index 16598371d..bff9a71cb 100644 --- a/website/api/annotation.jade +++ b/website/api/annotation.jade @@ -2,43 +2,9 @@ include ../_includes/_mixins -p This document describes the target annotations spaCy is trained to predict. - - -+section("tokenization") - +h(2, "tokenization") Tokenization - - p - | Tokenization standards are based on the - | #[+a("https://catalog.ldc.upenn.edu/LDC2013T19") OntoNotes 5] corpus. - | The tokenizer differs from most by including tokens for significant - | whitespace. Any sequence of whitespace characters beyond a single space - | (#[code ' ']) is included as a token. - - +aside-code("Example"). - from spacy.lang.en import English - nlp = English() - tokens = nlp('Some\nspaces and\ttab characters') - tokens_text = [t.text for t in tokens] - assert tokens_text == ['Some', '\n', 'spaces', ' ', 'and', - '\t', 'tab', 'characters'] - - p - | The whitespace tokens are useful for much the same reason punctuation is - | – it's often an important delimiter in the text. By preserving it in the - | token output, we are able to maintain a simple alignment between the - | tokens and the original string, and we ensure that no information is - | lost during processing. - -+section("sbd") - +h(2, "sentence-boundary") Sentence boundary detection - - p - | Sentence boundaries are calculated from the syntactic parse tree, so - | features such as punctuation and capitalisation play an important but - | non-decisive role in determining the sentence boundaries. Usually this - | means that the sentence boundaries will at least coincide with clause - | boundaries, even given poorly punctuated text. ++section("text-processing") + +h(2, "text-processing") Text Processing + include _annotation/_text-processing +section("pos-tagging") +h(2, "pos-tagging") Part-of-speech Tagging @@ -50,30 +16,6 @@ p This document describes the target annotations spaCy is trained to predict. include _annotation/_pos-tags -+section("lemmatization") - +h(2, "lemmatization") Lemmatization - - p A "lemma" is the uninflected form of a word. In English, this means: - - +list - +item #[strong Adjectives]: The form like "happy", not "happier" or "happiest" - +item #[strong Adverbs]: The form like "badly", not "worse" or "worst" - +item #[strong Nouns]: The form like "dog", not "dogs"; like "child", not "children" - +item #[strong Verbs]: The form like "write", not "writes", "writing", "wrote" or "written" - - p - | The lemmatization data is taken from - | #[+a("https://wordnet.princeton.edu") WordNet]. However, we also add a - | special case for pronouns: all pronouns are lemmatized to the special - | token #[code -PRON-]. - - +infobox("About spaCy's custom pronoun lemma") - | Unlike verbs and common nouns, there's no clear base form of a personal - | pronoun. Should the lemma of "me" be "I", or should we normalize person - | as well, giving "it" — or maybe "he"? spaCy's solution is to introduce a - | novel symbol, #[code -PRON-], which is used as the lemma for - | all personal pronouns. - +section("dependency-parsing") +h(2, "dependency-parsing") Syntactic Dependency Parsing diff --git a/website/assets/css/_base/_layout.sass b/website/assets/css/_base/_layout.sass index 64fc3808a..145b42789 100644 --- a/website/assets/css/_base/_layout.sass +++ b/website/assets/css/_base/_layout.sass @@ -31,6 +31,9 @@ main > *:not(footer) li a, main aside a @extend .u-link +a:focus + outline: 1px dotted $color-theme + //- Selection diff --git a/website/assets/css/_base/_objects.sass b/website/assets/css/_base/_objects.sass index 4e63a4346..de5b4a322 100644 --- a/website/assets/css/_base/_objects.sass +++ b/website/assets/css/_base/_objects.sass @@ -74,6 +74,42 @@ border-radius: $border-radius box-shadow: $box-shadow + +//- Accordion + +.o-accordion + &:not(:last-child) + margin-bottom: 2rem + +.o-accordion__content + margin-top: 3rem + +.o-accordion__button + font: inherit + border-radius: $border-radius + width: 100% + padding: 1.5rem 2rem + background: $color-subtle-light + + &[aria-expanded="true"] + border-bottom: 3px solid $color-subtle + border-bottom-left-radius: 0 + border-bottom-right-radius: 0 + + .o-accordion__hide + display: none + + &:focus:not([aria-expanded="true"]) + background: $color-subtle + +.o-accordion__icon + @include size(2.5rem) + background: $color-theme + color: $color-back + border-radius: 50% + padding: 0.35rem + pointer-events: none + //- Box .o-box diff --git a/website/assets/js/accordion.js b/website/assets/js/accordion.js new file mode 100644 index 000000000..7293f95b8 --- /dev/null +++ b/website/assets/js/accordion.js @@ -0,0 +1,25 @@ +'use strict'; + +import { $$ } from './util.js'; + +export default class Accordion { + /** + * Simple, collapsible accordion sections. + * Inspired by: https://inclusive-components.design/collapsible-sections/ + * @param {string} selector - Query selector of button element. + */ + constructor(selector) { + [...$$(selector)].forEach(btn => + btn.addEventListener('click', this.onClick.bind(this))) + } + + /** + * Toggle aria-expanded attribute on button and visibility of section. + * @param {node} Event.target - The accordion button. + */ + onClick({ target }) { + const exp = target.getAttribute('aria-expanded') === 'true' || false; + target.setAttribute('aria-expanded', !exp); + target.parentElement.nextElementSibling.hidden = exp; + } +} diff --git a/website/assets/js/models.js b/website/assets/js/models.js index 134a0e66c..57e8f84ae 100644 --- a/website/assets/js/models.js +++ b/website/assets/js/models.js @@ -101,9 +101,9 @@ export class ModelLoader { showError(modelId) { const tpl = new Templater(modelId); tpl.get('table').removeAttribute('data-loading'); - tpl.get('error').style.display = 'block'; + tpl.get('error').hidden = false; for (let key of ['sources', 'pipeline', 'vecs', 'author', 'license']) { - tpl.get(key).parentElement.parentElement.style.display = 'none'; + tpl.get(key).parentElement.parentElement.hidden = true; } } @@ -114,13 +114,12 @@ export class ModelLoader { const modelId = `${data.lang}_${data.name}`; const model = `${modelId}-${data.version}`; const tpl = new Templater(modelId); - tpl.get('error').style.display = 'none'; this.renderDetails(tpl, data) this.renderBenchmarks(tpl, data.accuracy, data.speed); this.renderCompat(tpl, modelId); tpl.get('download').setAttribute('href', `${this.repo}/releases/tag/${model}`); tpl.get('table').removeAttribute('data-loading'); - tpl.get('error').style.display = 'none'; + tpl.get('error').hidden = true; } renderDetails(tpl, { version, size, description, notes, author, url, @@ -133,9 +132,9 @@ export class ModelLoader { if (license) tpl.fill('license', formats.license(license, this.licenses[license]), true); if (sources) tpl.fill('sources', formats.sources(sources)); if (vectors) tpl.fill('vecs', formats.vectors(vectors)); - else tpl.get('vecs').parentElement.parentElement.style.display = 'none'; + else tpl.get('vecs').parentElement.parentElement.hidden = true; if (pipeline && pipeline.length) tpl.fill('pipeline', formats.pipeline(pipeline), true); - else tpl.get('pipeline').parentElement.parentElement.style.display = 'none'; + else tpl.get('pipeline').parentElement.parentElement.hidden = true; } renderBenchmarks(tpl, accuracy = {}, speed = {}) { @@ -143,7 +142,7 @@ export class ModelLoader { this.renderTable(tpl, 'parser', accuracy, val => val.toFixed(2)); this.renderTable(tpl, 'ner', accuracy, val => val.toFixed(2)); this.renderTable(tpl, 'speed', speed, Math.round); - tpl.get('benchmarks').style.display = 'block'; + tpl.get('benchmarks').hidden = false; } renderTable(tpl, id, benchmarks, converter = val => val) { @@ -151,13 +150,13 @@ export class ModelLoader { for (let key of Object.keys(this.benchKeys[id])) { if (benchmarks[key]) tpl .fill(key, convertNumber(converter(benchmarks[key]))) - .parentElement.style.display = 'table-row'; + .parentElement.hidden = false; } - tpl.get(id).style.display = 'block'; + tpl.get(id).hidden = false; } renderCompat(tpl, modelId) { - tpl.get('compat-wrapper').style.display = 'table-row'; + tpl.get('compat-wrapper').hidden = false; const header = ''; const options = Object.keys(this.compat) .map(v => ``) @@ -197,8 +196,8 @@ export class ModelComparer { this.colors = CHART_COLORS; this.fonts = CHART_FONTS; this.defaultModels = defaultModels; - this.tpl.get('result').style.display = 'block'; - this.tpl.get('error').style.display = 'none'; + this.tpl.get('result').hidden = false; + this.tpl.get('error').hidden = true; this.fetchCompat() .then(compat => this.init(compat)) .catch(this.showError.bind(this)) @@ -257,8 +256,8 @@ export class ModelComparer { showError(err) { console.error(err || 'Error'); - this.tpl.get('result').style.display = 'none'; - this.tpl.get('error').style.display = 'block'; + this.tpl.get('result').hidden = true; + this.tpl.get('error').hidden = false; } onSelect(ev) { @@ -301,8 +300,8 @@ export class ModelComparer { this.chart.update(); [model1, model2].forEach((model, i) => this.renderTable(metaKeys, i + 1, model)); this.tpl.get('result').removeAttribute('data-loading'); - this.tpl.get('error').style.display = 'none'; - this.tpl.get('result').style.display = 'block'; + this.tpl.get('error').hidden = true; + this.tpl.get('result').hidden = false; } renderTable(metaKeys, i, { lang, name, version, size, description, diff --git a/website/assets/js/rollup.js b/website/assets/js/rollup.js index 00ff92fa9..ed1763022 100644 --- a/website/assets/js/rollup.js +++ b/website/assets/js/rollup.js @@ -12,6 +12,7 @@ import ProgressBar from './progress.js'; import NavHighlighter from './nav-highlighter.js'; import Changelog from './changelog.js'; import GitHubEmbed from './github-embed.js'; +import Accordion from './accordion.js'; import { ModelLoader, ModelComparer } from './models.js'; // Assign to window so they are bundled by rollup @@ -19,5 +20,6 @@ window.ProgressBar = ProgressBar; window.NavHighlighter = NavHighlighter; window.Changelog = Changelog; window.GitHubEmbed = GitHubEmbed; +window.Accordion = Accordion; window.ModelLoader = ModelLoader; window.ModelComparer = ModelComparer; diff --git a/website/models/comparison.jade b/website/models/comparison.jade index b0ab61efe..81eeb6fd1 100644 --- a/website/models/comparison.jade +++ b/website/models/comparison.jade @@ -30,7 +30,7 @@ div(data-tpl=TPL data-tpl-key="error") | overview of the | #[+a(gh("spacy-models") + "/releases") latest model releases]. -div(data-tpl=TPL data-tpl-key="result" style="display: none") +div(data-tpl=TPL data-tpl-key="result" hidden="") +chart("compare_accuracy", 350) +aside-code("Download", "text") diff --git a/website/usage/_linguistic-features/_dependency-parse.jade b/website/usage/_linguistic-features/_dependency-parse.jade index fa14aed09..c26d18095 100644 --- a/website/usage/_linguistic-features/_dependency-parse.jade +++ b/website/usage/_linguistic-features/_dependency-parse.jade @@ -181,6 +181,10 @@ p +annotation-row(["their", "ADJ", "poss", "requests"], style) +annotation-row(["requests", "NOUN", "dobj", "submit"], style) ++h(3, "dep-scheme") Dependency label scheme + +include ../../api/_annotation/_dep-labels + +h(3, "displacy") Visualizing dependencies p diff --git a/website/usage/_linguistic-features/_pos-tagging.jade b/website/usage/_linguistic-features/_pos-tagging.jade index 4e845cdaf..2639b0224 100644 --- a/website/usage/_linguistic-features/_pos-tagging.jade +++ b/website/usage/_linguistic-features/_pos-tagging.jade @@ -2,8 +2,6 @@ include ../_spacy-101/_pos-deps -//-+aside("Help – spaCy's output is wrong!") - +h(3, "rule-based-morphology") Rule-based morphology p @@ -70,4 +68,6 @@ p | list-based exception files, acquired from | #[+a("https://wordnet.princeton.edu/") WordNet]. ++h(3, "pos-scheme") Part-of-speech tag scheme + include ../../api/_annotation/_pos-tags