« Tutoriel koRpus » : différence entre les versions
m (→Préparation) |
mAucun résumé des modifications |
||
(31 versions intermédiaires par un autre utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{tutoriel | {{tutoriel | ||
|fait_partie_du_cours= | |fait_partie_du_cours=Analytique et exploration de données | ||
|page_precedente= | |fait_partie_du_module=Text mining avec R | ||
| | |pas_afficher_sous-page=Non | ||
|page_precedente=Web scraping avec R | |||
|page_suivante=Analyse de sentiments avec R | |||
|statut=brouillon | |statut=brouillon | ||
|difficulté=intermédiaire | |||
|pages_prérequises=Text mining | |pages_prérequises=Text mining | ||
|cat tutoriels=R | |||
}} | }} | ||
== Introduction == | == Introduction == | ||
Ligne 12 : | Ligne 15 : | ||
; Sites et documentation principaux | ; Sites et documentation principaux | ||
: cran.r: [http://cran.r-project.org/web/packages/koRpus/ koRpus: An R Package for Text Analysis] | : Archive cran.r: [http://cran.r-project.org/web/packages/koRpus/ koRpus: An R Package for Text Analysis] | ||
: [http://reaktanz.de/?c=hacking&s=koRpus Homepage] | : Homepage officielle: [http://reaktanz.de/?c=hacking&s=koRpus Homepage] | ||
: [http://www.rdocumentation.org/packages/koRpus koRpus] | : RDocumentation: [http://www.rdocumentation.org/packages/koRpus koRpus] | ||
: [http://r.reaktanz.de/pckg/koRpus/koRpus_vignette.pdf koRpus_vignette.pdf] | : Vignette: [http://r.reaktanz.de/pckg/koRpus/koRpus_vignette.pdf koRpus_vignette.pdf] | ||
: [http://r.reaktanz.de/pckg/koRpus/koRpus.pdf koRpus.pdf] | : Manuel officiel: [http://r.reaktanz.de/pckg/koRpus/koRpus.pdf koRpus.pdf] | ||
: Description: A set of tools to analyze texts. Includes, amongst others, functions for automatic language detection, hyphenation, several indices of lexical diversity (e.g., type token ratio, HD-D/vocd-D, MTLD) and readability (e.g., Flesch, SMOG, LIX, Dale-Chall). Basic import functions for language corpora are also provided, to enable frequency analyses (supports Celex and Leipzig Corpora Collection file formats) and measures like tf-idf. | : Description: A set of tools to analyze texts. Includes, amongst others, functions for automatic language detection, hyphenation, several indices of lexical diversity (e.g., type token ratio, HD-D/vocd-D, MTLD) and readability (e.g., Flesch, SMOG, LIX, Dale-Chall). Basic import functions for language corpora are also provided, to enable frequency analyses (supports Celex and Leipzig Corpora Collection file formats) and measures like tf-idf. | ||
Korpus permet de: | |||
* d'importer du text ascii et qui sera tokénisé et/ou tagué "position of speech" | |||
* Calculer pleins d'indices de diversité lexicale et de lisibilité en se basant sur | |||
* Faire des analyses de fréquences en utilisant des bases de données de corpus de type Celex (Leipzig) et LCC | |||
== Préparation == | == Préparation == | ||
Ligne 23 : | Ligne 31 : | ||
; Prérequis | ; Prérequis | ||
Pour pleinment profiter de koRpus, il faudrait également installer: TreeTagger (logiciel et base de données pour taguer), une base de données corpus, et des listes de mots (certains indices de diversité et de lisibilité) | |||
Idéalement la grande majorité des analyses exigent qu'un texte soit décomposé en composants '''Part-of-speech''' (POS) et il faudrait faire fonctionner le logiciel TreeTagger pour cela (voir qqs. indications dans la section [[#Installation|Installation]]. Alternativement, on peut utiliser un "tokeniser" interne qui coupe un texte en "tokens" et identifie mots, nombres, ponctuations et abréviations. Ce dernier suffit pour calculer des formules de lisibilité, mais donne des résultats moins intéressants pour les autres indices. | |||
* Certaines formules de lisibilité exigent des listes de mots. Ces listes sont sous copy-right on règle générale, mais on peut les importer avec un simple fichier texte, un mot par ligne (encodé en UTF-8) | * Certaines formules de lisibilité exigent des listes de mots. Ces listes sont sous copy-right on règle générale, mais on peut les importer avec un simple fichier texte, un mot par ligne (encodé en UTF-8) | ||
* Les analyses de fréquences nécessitent un corpus au format ''Celex'' ( Leipzig Corpora Collection | * Les analyses de fréquences nécessitent un corpus au format ''Celex'' (Leipzig Corpora Collection, Quasthoff, Richter, & Biemann, 2006) ou LCC | ||
; Input | ; Input | ||
Ligne 33 : | Ligne 43 : | ||
* Le input devrait être un simple fichier de texte, encodé en format UTF-8 | * Le input devrait être un simple fichier de texte, encodé en format UTF-8 | ||
== | == Premiers pas == | ||
; Créer un objet S4 décomposé en POS utilisant le tokenizer inclus | ; Créer un objet S4 décomposé en POS utilisant le tokenizer inclus dans koRpus | ||
: Il s'agit de lire un fichier et de le tokenizer et tagger avec une méthode simple. Méthode à éviter si TreeTagger est installé (voir ci-dessous) | |||
: La fonction <code>tokenize()</code> demande le chemin du texte, la langue et d'autre paramètres. | : La fonction <code>tokenize()</code> demande le chemin du texte, la langue et d'autre paramètres. | ||
tagged.text.obj <- tokenize("~/methodo/iramuteq/w_txt/Alice.txt", lang="en", detect=c(parag=TRUE, hline=TRUE)) | <source lang="matlab"> | ||
tagged.text.obj <- tokenize("~/methodo/iramuteq/w_txt/Alice.txt", | |||
lang="en", | |||
detect=c(parag=TRUE, hline=TRUE)) | |||
</source> | |||
: Le résultat n'est pas si glorieux. On montre les tokens 1240 à 1245 (sur 6476) | : Le résultat n'est pas si glorieux. On montre les tokens 1240 à 1245 (sur 6476) | ||
<source lang="bash"> | <source lang="bash"> | ||
Ligne 49 : | Ligne 64 : | ||
</source> | </source> | ||
=== Créer un objet Position of speech (POS) en utilisant TreeTagger === | |||
: TreeTagger permet d'identifier les types de mots et d'annoter le texte. Le résultat va se trouver dans un objet de type S4 que l'on peut utiliser pour des analyses ultérieures. | |||
: Le path dans la liste des TT.options doit indiquer le répertoire de base de TreeTagger. | |||
: '''Important''': Le preset n'est pas "fr", "'''mais fr-utf'''" | |||
<source lang="matlab"> | <source lang="matlab"> | ||
tagged.text.objS4 <- | tagged.text.objS4 <- treetag("/home/schneide/schneide/methodo/iramuteq/w_txt/Alice.txt", | ||
treetagger="manual", | treetagger="manual", | ||
lang=" | lang="fr", | ||
TT.options= | TT.options= list (path="/home/schneide/tree-tagger/", preset="fr-utf8")) | ||
</source> | |||
Le résultat du processus de tokenizing ou POS tagging complet sera stocké dans une variable. Ensuite, on peut appliquer diverses méthodes d'analyse. | |||
; La langue (pour vérifier) | |||
<source lang="matlab"> | |||
> language(tagged.text.objS4) | |||
[1] "fr" | |||
; Le résultat token par token (pour vérifier) | |||
taggedText(tagged.text.objS4) | |||
1240 adjective NA NA | |||
1241 Sentence ending punctuation NA NA | |||
1242 adverb NA NA | |||
1243 punctuation NA NA | |||
1244 adverb NA NA | |||
1245 personal pronoun NA NA | |||
</source> | |||
=== Afficher des descriptions === | |||
La méthode <code>describe()</code> fournit quelques statistiques de base, sous format un peu brut. | |||
<source lang="matlab"> | |||
describe(tagged.text.objS4) | |||
[....] | |||
$sentences | |||
[1] 237 | |||
$avg.sentc.length | |||
[1] 16.1308 | |||
$avg.word.length | |||
[1] 5.633272 | |||
[....] | |||
</source> | |||
; Note sur la représentation interne d'un objet de type kRp.analysis | |||
Un objet de texte tagué contient 5 "slots" (propriétés en langage orienté objet): lang, TT.res (qui contient le text tagué) et desc. '''TT.res''' est un data frame qui contient 8 colonnes (token, tag, lemma, lttr, etc.) et N lignes (une pour chaque token). | |||
Dans R, rour accéder aux slots d'une classe de type S4, on peut utiliser la fonction <code>slot(slot,obj)</code> ou plus simplement utiliser la notation <code>@</code>: | |||
<source lang="matlab"> | |||
# Même chose que la fonction description(objS4) | |||
tagged.text.objS4@desc | |||
#ensuite | |||
> tagged.text.objS4@desc$sentences | |||
[1] 237 | |||
# Sortir tous les lemma | |||
tagged.text.objS4@TT.res$lemma | |||
[1] "sommaire" "@card@" "description" "rapide" "du" | |||
[6] "logiciel" "@card@" "principe" "<unknown>" "@card@" | |||
# Sortir la première ligne | |||
> tagged.text.objS4@TT.res[1,] | |||
token tag lemma lttr wclass desc stop stem | |||
1 Sommaire NOM sommaire 8 noun noun NA NA | |||
# ... et le token N = 1044 | |||
> tagged.text.objS4@TT.res[1044,] | |||
token tag lemma lttr wclass desc stop stem | |||
1044 Boeck NAM <unknown> 5 name proper name NA NA | |||
</source> | |||
; Afficher un résumé d'un texte tagué | |||
<source lang="matlab"> | |||
>summary (tagged.text.objS4) | |||
Sentences: 237 | |||
Words: 3823 (16.13 per sentence) | |||
Letters: 21536 (5.63 per word) | |||
Word class distribution: | |||
num pct | |||
noun 1114 29.1394193 | |||
verb 540 14.1250327 | |||
preposition 535 13.9942454 | |||
adjective 475 12.4247973 | |||
article 327 8.5534920 | |||
pronoun 259 6.7747842 | |||
conjunction 170 4.4467696 | |||
name 159 4.1590374 | |||
adverb 156 4.0805650 | |||
numeral 56 1.4648182 | |||
abbreviation 23 0.6016218 | |||
symbol 6 0.1569448 | |||
interjection 3 0.0784724 | |||
fullstop 237 NA | |||
punctuation 438 NA | |||
</source> | |||
; Produire un histogramme des fréquences des types de mots | |||
: plot(tagged.text2.objS4) | |||
[[Fichier:Korpus-dist.png|500px|vignette|néant]] | |||
== Indices de lisiblité == | |||
=== Calcul du Automated Readability Index (ARI) === | |||
La formule utilisée par défaut: <math>ARI = 0.5 \times \frac{W}{St} + 4.71 \times \frac{C}{W} - 21.43</math>. On pourrait changer les paramètres | |||
<source lang="matlab"> | |||
ARI (tagged.text.objS4) | |||
Automated Readability Index (ARI) | |||
Parameters: default | |||
Grade: 13.17 | |||
Text language: fr | |||
</source> | |||
=== Calcul du ARI direct === | |||
Pour le calculer le ARI on peut faire sans corpus tagué, cad. on lit directement le fichier. Par contre, il faut indique la langue. Comme le manuel explique très mal comment passer des paramètres à ARI, on le fait en deux fois: D'abord définition d'un environnement, puis appel de la fonction ARI. | |||
<source lang="matlab"> | |||
set.kRp.env (TT.cmd = "/home/schneide/tree-tagger/cmd/tree-tagger-french", lang="fr") | |||
ARI ("/mnt/schneide/methodo/iramuteq/w_txt/Alice.txt", | |||
force.lang="fr", | |||
tagger = "kRp.env") | |||
Automated Readability Index (ARI) | |||
Parameters: default | |||
Grade: 12.35 | |||
Text language: fr | |||
</source> | |||
Le résultat est différent, peut-être du a différent défauts lors de la tokenisation ? | |||
; Comparaison avec trois autres textes | |||
<source lang="matlab"> | |||
> ARI ("/mnt/schneide/methodo/iramuteq/w_txt/Activate.txt", tagger = "kRp.env") | |||
Automated Readability Index (ARI) | |||
Parameters: default | |||
Grade: 12.47 | |||
> ARI ("/mnt/schneide/methodo/iramuteq/w_txt/Mon-entretien-d-embauche.txt", tagger = "kRp.env") | |||
Automated Readability Index (ARI) | |||
Parameters: default | |||
Grade: 10.62 | |||
</source> | |||
=== Calcul de pleins d'indices === | |||
<source lang="matlab"> | |||
readability(tagged.text.objS4, hyphen=NULL, | |||
index=c("ARI", "Bormuth", "Coleman", "Coleman.Liau", "Dale.Chall", "Danielson.Bryan", | |||
"Dickes.Steiwer","DRP", "ELF", | |||
"Farr.Jenkins.Paterson", "Flesch", "Flesch.Kincaid", "FOG", "FORCAST", "Fucks", | |||
"Harris.Jacobson", "Linsear.Write", "LIX", | |||
"nWS", "RIX", "SMOG", "Spache", "Strain", "Traenkle.Bailer", "TRI", | |||
"Wheeler.Smith") | |||
) | |||
</source> | |||
Le résultat montre que certains indexes ne sont pas calculés car il manque des listes de mots: | |||
<source lang="matlab"> | |||
Automated Readability Index (ARI) | |||
Parameters: default | |||
Grade: 13.17 | |||
Coleman Formulas | |||
Parameters: default | |||
Pronouns: 6.77 (per 100 words) | |||
Prepos.: 13.99 (per 100 words) | |||
Formula 1: 40% cloze completions | |||
Formula 2: 42% cloze completions | |||
Formula 3: 43% cloze completions | |||
Formula 4: 42% cloze completions | |||
Coleman-Liau | |||
Parameters: default | |||
ECP: 28% (estimted cloze percentage) | |||
Grade: 15.49 | |||
Grade: 15.49 (short formula) | |||
Danielson-Bryan | |||
Parameters: default | |||
DB1: 9.23 | |||
DB2: 32.67 | |||
Grade: 9-12 | |||
Dickes-Steiwer's Handformel | |||
Parameters: default | |||
TTR: 0.35 | |||
Score: 44.47 | |||
Easy Listening Formula | |||
Parameters: default | |||
Exsyls: 1504 | |||
Score: 6.35 | |||
Farr-Jenkins-Paterson | |||
Parameters: default | |||
RE: 49.1 | |||
Grade: >= 13 (college) | |||
Flesch Reading Ease | |||
Parameters: en (Flesch) | |||
RE: 48.24 | |||
Grade: >= 13 (college) | |||
Flesch-Kincaid Grade Level | |||
Parameters: default | |||
Grade: 10.54 | |||
Age: 15.54 | |||
Gunning Frequency of Gobbledygook (FOG) | |||
Parameters: default | |||
Grade: 13.45 | |||
FORCAST | |||
Parameters: default | |||
Grade: 10.9 | |||
Age: 15.9 | |||
Fucks' Stilcharakteristik | |||
Score: 90.87 | |||
Grade: 9.53 | |||
Linsear Write | |||
Parameters: default | |||
Easy words: 81.66 | |||
Hard words: 18.34 | |||
Grade: 11.02 | |||
Läsbarhetsindex (LIX) | |||
Parameters: default | |||
Index: 51.26 | |||
Rating: difficult | |||
Grade: 10 | |||
Neue Wiener Sachtextformeln | |||
Parameters: default | |||
nWS 1: 7.94 | |||
nWS 2: 8.44 | |||
nWS 3: 7.39 | |||
nWS 4: 7.62 | |||
Readability Index (RIX) | |||
Parameters: default | |||
Index: 5.67 | |||
Grade: 11 | |||
Simple Measure of Gobbledygook (SMOG) | |||
Parameters: default | |||
Grade: 12.95 | |||
Age: 17.95 | |||
Strain Index | |||
Parameters: default | |||
Index: 8.14 | |||
Tränkle-Bailer Formulas | |||
Parameters: default | |||
Prepositions: 14% | |||
Conjunctions: 4% | |||
TB 1: 20.77 | |||
TB 2: 18.93 | |||
Kuntzsch's Text-Redundanz-Index | |||
Parameters: default | |||
Short words: 2319 | |||
Punctuation: 2473 | |||
Foreign: 0 | |||
Score: -5074.08 | |||
Wheeler-Smith | |||
Parameters: default | |||
Score: 63.46 | |||
Grade: > 4 | |||
Text language: fr | |||
Warning messages: | |||
1: Bormuth: Missing word list, hence not calculated. | |||
2: Dale-Chall: Missing word list, hence not calculated. | |||
3: DRP: Missing Bormuth Mean Cloze, hence not calculated. | |||
4: Harris.Jacobson: Missing word list, hence not calculated. | |||
5: Spache: Missing word list, hence not calculated. | |||
6: Note: The implementations of these formulas are still subject to validation: | |||
Coleman, Danielson.Bryan, Dickes.Steiwer, ELF, Fucks, Harris.Jacobson, nWS, Strain, Traenkle.Bailer, TRI | |||
Use the results with caution, even if they seem plausible! | |||
</source> | |||
== Indices de diversité == | |||
=== MTLD === | |||
Measure of ''Textual Lexical Diversity'' (MTLD) est un indice populaire de diversité qui calcule la longueur moyenne d'une séquence ou le taux type/token (TTR) reste supérieur à 0.72. Les auteurs appellent ces séquences des facteurs. Plus il élevé, plus il y a de la diversité. | |||
* McCarthy, P. M. & Jarvis, S. (2010). MTLD, vocd-D, and HD-D: A validation study of sophisticated approaces to lexical diversity assessment. ''Behaviour Research Methods'', 42(2), 381–392. | |||
La fonction MTLD est d'une "convience function" pour les analyses disponibles à travers la fonction ''lex.div''. | |||
En utilisant les paramètres de défaut: | |||
<source lang="matlab"> | |||
> MTLD (tagged.text.objS4) | |||
Language: "fr" | |||
Total number of tokens: 3823 | |||
Total number of types: 1347 | |||
Total number of lemmas: 541 | |||
Measure of Textual Lexical Diversity | |||
MTLD: 116.92 | |||
Number of factors: 32.7 | |||
Factor size: 0.72 | |||
SD tokens/factor: 57.34 (all factors) | |||
58.04 (complete factors only) | |||
</source> | |||
Comme toutes les méthodes de koRpus, MTLD permet de spécifier des paramètres. | |||
Note: Utiliser directement un fichier comme pour les analyses de lisibilité n'est pas possible | |||
Analyse d'un autre fichier | |||
<source lang="matlab"> | |||
MTLD (tagged.text2.objS4) | |||
Language: "fr" | |||
Total number of tokens: 3555 | |||
Total number of types: 1199 | |||
Total number of lemmas: 500 | |||
Measure of Textual Lexical Diversity | |||
MTLD: 101.8 | |||
Number of factors: 34.92 | |||
Factor size: 0.72 | |||
SD tokens/factor: 54.05 (all factors) | |||
51.17 (complete factors only) | |||
</source> | |||
=== lex.div === | |||
lex.div est la fonction qui inclut plusieurs indices, à savoir: "TTR", "MSTTR", "MATTR", "C", "R", "CTTR", "U", "S", "K", "Maas", "HD-D", "MTLD" et "MTLD-MA". | |||
Effectuer le calcul de ces indices prend pas mal de temps (plusieurs minutes sur une bonne machine). Par défaut on obtient tous, mais cela se plante (nov 2014) | |||
<source lang="matlab"> | |||
lex.div (tagged.text.objS4) | |||
# Se plante avec un message d'erreur pour la dernier indice, MTLDMA | |||
Error in 1:lastValidIndex : result would be too long a vector | |||
</source> | |||
=== Le R de Guiraud === | |||
Le R de Guiraud (Guiraud's R) est une simple variante du TTR: <math> R = V(N) / \sqrt(N)</math> | |||
<source lang="matlab"> | |||
R.ld(tagged.text.objS4) | |||
Language: "fr" | |||
Total number of tokens: 3823 | |||
Total number of types: 1347 | |||
Total number of lemmas: 541 | |||
Guiraud's R | |||
R: 21.79 | |||
</source> | </source> | ||
Ligne 61 : | Ligne 445 : | ||
* Le paquet koRpus est disponible via R | * Le paquet koRpus est disponible via R | ||
* Par contre, pour pouvoir pleinement profiter il faut aussi installer/configurer Treetagger et qui nécessite aussi l'installation du langage Perl. Les liens sont disponibles dans la documentation de ce paquet. | * Par contre, pour pouvoir pleinement profiter il faut aussi installer/configurer Treetagger et qui nécessite aussi l'installation du langage Perl. Les liens sont disponibles dans la documentation de ce paquet. | ||
== Windows == | |||
Pour faire marcher Treetagger, il faut d'abord installer le langage Perl | |||
* On conseille Active Perl. Il a été installé facilement sous Win 8.1 et il marche. Prenez la [http://www.activestate.com/languages/compare-editions Community edition] (gratuite) | |||
Ensuite il faut suivre les [http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/#Windows Instructions à la lettre] | |||
* Il faut télécharger et dézipper Treetagger | |||
* Il faut installer Treetagger '''à la racine''' c:\. Si non, il faut adapter les fichiers *.bat dans le répertoir bin (ma solution ci-dessous) | |||
set TAGDIR=C:\soft\TreeTagger | |||
* Finalement, il faut télécharger les paquets de langues (Parameter files). Il faut les dézipper dans le répertoire lib ! | |||
* Il faut corriger le nom du paquet français (en tout cas en nov. 2014) de french.par à ''french-utf8.par'' | |||
Si vous installez 3 langues, il faut avoir cette hiérarchie de fichiers: | |||
<source lang="bash"> | |||
Directory: C:\soft\TreeTagger | |||
Mode LastWriteTime Length Name | |||
---- ------------- ------ ---- | |||
d---- 03.12.2014 20:12 bin | |||
d---- 20.10.2014 18:09 cmd | |||
d---- 03.12.2014 20:25 lib | |||
-a--- 20.10.2014 18:09 3138 INSTALL.txt | |||
-a--- 20.10.2014 18:09 7922 README.txt | |||
Directory: C:\soft\TreeTagger\bin | |||
Mode LastWriteTime Length Name | |||
---- ------------- ------ ---- | |||
-a--- 20.10.2014 18:09 928 chunk-english.bat | |||
-a--- 20.10.2014 18:09 929 chunk-french.bat | |||
-a--- 20.10.2014 18:09 923 chunk-german.bat | |||
-a--- 20.10.2014 18:09 522 tag-dutch.bat | |||
-a--- 03.12.2014 20:12 541 tag-english.bat | |||
-a--- 20.10.2014 18:09 536 tag-english.bat~ | |||
-a--- 03.12.2014 20:12 537 tag-french.bat | |||
-a--- 20.10.2014 18:09 532 tag-french.bat~ | |||
-a--- 20.10.2014 18:09 526 tag-german.bat | |||
-a--- 20.10.2014 18:09 536 tag-italian.bat | |||
-a--- 20.10.2014 18:09 633 tag-spanish.bat | |||
-a--- 20.10.2014 18:09 187406 train-tree-tagger.exe | |||
-a--- 20.10.2014 18:09 193038 tree-tagger.exe | |||
Directory: C:\soft\TreeTagger\cmd | |||
Mode LastWriteTime Length Name | |||
---- ------------- ------ ---- | |||
-a--- 20.10.2014 18:09 5817 filter-chunker-output-french. | |||
-a--- 20.10.2014 18:09 2287 filter-chunker-output-german. | |||
-a--- 20.10.2014 18:09 2226 filter-chunker-output.perl | |||
-a--- 20.10.2014 18:09 1714 mwl-lookup-greek.perl | |||
-a--- 20.10.2014 18:09 2282 mwl-lookup.perl | |||
-a--- 20.10.2014 18:09 5031 tokenize.pl | |||
-a--- 20.10.2014 18:09 5308 utf8-tokenize.perl | |||
Directory: C:\soft\TreeTagger\lib | |||
Mode LastWriteTime Length Name | |||
---- ------------- ------ ---- | |||
-a--- 20.10.2014 18:09 564 dutch-abbreviations | |||
-a--- 20.10.2014 18:09 668 english-abbreviations | |||
-a--- 20.05.2014 16:26 14411865 english-utf8.par | |||
-a--- 20.10.2014 18:09 674 french-abbreviations | |||
-a--- 11.01.2010 09:57 18042133 french-utf8.par | |||
-a--- 20.10.2014 18:09 9154 german-abbreviations | |||
-a--- 07.12.2012 12:21 37479715 german-utf8.par | |||
-a--- 20.10.2014 18:09 328 italian-abbreviations | |||
-a--- 20.10.2014 18:09 25 spanish-abbreviations | |||
-a--- 20.10.2014 18:09 3662 spanish-mwls | |||
</source> | |||
== Ubuntu == | |||
Sous Ubuntu, on peut installer Treetagger de la façon suivante (enfin il faudrait aussi vérifier que ce ne soit pas fait automatiquement par la [http://r.reaktanz.de/pckg/koRpus/deb_repo.html distribution Debian]. Nous, on a installé koRpus via R-Studio | Sous Ubuntu, on peut installer Treetagger de la façon suivante (enfin il faudrait aussi vérifier que ce ne soit pas fait automatiquement par la [http://r.reaktanz.de/pckg/koRpus/deb_repo.html distribution Debian]. Nous, on a installé koRpus via R-Studio |
Dernière version du 22 mars 2020 à 22:32
Analytique et exploration de données | |
---|---|
Module: Text mining avec R | |
◀▬▬▶ | |
⚐ brouillon | ☸ intermédiaire |
⚒ 2020/03/22 | |
Prérequis | |
Sous-pages et productions: | |
Catégorie: R |
Introduction
Korpus est bibliothèque R d'analyse de textes, spécialisée pour la construction d'indices à partir d'une représentation linguistique de textes.
- Sites et documentation principaux
- Archive cran.r: koRpus: An R Package for Text Analysis
- Homepage officielle: Homepage
- RDocumentation: koRpus
- Vignette: koRpus_vignette.pdf
- Manuel officiel: koRpus.pdf
- Description: A set of tools to analyze texts. Includes, amongst others, functions for automatic language detection, hyphenation, several indices of lexical diversity (e.g., type token ratio, HD-D/vocd-D, MTLD) and readability (e.g., Flesch, SMOG, LIX, Dale-Chall). Basic import functions for language corpora are also provided, to enable frequency analyses (supports Celex and Leipzig Corpora Collection file formats) and measures like tf-idf.
Korpus permet de:
- d'importer du text ascii et qui sera tokénisé et/ou tagué "position of speech"
- Calculer pleins d'indices de diversité lexicale et de lisibilité en se basant sur
- Faire des analyses de fréquences en utilisant des bases de données de corpus de type Celex (Leipzig) et LCC
Préparation
- Prérequis
Pour pleinment profiter de koRpus, il faudrait également installer: TreeTagger (logiciel et base de données pour taguer), une base de données corpus, et des listes de mots (certains indices de diversité et de lisibilité)
Idéalement la grande majorité des analyses exigent qu'un texte soit décomposé en composants Part-of-speech (POS) et il faudrait faire fonctionner le logiciel TreeTagger pour cela (voir qqs. indications dans la section Installation. Alternativement, on peut utiliser un "tokeniser" interne qui coupe un texte en "tokens" et identifie mots, nombres, ponctuations et abréviations. Ce dernier suffit pour calculer des formules de lisibilité, mais donne des résultats moins intéressants pour les autres indices.
- Certaines formules de lisibilité exigent des listes de mots. Ces listes sont sous copy-right on règle générale, mais on peut les importer avec un simple fichier texte, un mot par ligne (encodé en UTF-8)
- Les analyses de fréquences nécessitent un corpus au format Celex (Leipzig Corpora Collection, Quasthoff, Richter, & Biemann, 2006) ou LCC
- Input
- Le input devrait être un simple fichier de texte, encodé en format UTF-8
Premiers pas
- Créer un objet S4 décomposé en POS utilisant le tokenizer inclus dans koRpus
- Il s'agit de lire un fichier et de le tokenizer et tagger avec une méthode simple. Méthode à éviter si TreeTagger est installé (voir ci-dessous)
- La fonction
tokenize()
demande le chemin du texte, la langue et d'autre paramètres.
tagged.text.obj <- tokenize("~/methodo/iramuteq/w_txt/Alice.txt",
lang="en",
detect=c(parag=TRUE, hline=TRUE))
- Le résultat n'est pas si glorieux. On montre les tokens 1240 à 1245 (sur 6476)
taggedText(tagged.text.obj)
1240 Word (kRp internal) NA NA
1241 Number (kRp internal) NA NA
1242 Sentence ending punctuation (kRp internal) NA NA
1243 Word (kRp internal) NA NA
1244 Comma (kRp internal) NA NA
1245 Word (kRp internal) NA NA
Créer un objet Position of speech (POS) en utilisant TreeTagger
- TreeTagger permet d'identifier les types de mots et d'annoter le texte. Le résultat va se trouver dans un objet de type S4 que l'on peut utiliser pour des analyses ultérieures.
- Le path dans la liste des TT.options doit indiquer le répertoire de base de TreeTagger.
- Important: Le preset n'est pas "fr", "mais fr-utf"
tagged.text.objS4 <- treetag("/home/schneide/schneide/methodo/iramuteq/w_txt/Alice.txt",
treetagger="manual",
lang="fr",
TT.options= list (path="/home/schneide/tree-tagger/", preset="fr-utf8"))
Le résultat du processus de tokenizing ou POS tagging complet sera stocké dans une variable. Ensuite, on peut appliquer diverses méthodes d'analyse.
- La langue (pour vérifier)
> language(tagged.text.objS4)
[1] "fr"
; Le résultat token par token (pour vérifier)
taggedText(tagged.text.objS4)
1240 adjective NA NA
1241 Sentence ending punctuation NA NA
1242 adverb NA NA
1243 punctuation NA NA
1244 adverb NA NA
1245 personal pronoun NA NA
Afficher des descriptions
La méthode describe()
fournit quelques statistiques de base, sous format un peu brut.
describe(tagged.text.objS4)
[....]
$sentences
[1] 237
$avg.sentc.length
[1] 16.1308
$avg.word.length
[1] 5.633272
[....]
- Note sur la représentation interne d'un objet de type kRp.analysis
Un objet de texte tagué contient 5 "slots" (propriétés en langage orienté objet): lang, TT.res (qui contient le text tagué) et desc. TT.res est un data frame qui contient 8 colonnes (token, tag, lemma, lttr, etc.) et N lignes (une pour chaque token).
Dans R, rour accéder aux slots d'une classe de type S4, on peut utiliser la fonction slot(slot,obj)
ou plus simplement utiliser la notation @
:
# Même chose que la fonction description(objS4)
tagged.text.objS4@desc
#ensuite
> tagged.text.objS4@desc$sentences
[1] 237
# Sortir tous les lemma
tagged.text.objS4@TT.res$lemma
[1] "sommaire" "@card@" "description" "rapide" "du"
[6] "logiciel" "@card@" "principe" "<unknown>" "@card@"
# Sortir la première ligne
> tagged.text.objS4@TT.res[1,]
token tag lemma lttr wclass desc stop stem
1 Sommaire NOM sommaire 8 noun noun NA NA
# ... et le token N = 1044
> tagged.text.objS4@TT.res[1044,]
token tag lemma lttr wclass desc stop stem
1044 Boeck NAM <unknown> 5 name proper name NA NA
- Afficher un résumé d'un texte tagué
>summary (tagged.text.objS4)
Sentences: 237
Words: 3823 (16.13 per sentence)
Letters: 21536 (5.63 per word)
Word class distribution:
num pct
noun 1114 29.1394193
verb 540 14.1250327
preposition 535 13.9942454
adjective 475 12.4247973
article 327 8.5534920
pronoun 259 6.7747842
conjunction 170 4.4467696
name 159 4.1590374
adverb 156 4.0805650
numeral 56 1.4648182
abbreviation 23 0.6016218
symbol 6 0.1569448
interjection 3 0.0784724
fullstop 237 NA
punctuation 438 NA
- Produire un histogramme des fréquences des types de mots
- plot(tagged.text2.objS4)
Indices de lisiblité
Calcul du Automated Readability Index (ARI)
La formule utilisée par défaut: . On pourrait changer les paramètres
ARI (tagged.text.objS4)
Automated Readability Index (ARI)
Parameters: default
Grade: 13.17
Text language: fr
Calcul du ARI direct
Pour le calculer le ARI on peut faire sans corpus tagué, cad. on lit directement le fichier. Par contre, il faut indique la langue. Comme le manuel explique très mal comment passer des paramètres à ARI, on le fait en deux fois: D'abord définition d'un environnement, puis appel de la fonction ARI.
set.kRp.env (TT.cmd = "/home/schneide/tree-tagger/cmd/tree-tagger-french", lang="fr")
ARI ("/mnt/schneide/methodo/iramuteq/w_txt/Alice.txt",
force.lang="fr",
tagger = "kRp.env")
Automated Readability Index (ARI)
Parameters: default
Grade: 12.35
Text language: fr
Le résultat est différent, peut-être du a différent défauts lors de la tokenisation ?
- Comparaison avec trois autres textes
> ARI ("/mnt/schneide/methodo/iramuteq/w_txt/Activate.txt", tagger = "kRp.env")
Automated Readability Index (ARI)
Parameters: default
Grade: 12.47
> ARI ("/mnt/schneide/methodo/iramuteq/w_txt/Mon-entretien-d-embauche.txt", tagger = "kRp.env")
Automated Readability Index (ARI)
Parameters: default
Grade: 10.62
Calcul de pleins d'indices
readability(tagged.text.objS4, hyphen=NULL,
index=c("ARI", "Bormuth", "Coleman", "Coleman.Liau", "Dale.Chall", "Danielson.Bryan",
"Dickes.Steiwer","DRP", "ELF",
"Farr.Jenkins.Paterson", "Flesch", "Flesch.Kincaid", "FOG", "FORCAST", "Fucks",
"Harris.Jacobson", "Linsear.Write", "LIX",
"nWS", "RIX", "SMOG", "Spache", "Strain", "Traenkle.Bailer", "TRI",
"Wheeler.Smith")
)
Le résultat montre que certains indexes ne sont pas calculés car il manque des listes de mots:
Automated Readability Index (ARI)
Parameters: default
Grade: 13.17
Coleman Formulas
Parameters: default
Pronouns: 6.77 (per 100 words)
Prepos.: 13.99 (per 100 words)
Formula 1: 40% cloze completions
Formula 2: 42% cloze completions
Formula 3: 43% cloze completions
Formula 4: 42% cloze completions
Coleman-Liau
Parameters: default
ECP: 28% (estimted cloze percentage)
Grade: 15.49
Grade: 15.49 (short formula)
Danielson-Bryan
Parameters: default
DB1: 9.23
DB2: 32.67
Grade: 9-12
Dickes-Steiwer's Handformel
Parameters: default
TTR: 0.35
Score: 44.47
Easy Listening Formula
Parameters: default
Exsyls: 1504
Score: 6.35
Farr-Jenkins-Paterson
Parameters: default
RE: 49.1
Grade: >= 13 (college)
Flesch Reading Ease
Parameters: en (Flesch)
RE: 48.24
Grade: >= 13 (college)
Flesch-Kincaid Grade Level
Parameters: default
Grade: 10.54
Age: 15.54
Gunning Frequency of Gobbledygook (FOG)
Parameters: default
Grade: 13.45
FORCAST
Parameters: default
Grade: 10.9
Age: 15.9
Fucks' Stilcharakteristik
Score: 90.87
Grade: 9.53
Linsear Write
Parameters: default
Easy words: 81.66
Hard words: 18.34
Grade: 11.02
Läsbarhetsindex (LIX)
Parameters: default
Index: 51.26
Rating: difficult
Grade: 10
Neue Wiener Sachtextformeln
Parameters: default
nWS 1: 7.94
nWS 2: 8.44
nWS 3: 7.39
nWS 4: 7.62
Readability Index (RIX)
Parameters: default
Index: 5.67
Grade: 11
Simple Measure of Gobbledygook (SMOG)
Parameters: default
Grade: 12.95
Age: 17.95
Strain Index
Parameters: default
Index: 8.14
Tränkle-Bailer Formulas
Parameters: default
Prepositions: 14%
Conjunctions: 4%
TB 1: 20.77
TB 2: 18.93
Kuntzsch's Text-Redundanz-Index
Parameters: default
Short words: 2319
Punctuation: 2473
Foreign: 0
Score: -5074.08
Wheeler-Smith
Parameters: default
Score: 63.46
Grade: > 4
Text language: fr
Warning messages:
1: Bormuth: Missing word list, hence not calculated.
2: Dale-Chall: Missing word list, hence not calculated.
3: DRP: Missing Bormuth Mean Cloze, hence not calculated.
4: Harris.Jacobson: Missing word list, hence not calculated.
5: Spache: Missing word list, hence not calculated.
6: Note: The implementations of these formulas are still subject to validation:
Coleman, Danielson.Bryan, Dickes.Steiwer, ELF, Fucks, Harris.Jacobson, nWS, Strain, Traenkle.Bailer, TRI
Use the results with caution, even if they seem plausible!
Indices de diversité
MTLD
Measure of Textual Lexical Diversity (MTLD) est un indice populaire de diversité qui calcule la longueur moyenne d'une séquence ou le taux type/token (TTR) reste supérieur à 0.72. Les auteurs appellent ces séquences des facteurs. Plus il élevé, plus il y a de la diversité.
- McCarthy, P. M. & Jarvis, S. (2010). MTLD, vocd-D, and HD-D: A validation study of sophisticated approaces to lexical diversity assessment. Behaviour Research Methods, 42(2), 381–392.
La fonction MTLD est d'une "convience function" pour les analyses disponibles à travers la fonction lex.div.
En utilisant les paramètres de défaut:
> MTLD (tagged.text.objS4)
Language: "fr"
Total number of tokens: 3823
Total number of types: 1347
Total number of lemmas: 541
Measure of Textual Lexical Diversity
MTLD: 116.92
Number of factors: 32.7
Factor size: 0.72
SD tokens/factor: 57.34 (all factors)
58.04 (complete factors only)
Comme toutes les méthodes de koRpus, MTLD permet de spécifier des paramètres.
Note: Utiliser directement un fichier comme pour les analyses de lisibilité n'est pas possible
Analyse d'un autre fichier
MTLD (tagged.text2.objS4)
Language: "fr"
Total number of tokens: 3555
Total number of types: 1199
Total number of lemmas: 500
Measure of Textual Lexical Diversity
MTLD: 101.8
Number of factors: 34.92
Factor size: 0.72
SD tokens/factor: 54.05 (all factors)
51.17 (complete factors only)
lex.div
lex.div est la fonction qui inclut plusieurs indices, à savoir: "TTR", "MSTTR", "MATTR", "C", "R", "CTTR", "U", "S", "K", "Maas", "HD-D", "MTLD" et "MTLD-MA".
Effectuer le calcul de ces indices prend pas mal de temps (plusieurs minutes sur une bonne machine). Par défaut on obtient tous, mais cela se plante (nov 2014)
lex.div (tagged.text.objS4)
# Se plante avec un message d'erreur pour la dernier indice, MTLDMA
Error in 1:lastValidIndex : result would be too long a vector
Le R de Guiraud
Le R de Guiraud (Guiraud's R) est une simple variante du TTR:
R.ld(tagged.text.objS4)
Language: "fr"
Total number of tokens: 3823
Total number of types: 1347
Total number of lemmas: 541
Guiraud's R
R: 21.79
Installation
- Le paquet koRpus est disponible via R
- Par contre, pour pouvoir pleinement profiter il faut aussi installer/configurer Treetagger et qui nécessite aussi l'installation du langage Perl. Les liens sont disponibles dans la documentation de ce paquet.
Windows
Pour faire marcher Treetagger, il faut d'abord installer le langage Perl
- On conseille Active Perl. Il a été installé facilement sous Win 8.1 et il marche. Prenez la Community edition (gratuite)
Ensuite il faut suivre les Instructions à la lettre
- Il faut télécharger et dézipper Treetagger
- Il faut installer Treetagger à la racine c:\. Si non, il faut adapter les fichiers *.bat dans le répertoir bin (ma solution ci-dessous)
set TAGDIR=C:\soft\TreeTagger
- Finalement, il faut télécharger les paquets de langues (Parameter files). Il faut les dézipper dans le répertoire lib !
- Il faut corriger le nom du paquet français (en tout cas en nov. 2014) de french.par à french-utf8.par
Si vous installez 3 langues, il faut avoir cette hiérarchie de fichiers:
Directory: C:\soft\TreeTagger
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 03.12.2014 20:12 bin
d---- 20.10.2014 18:09 cmd
d---- 03.12.2014 20:25 lib
-a--- 20.10.2014 18:09 3138 INSTALL.txt
-a--- 20.10.2014 18:09 7922 README.txt
Directory: C:\soft\TreeTagger\bin
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 20.10.2014 18:09 928 chunk-english.bat
-a--- 20.10.2014 18:09 929 chunk-french.bat
-a--- 20.10.2014 18:09 923 chunk-german.bat
-a--- 20.10.2014 18:09 522 tag-dutch.bat
-a--- 03.12.2014 20:12 541 tag-english.bat
-a--- 20.10.2014 18:09 536 tag-english.bat~
-a--- 03.12.2014 20:12 537 tag-french.bat
-a--- 20.10.2014 18:09 532 tag-french.bat~
-a--- 20.10.2014 18:09 526 tag-german.bat
-a--- 20.10.2014 18:09 536 tag-italian.bat
-a--- 20.10.2014 18:09 633 tag-spanish.bat
-a--- 20.10.2014 18:09 187406 train-tree-tagger.exe
-a--- 20.10.2014 18:09 193038 tree-tagger.exe
Directory: C:\soft\TreeTagger\cmd
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 20.10.2014 18:09 5817 filter-chunker-output-french.
-a--- 20.10.2014 18:09 2287 filter-chunker-output-german.
-a--- 20.10.2014 18:09 2226 filter-chunker-output.perl
-a--- 20.10.2014 18:09 1714 mwl-lookup-greek.perl
-a--- 20.10.2014 18:09 2282 mwl-lookup.perl
-a--- 20.10.2014 18:09 5031 tokenize.pl
-a--- 20.10.2014 18:09 5308 utf8-tokenize.perl
Directory: C:\soft\TreeTagger\lib
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 20.10.2014 18:09 564 dutch-abbreviations
-a--- 20.10.2014 18:09 668 english-abbreviations
-a--- 20.05.2014 16:26 14411865 english-utf8.par
-a--- 20.10.2014 18:09 674 french-abbreviations
-a--- 11.01.2010 09:57 18042133 french-utf8.par
-a--- 20.10.2014 18:09 9154 german-abbreviations
-a--- 07.12.2012 12:21 37479715 german-utf8.par
-a--- 20.10.2014 18:09 328 italian-abbreviations
-a--- 20.10.2014 18:09 25 spanish-abbreviations
-a--- 20.10.2014 18:09 3662 spanish-mwls
Ubuntu
Sous Ubuntu, on peut installer Treetagger de la façon suivante (enfin il faudrait aussi vérifier que ce ne soit pas fait automatiquement par la distribution Debian. Nous, on a installé koRpus via R-Studio
- Installer Perl si ce n'est pas déjà fait
- sudo apt-get install perl
- Créer un répertoire, par exemple tree-tagger
- Télécharger tous les fichiers indiqués dans le manuel
- sh install-tagger.sh
- Editer le fichier ~/.bashrc et ajouter (par exemple)
- export PATH=/home/votre_login/tree-tagger/cmd:/home/votre_login/tree-tagger/bin:$PATH
- Tester:
echo 'Vive big brother!' | tree-tagger-english
reading parameters ...
tagging ...
finished.
Vive NP Vive
big JJ big
brother NN brother
! SENT !
Korpus semble aussi marcher avec RKWard, une IDE/GUI pour R
Liens et bibliographie
Bibliographie
- Michalke, M. (2012, April). koRpus -- ein R-paket zur textanalyse. Paper presented at the Tagung experimentell arbeitender Psychologen (TeaP), Mannheim.
- Helmut Schmid (1995): Improvements in Part-of-Speech Tagging with an Application to German. Proceedings of the ACL SIGDAT-Workshop. Dublin, Ireland.