Uses spaCy to extract morphological features from text. Returns data with Number, Tense, VerbForm, Person, Case, Mood, Aspect, etc.
Usage
extract_morphology(
tokens,
features = c("Number", "Tense", "VerbForm", "Person", "Case", "Mood", "Aspect"),
include_pos = TRUE,
include_lemma = TRUE,
model = "en_core_web_sm"
)Arguments
- tokens
A quanteda tokens object or character vector of texts.
- features
Character vector of morphological features to extract. Default includes common Universal Dependencies features.
- include_pos
Logical; include POS tags (default: TRUE).
- include_lemma
Logical; include lemmatized forms (default: TRUE).
- model
Character; spaCy model to use (default: "en_core_web_sm").
Value
A data frame with token-level morphological annotations including morph_* columns for each requested feature.
Details
Morphological features follow Universal Dependencies annotation. Common features include:
Number: Sing (singular), Plur (plural)Tense: Past, Pres (present), Fut (future)VerbForm: Fin (finite), Inf (infinitive), Part (participle), Ger (gerund)Person: 1, 2, 3 (first, second, third person)Case: Nom (nominative), Acc (accusative), Gen (genitive), Dat (dative)Mood: Ind (indicative), Imp (imperative), Sub (subjunctive)Aspect: Perf (perfective), Imp (imperfective), Prog (progressive)
Examples
if (interactive()) {
tokens <- quanteda::tokens(TextAnalysisR::SpecialEduTech$abstract[1])
morphology_data <- extract_morphology(tokens)
print(morphology_data)
}
#> spaCy initialized with model: en_core_web_sm
#> doc_id sentence_id token_id token pos tag lemma
#> 1 text1 1 1 Notes VERB VBZ note
#> 2 text1 1 2 that SCONJ IN that
#> 3 text1 1 3 the DET DT the
#> 4 text1 1 4 ALP PROPN NNP ALP
#> 5 text1 1 5 minicalculator NOUN NN minicalculator
#> 6 text1 1 6 program NOUN NN program
#> 7 text1 1 7 for ADP IN for
#> 8 text1 1 8 elementary ADJ JJ elementary
#> 9 text1 1 9 mathematics NOUN NNS mathematic
#> 10 text1 1 10 has AUX VBZ have
#> 11 text1 1 11 worked VERB VBN work
#> 12 text1 1 12 well ADV RB well
#> 13 text1 1 13 in ADP IN in
#> 14 text1 1 14 a DET DT a
#> 15 text1 1 15 clinical ADJ JJ clinical
#> 16 text1 1 16 setting NOUN NN setting
#> 17 text1 1 17 with ADP IN with
#> 18 text1 1 18 learning NOUN NN learning
#> 19 text1 1 19 - PUNCT HYPH -
#> 20 text1 1 20 disabled ADJ JJ disabled
#> 21 text1 1 21 youngsters NOUN NNS youngster
#> 22 text1 1 22 with ADP IN with
#> 23 text1 1 23 perceptual ADJ JJ perceptual
#> 24 text1 1 24 and CCONJ CC and
#> 25 text1 1 25 / SYM SYM /
#> 26 text1 1 26 or CCONJ CC or
#> 27 text1 1 27 memory NOUN NN memory
#> 28 text1 1 28 deficits NOUN NNS deficit
#> 29 text1 1 29 who PRON WP who
#> 30 text1 1 30 can AUX MD can
#> 31 text1 1 31 , PUNCT , ,
#> 32 text1 1 32 nonetheless ADV RB nonetheless
#> 33 text1 1 33 , PUNCT , ,
#> 34 text1 1 34 demonstrate VERB VB demonstrate
#> 35 text1 1 35 an DET DT an
#> 36 text1 1 36 understanding NOUN NN understanding
#> 37 text1 1 37 of ADP IN of
#> 38 text1 1 38 basic ADJ JJ basic
#> 39 text1 1 39 math NOUN NN math
#> 40 text1 1 40 concepts NOUN NNS concept
#> 41 text1 1 41 . PUNCT . .
#> 42 text1 2 1 Although SCONJ IN although
#> 43 text1 2 2 the DET DT the
#> 44 text1 2 3 approach NOUN NN approach
#> 45 text1 2 4 appears VERB VBZ appear
#> 46 text1 2 5 to PART TO to
#> 47 text1 2 6 have AUX VB have
#> 48 text1 2 7 tremendous ADJ JJ tremendous
#> 49 text1 2 8 potential NOUN NN potential
#> 50 text1 2 9 for ADP IN for
#> 51 text1 2 10 learning NOUN NN learning
#> 52 text1 2 11 - PUNCT HYPH -
#> 53 text1 2 12 disabled ADJ JJ disabled
#> 54 text1 2 13 math NOUN NN math
#> 55 text1 2 14 students NOUN NNS student
#> 56 text1 2 15 throughout ADP IN throughout
#> 57 text1 2 16 all DET DT all
#> 58 text1 2 17 realms NOUN NNS realm
#> 59 text1 2 18 of ADP IN of
#> 60 text1 2 19 education NOUN NN education
#> 61 text1 2 20 , PUNCT , ,
#> 62 text1 2 21 caution NOUN NN caution
#> 63 text1 2 22 is AUX VBZ be
#> 64 text1 2 23 advised VERB VBN advise
#> 65 text1 2 24 when SCONJ WRB when
#> 66 text1 2 25 choosing VERB VBG choose
#> morph morph_Number
#> 1 Number=Sing|Person=3|Tense=Pres|VerbForm=Fin Sing
#> 2 <NA>
#> 3 Definite=Def|PronType=Art <NA>
#> 4 Number=Sing Sing
#> 5 Number=Sing Sing
#> 6 Number=Sing Sing
#> 7 <NA>
#> 8 Degree=Pos <NA>
#> 9 Number=Plur Plur
#> 10 Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin Sing
#> 11 Aspect=Perf|Tense=Past|VerbForm=Part <NA>
#> 12 Degree=Pos <NA>
#> 13 <NA>
#> 14 Definite=Ind|PronType=Art <NA>
#> 15 Degree=Pos <NA>
#> 16 Number=Sing Sing
#> 17 <NA>
#> 18 Number=Sing Sing
#> 19 PunctType=Dash <NA>
#> 20 Degree=Pos <NA>
#> 21 Number=Plur Plur
#> 22 <NA>
#> 23 Degree=Pos <NA>
#> 24 ConjType=Cmp <NA>
#> 25 <NA>
#> 26 ConjType=Cmp <NA>
#> 27 Number=Sing Sing
#> 28 Number=Plur Plur
#> 29 <NA>
#> 30 VerbForm=Fin <NA>
#> 31 PunctType=Comm <NA>
#> 32 <NA>
#> 33 PunctType=Comm <NA>
#> 34 VerbForm=Inf <NA>
#> 35 Definite=Ind|PronType=Art <NA>
#> 36 Number=Sing Sing
#> 37 <NA>
#> 38 Degree=Pos <NA>
#> 39 Number=Sing Sing
#> 40 Number=Plur Plur
#> 41 PunctType=Peri <NA>
#> 42 <NA>
#> 43 Definite=Def|PronType=Art <NA>
#> 44 Number=Sing Sing
#> 45 Number=Sing|Person=3|Tense=Pres|VerbForm=Fin Sing
#> 46 <NA>
#> 47 VerbForm=Inf <NA>
#> 48 Degree=Pos <NA>
#> 49 Number=Sing Sing
#> 50 <NA>
#> 51 Number=Sing Sing
#> 52 PunctType=Dash <NA>
#> 53 Degree=Pos <NA>
#> 54 Number=Sing Sing
#> 55 Number=Plur Plur
#> 56 <NA>
#> 57 <NA>
#> 58 Number=Plur Plur
#> 59 <NA>
#> 60 Number=Sing Sing
#> 61 PunctType=Comm <NA>
#> 62 Number=Sing Sing
#> 63 Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin Sing
#> 64 Aspect=Perf|Tense=Past|VerbForm=Part <NA>
#> 65 <NA>
#> 66 Aspect=Prog|Tense=Pres|VerbForm=Part <NA>
#> morph_Tense morph_VerbForm morph_Person morph_Case morph_Mood morph_Aspect
#> 1 Pres Fin 3 <NA> <NA> <NA>
#> 2 <NA> <NA> <NA> <NA> <NA> <NA>
#> 3 <NA> <NA> <NA> <NA> <NA> <NA>
#> 4 <NA> <NA> <NA> <NA> <NA> <NA>
#> 5 <NA> <NA> <NA> <NA> <NA> <NA>
#> 6 <NA> <NA> <NA> <NA> <NA> <NA>
#> 7 <NA> <NA> <NA> <NA> <NA> <NA>
#> 8 <NA> <NA> <NA> <NA> <NA> <NA>
#> 9 <NA> <NA> <NA> <NA> <NA> <NA>
#> 10 Pres Fin 3 <NA> Ind <NA>
#> 11 Past Part <NA> <NA> <NA> Perf
#> 12 <NA> <NA> <NA> <NA> <NA> <NA>
#> 13 <NA> <NA> <NA> <NA> <NA> <NA>
#> 14 <NA> <NA> <NA> <NA> <NA> <NA>
#> 15 <NA> <NA> <NA> <NA> <NA> <NA>
#> 16 <NA> <NA> <NA> <NA> <NA> <NA>
#> 17 <NA> <NA> <NA> <NA> <NA> <NA>
#> 18 <NA> <NA> <NA> <NA> <NA> <NA>
#> 19 <NA> <NA> <NA> <NA> <NA> <NA>
#> 20 <NA> <NA> <NA> <NA> <NA> <NA>
#> 21 <NA> <NA> <NA> <NA> <NA> <NA>
#> 22 <NA> <NA> <NA> <NA> <NA> <NA>
#> 23 <NA> <NA> <NA> <NA> <NA> <NA>
#> 24 <NA> <NA> <NA> <NA> <NA> <NA>
#> 25 <NA> <NA> <NA> <NA> <NA> <NA>
#> 26 <NA> <NA> <NA> <NA> <NA> <NA>
#> 27 <NA> <NA> <NA> <NA> <NA> <NA>
#> 28 <NA> <NA> <NA> <NA> <NA> <NA>
#> 29 <NA> <NA> <NA> <NA> <NA> <NA>
#> 30 <NA> Fin <NA> <NA> <NA> <NA>
#> 31 <NA> <NA> <NA> <NA> <NA> <NA>
#> 32 <NA> <NA> <NA> <NA> <NA> <NA>
#> 33 <NA> <NA> <NA> <NA> <NA> <NA>
#> 34 <NA> Inf <NA> <NA> <NA> <NA>
#> 35 <NA> <NA> <NA> <NA> <NA> <NA>
#> 36 <NA> <NA> <NA> <NA> <NA> <NA>
#> 37 <NA> <NA> <NA> <NA> <NA> <NA>
#> 38 <NA> <NA> <NA> <NA> <NA> <NA>
#> 39 <NA> <NA> <NA> <NA> <NA> <NA>
#> 40 <NA> <NA> <NA> <NA> <NA> <NA>
#> 41 <NA> <NA> <NA> <NA> <NA> <NA>
#> 42 <NA> <NA> <NA> <NA> <NA> <NA>
#> 43 <NA> <NA> <NA> <NA> <NA> <NA>
#> 44 <NA> <NA> <NA> <NA> <NA> <NA>
#> 45 Pres Fin 3 <NA> <NA> <NA>
#> 46 <NA> <NA> <NA> <NA> <NA> <NA>
#> 47 <NA> Inf <NA> <NA> <NA> <NA>
#> 48 <NA> <NA> <NA> <NA> <NA> <NA>
#> 49 <NA> <NA> <NA> <NA> <NA> <NA>
#> 50 <NA> <NA> <NA> <NA> <NA> <NA>
#> 51 <NA> <NA> <NA> <NA> <NA> <NA>
#> 52 <NA> <NA> <NA> <NA> <NA> <NA>
#> 53 <NA> <NA> <NA> <NA> <NA> <NA>
#> 54 <NA> <NA> <NA> <NA> <NA> <NA>
#> 55 <NA> <NA> <NA> <NA> <NA> <NA>
#> 56 <NA> <NA> <NA> <NA> <NA> <NA>
#> 57 <NA> <NA> <NA> <NA> <NA> <NA>
#> 58 <NA> <NA> <NA> <NA> <NA> <NA>
#> 59 <NA> <NA> <NA> <NA> <NA> <NA>
#> 60 <NA> <NA> <NA> <NA> <NA> <NA>
#> 61 <NA> <NA> <NA> <NA> <NA> <NA>
#> 62 <NA> <NA> <NA> <NA> <NA> <NA>
#> 63 Pres Fin 3 <NA> Ind <NA>
#> 64 Past Part <NA> <NA> <NA> Perf
#> 65 <NA> <NA> <NA> <NA> <NA> <NA>
#> 66 Pres Part <NA> <NA> <NA> Prog
#> [ reached 'max' / getOption("max.print") -- omitted 28 rows ]
