CoNLL-U format
NB: The doc described here corresponds to Grew version 1.17 (linked to conll version 1.19.4).
You can check your versions with opam list | grep grew and opam list | grep conll.
The most common way to store dependency structures is the CoNLL format. Several extensions were proposed and we describe here the one which is used by Grew, known as CoNLL-U format defined in the UD (Universal Dependencies) project. Grew also handles the CoNLL-U plus format, see CoNLL-U plus page.
For a sentence, some metadata are given in lines beginning by #.
The rest of the lines described the tokens of the structure.
Token lines contain 10 fields, separated by tabulations.
The file n01118003.conllu is an example of CoNLL-U data taken form the corpus UD_English-PUD (version 2.16).
# sent_id = n01118003
# text = Drop the mic.
1 Drop drop VERB VB VerbForm=Inf 0 root 0:root _
2 the the DET DT Definite=Def|PronType=Art 3 det 3:det _
3 mic mic NOUN NN Number=Sing 1 obj 1:obj SpaceAfter=No
4 . . PUNCT . _ 1 punct 1:punct _
We explain here how Grew deals with the 10 fields of CoNLL-U files:
ID: This field is a number used as an internal identifier for the corresponding lexical unit (LU), it can not be accessed from directly from Grew.FORM: The phonological form of the LU; in Grew, the value of this field is available through a feature namedformLEMMA: The lemma of the LU; in Grew, this corresponds to the feature namedlemmaUPOS: The universal POS; in Grew, it is encoded as feature nameduposXPOS: A language-specific part-of-speech tag; in Grew, it is encoded as feature namedxposFEATS: List of morphological features; each feature is turned into a Grew node feature.HEAD: Head of the current word, which is either a value of ID or0for the root node.DEPREL: Dependency relation to the HEAD (rootiff HEAD =0).DEPS: (UD only) Enhanced dependency graph in the form of a list of head-deprel pairs. In Grew, these relations are encoded with the edge featureenhanced=yes.MISC: Any other annotation. See below for the way Grew parses this field.
A few examples of usage in Grew requests:
- matching the word form is →
pattern { X [form="is"] } - matching the lemma be →
pattern { X [lemma="be"] } - matching the Part Of Speech VERB →
pattern { X [upos=VERB] }
Note that the CoNLL-U format is very often used to describe dependency syntax corpora.
In these cases, a set of sentences is described in the same file using the same convention as above and a blank line as separator between sentences.
It is also requires that each sentence is give a sent_id metadata which is unique in the corpus.
The anchor node at position 0
In order to be able to request or to manipulate the root relation (for instance, if some rewriting rule is designed to change the root of the structure), we need to add a special node at position 0 (called the “anchor” node) which is the source of the root relation.
Hence, the 4 tokens example above produces the 5 nodes graph below:
This special node has only the form feature defined as __0__ and no other feature. In a Grew request, to prevent the special node from being matched, one can add a upos contraint.
For instance, with the request pattern { X [] } all the 5 nodes of the above graph can be matched, whereas with the request pattern { X [upos] } only the 4 nodes associated with real tokens can be matched.
Layered features
Universal Dependency proposes a notion of layered features when the same feature can be marked more than once.
For instance the French word votre is a possessive determiner, introducing a singular entity but referencing to a plural possessor.
In CoNLL feats, this is encoded as Number=Sing|Number[psor]=Plur.
Unfortunately, the bracket notation in the feature value name conflicts with other uses of brackets in Grew syntax.
In Grew, the bracket notation is replaced by an alternative notation using double underscore: The (S)UD feature name Number[psor] is written Number__psor.
For instance:
- to match a feature
Number[psor]=Plurin a Grew request:pattern { X [Number__psor=Plur] } - to udate the feature
Gender[psor]toFemon nodeX, use the commandX.Gender__psor = Fem
How the MISC field is handled by Grew?
There are two main problems in dealing with the MISC field in the existing (S)UD data.
- The content of the
MISCfield is not fully specified and it is used in many different ways in the UD data, and our aim is both to:
- be able to access to the content of
MISCand to modify it through rules when it is a regular feature structure - leave it unchanged in the other cases
- When a Grew node contains a feature such as
Case=Gen, there is no canonical way to decide whether it should be output in theFEATSfield or in theMISCfield.
To deal with the first problem, at parsing time, Grew tries to split the MISC field into a set of (feature, value) pairs.
If this is not possible, the raw content is kept in a special feature named __RAW_MISC__
(
).
Doing this, it is possible to keep the MISC field unchanged during rewriting.
For the second problem, the handling of the MISC features depends on the config used (option -config on Grew CLI).
- If the config is
basicorsequoia, all features are written in theFEATSfield (and theMISCCoNLL field is always_); - If the config is
udorsud, there is a fixed list of features used in theFEATSfield (list given at the bottom of this page).
Unfortunately, in practice, the same feature may be used in both fields FEATS and MISC.
For instance, in the sentence test-12 from UD_Polish-LFG (below), the feature Case appear in FEATS in tokens 2, 5, 6 and in MISC in token 4!
In order to be able to correctly output the features in the right field, Grew adds a prefix __MISC__ to the feature which is is given the MISC if it is in the list given at the end of this page.
# sent_id = test-12
# text = A inni przychodzą do telewizji pijani.
# converted_from_file = NKJP1M_6203010001843_morph_2-p_morph_2.27-s-dis@1.xml
# genre = social
1 A a CCONJ conj _ 3 cc 3:cc _
2 inni inny ADJ adj:pl:nom:m1:pos Case=Nom|Degree=Pos|Gender=Masc|Number=Plur|SubGender=Masc1 3 nsubj 3:nsubj _
3 przychodzą przychodzić VERB fin:pl:ter:imperf Aspect=Imp|Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act 0 root 0:root _
4 do do ADP prep:gen AdpType=Prep 5 case 5:case Case=Gen
5 telewizji telewizja NOUN subst:sg:gen:f Case=Gen|Gender=Fem|Number=Sing 3 obl 3:obl:do _
6 pijani pijany ADJ adj:pl:nom:m1:pos Case=Nom|Degree=Pos|Gender=Masc|Number=Plur|SubGender=Masc1 2 acl 2:acl SpaceAfter=No
7 . . PUNCT interp PunctType=Peri 3 punct 3:punct _
Requests for Case in FEATS:
and for Case in MISC:
.
Additional features textform and wordform
In order to deal with several places where text data present in the original sentence and the corresponding linguistic unit are different, a systematic use of the two features textform and wordform was proposed in #683.
The two fields are built from CoNLL-U data in the following way:
- If a multiword token
i-jis declared:- the
textformof the first token is theFORMfield of the multiword token - the
textformof each other token is_
- the
- If the token is an empty node (exists only in EUD):
textform=_andwordform=__EMPTY__
- For each token without
textformfeature, thetextformis set to theFORMfield value - For each token without
wordformfeature, thewordformis set to theFORMfield value
⚠️ In places where wordform should be different from FORM field, this should be expressed in the data with an explicit wordform feature.
This includes:
- lowercased form of initial word or potentially other words in the sentence
- typographical or orthographical errors
- token linked by a
goeswithrelation
See few examples in SUD_French-GSD .
Naming of CoNLL columns FORM, UPOS and XPOS in older Grew versions
In older versions of Grew (before the definition of the CoNLL-U format), the fields 2 (FORM), 4 (UPOS) and 5 (XPOS) where accessible with the names phon, cat and pos respectively.
Since 1.6, these names cannot be used anymore.
If you used this features names, you have to update your old GRS with the following correspondance:
phonmust be replaced byformcatmust be replaced byuposposmust be replaced byxpos
Note that this applies to the examples given in the book “Application of Graph Rewriting to Natural Language Processing”.
List of features put in the FEATS field
This list in defined in the conll library (version 1.19.4).
If the config is ud or sud, the following list of features is used to decide which features should be written into the FEATS field.
The list is based on the data available in UD 2.16 (plus the Shared feature specific to SUD):
AbbrAccompAdjTypeAdpTypeAdvTypeAdvlzAgglutinationAlsoAnalytAnimacyAnimacy[gram]Animacy[obj]AspectBasStyleCaseCausCfmClasClassCliticClusivityClusivity[obj]Clusivity[psor]Clusivity[subj]CompoundComtConcesConjTypeConnegativeContrastContvCorfDeclDefiniteDefinitizerDegreeDeixisDeixisRefDeixis[psor]DelibDeoDerivationDetermDetransDevDialectDistDynEchoEgoEmphEmphaticEvidentExclExtPosFactFalseFocFocusFocusTypeForeignFormGenderGender[abs]Gender[dat]Gender[erg]Gender[io]Gender[obj]Gender[psor]Gender[subj]GnqHebBinyanHebExistentialHonHtpHumHyphImprsIncorpInfFormInflClassInflClass[nominal]IntIntensIntenseIntensionLangIdLanguageLinkModalityMoodMorphMovementMutationNCountNameTypeNegationTypeNeutralNmzrNomzrNonFocNounBaseNounClassNounTypeNumFormNumTypeNumValueNumberNumber[abs]Number[cs]Number[dat]Number[erg]Number[grnd]Number[io]Number[lo]Number[obj]Number[po]Number[psed]Number[psor]Number[refl]Number[ro]Number[subj]OblOrthPartFormPartTypePartTypeQpmPclPersonPerson[abs]Person[cs]Person[dat]Person[erg]Person[grnd]Person[io]Person[lo]Person[obj]Person[po]Person[psor]Person[refl]Person[ro]Person[subj]PolarityPolitePolite[abs]Polite[dat]Polite[erg]PositionPossPossessedPredPrefixPrepCasePrepFormPrivPronClassPronTypeProperPrpPunctSidePunctTypePurpRcpTypeRecipRedRedupReflexReflex[obj]Reflex[subj]RelRelTypeRelnReportShared(Specific to SUD)SpeechStrengthStyleSubGenderSubcatSubordSubordinativeTenseTopTransTvTypoUninflectValencyVariantVentiveVerbClassVerbFormVerbStemVerbTypeVoice




