library(devtools)
install_github("guilhermegarcia/fonology")
Fonology package
Phonological Analysis in R
L’extension Fonology
(Garcia, 2023) contient des fonctions pertinentes à la recherche phonologique et à l’enseignement de la phonologie. Si vous avez des suggestions, veuillez visiter la page GitHub du projet. Voici quelques diapos sur l’extension (English, français, português).
Une nouvelle fonction qui compte le nombre de syllabes dans une chaîne de caractères a été ajoutée à l’extension: countSyl()
. Des fonctions pour analyser des âges en format aa:mm
(fréquemment utilisé dans la recherche sur l’acquisition du langage) ont été ajoutée à l’extension. La transcription phonémique pour l’espagnol (beta) est plus précise. Les fonctions qui utilisent les traits distinctifs acceptent maintenant votre inventaire phonémique personnalisé.
L’installation
Les fonctions principales et les données
getFeat()
etgetPhon()
pour les traits distinctifsipa()
pour la transcription phonémique en portugais et en espagnolsyllable()
pour l’extraction des sous-constituants syllabiquessonDisp()
calcule la dispersion de sonorité d’une demi-syllabe donnée. Consultez aussimeanSonDisp()
pour calculer la dispersion moyenne dans un groupe de motswug_pt()
pour générer des mots hypothétiques en portugaisbiGram_pt()
pour calculer les probabilités de bigrammes en portugaisplotVowels()
pour le trapèze vocaliqueipa2tipa()
traduit des séquences API vers latipa
psl
contient le Portuguese Stress Lexiconpt_lex
contient une version simplifiée dupsl
stopwords_pt
etstopwords_sp
contiennent les mots fonctionnels du portugais et de l’espagnol
Les traits distinctifs
La fonction getFeat()
prend un groupe des phonèmes ph
et une langue lg
et renvoie la matrice minimale des traits distinctifs pour ph
étant donné l’inventaire phonémique de la langue lg
. Actuellement, cinq langues sont acceptées : l’anglais, le français, l’italien, le portugais, et l’espagnol. Vous pouvez aussi utiliser un inventaire personnalisé. Consultez les exemples ci-dessous.
La fonction getPhon()
prend une matrice de traits distinctifs (dans un vecteur en R) ft
et une langue lg
et renvoie le groupe de phonèmes représenté par ft
étant donné l’inventaire phonémique de la langue lg
. Les langues disponibles sont les mêmes que dans la fonction getFeat()
. Vous pouvez aussi utiliser un inventaire personnalisé.
library(Fonology)
getFeat(ph = c("i", "u"), lg = "English")
#> [1] "+hi" "+tense"
getFeat(ph = c("i", "u"), lg = "French")
#> [1] "Not a natural class in this language."
getFeat(ph = c("i", "y", "u"), lg = "French")
#> [1] "+syl" "+hi"
getFeat(ph = c("p", "b"), lg = "Portuguese")
#> [1] "-son" "-cont" "+lab"
getFeat(ph = c("k", "g"), lg = "Italian")
#> [1] "+cons" "+back"
library(Fonology)
getPhon(ft = c("+syl", "+hi"), lg = "French")
#> [1] "u" "i" "y"
getPhon(ft = c("-DR", "-cont", "-son"), lg = "English")
#> [1] "t" "d" "b" "k" "g" "p"
getPhon(ft = c("-son", "+vce"), lg = "Spanish")
#> [1] "z" "d" "b" "ʝ" "g" "v"
library(Fonology)
getFeat(ph = c("p", "f", "w"),
lg = c("a", "i", "u", "y", "p",
"t", "k", "s", "w", "f"))
#> [1] "-syl" "+lab"
getPhon(ft = c("-son", "+cont"),
lg = c("a", "i", "u", "s", "z",
"f", "v", "p", "t", "m"))
#> [1] "s" "z" "f" "v"
La transcription API
La fonction ipa()
prend un mot (ou un vecteur avec plusieurs mots, réels ou hypothétiques) en portugais ou en espagnol dans sa forme orthographique (word
), et renvoie sa transcription phonémique (API), sa syllabation et son accent. La transcription phonétique, qui inclut l’accent secondaire, est générée en ajoutant l’argument narrow = T
à la fonction — cette option est disponible pour les mots en portugais seulement. Utilisez ipa_pt_test()
et ipa_sp_test()
pour générer des exemples. Par défaut, ipa()
suppose que lg = "Portuguese"
(ou lg = "pt"
) et narrow = F
.
ipa("atlético")
#> [1] "a.ˈtlɛ.ti.ko"
ipa("cantalo", narrow = T)
#> [1] "kãn.ˈta.lʊ"
ipa("antidepressivo", narrow = T)
#> [1] "ˌãn.t͡ʃi.ˌde.pɾe.ˈsi.vʊ"
ipa("feris")
#> [1] "fe.ˈɾis"
ipa("mejorado", lg = "sp")
#> [1] "me.xo.ˈɾa.do"
ipa("nuevos", lg = "sp")
#> [1] "nu.ˈe.bos"
L’accent lexical
L’extension contient aussi une fonction plus détaillée, ipa_pt()
, disponible pour les mots en portugais (cette fonction n’est pas vectorisée). Dans cette fonction, l’accent est attribué à partir de deux scénarios. Premièrement, l’accent pour les mots réels (les noms et les adjectifs) est dérivé de la base de données du Portuguese Stress Lexicon (Garcia, 2014) — si le mot y figure. Deuxièmement, des mots hypothétiques suivent les patrons généraux de l’accent portugais ainsi que les tendances probabilistes démontrées dans ma recherche (Garcia, 2017a, 2017b, 2019). Par conséquent, un mot hypothétique peut avoir l’accent proparoxyton dans des conditions appropriées étant donnée la statistique lexicale du portugais. De même, des mots traditionnellement classés comme irréguliers sont aussi générés de façon probabiliste (p. ex., les paroxytons LH]
). L’accent et le poids syllabique sont aussi utilisés pour appliquer les règles de l’abaissement spondaïque et de l’abaissement dactylique, selon le travail de Wetzels (2007). L’accent secondaire est donné si narrow = T
. Dans la fonction ipa()
, l’accent n’est pas probabiliste (et, donc, il n’est pas variable). Donc, l’accent est attribué catégoriquement pour le portugais et pour l’espagnol.
Des fonctions additionnelles
Si vous voulez tokeniser des textes et créer un tableau avec des variables phonologiques, vous pouvez utiliser quelques fonctions additionnelles qui sont disponibles dans l’extension Fonology
. Les fonctions getWeight()
, par exemple, prend un mot syllabé et renvoie son poids (p. ex., getWeight("kon.to")
renvoie HL
, où H
= heavy et L
= light). La fonction getStress()
1 renvoie la position de l’accent dans un mot (si la fenêtre accentuelle contient jusqu’à quatre syllabes) — le mot doit être accentué, mais le symbole utilisé pour l’accent peut être spécifié dans la fonction (l’argument stress
). Finalement, countSyl()
renvoie le nombre de syllabes dans une chaîne de caractères, et getSyl()
extrait des syllabes spécifiques d’un mot.
Voici un exemple de tokenisation d’un petit texte. On va créer un tableau avec quelques variables phonologiques en utilisant les fonctions mentionnées ci-dessus — l’exemple n’utilise pas des extensions telles que tm
ou tidytext
.
library(tidyverse)
= "Por exemplo, em quase todas as variedades do português..."
text
= tibble(mot = text |>
d cleanText())
= d |>
d mutate(API = ipa(mot),
accent = getStress(API),
poids = getWeight(API),
syl3 = getSyl(API, 3),
syl2 = getSyl(API, 2),
syl1 = getSyl(API, 1)) |>
ungroup() |>
filter(!mot %in% stopwords_pt) # supprimer les stopwords
mot | API | accent | poids | syl3 | syl2 | syl1 |
---|---|---|---|---|---|---|
exemplo | e.ˈzem.plo | penult | LHL | e | zem | plo |
quase | ˈkwa.ze | penult | LL | NA | kwa | ze |
todas | ˈto.das | penult | LH | NA | to | das |
variedades | va.ɾi.e.ˈda.des | penult | LLH | e | da | des |
português | poɾ.tu.ˈges | final | HLH | poɾ | tu | ges |
Si vous voulez extraire les sous-constituants syllabiques, vous pouvez utiliser la fonction syllable()
: la fonction prend une syllabe (déjà transcrite phonémiquement) et renvoie le sous-constituant d’intérêt. Ajoutons des colonnes à d
pour extraire les constituants de la dernière syllabe (syl1
).
= d |>
d select(-c(syl3, syl2, accent)) |>
mutate(at1 = syllable(syl = syl1, const = "onset"),
no1 = syllable(syl = syl1, const = "nucleus"),
co1 = syllable(syl = syl1, const = "coda"),
ri1 = syllable(syl = syl1, const = "rhyme"))
mot | API | poids | syl1 | at1 | no1 | co1 | ri1 |
---|---|---|---|---|---|---|---|
exemplo | e.ˈzem.plo | LHL | plo | pl | o | NA | o |
quase | ˈkwa.ze | LL | ze | z | e | NA | e |
todas | ˈto.das | LH | das | d | a | s | as |
variedades | va.ɾi.e.ˈda.des | LLH | des | d | e | s | es |
português | poɾ.tu.ˈges | HLH | ges | g | e | s | es |
C’est important de décider si on veut classes les semi-voyelles comme attaques ou codas, ou si on veut les classer dans le noyau. Par défaut, syllable()
considère que toutes les semi-voyelles sont dans le noyau. Vous pouvez facilement changer ces suppositions en modifiant les arguments glides_as_onsets = TRUE
et glides_as_codas = TRUE
.
Si vous avez des millions de mots dans un corpus, vous devriez d’abord exécuter ces fonctions sur les types, puis les étendre aux tokens (par exemple, en utilisant right_join()
de l’extension dplyr
).
Sonorité
Il y a trois fonctions dans l’extension pour analyser la sonorité. Premièrement, demi(word = ..., d = ...)
extrait les premières (d = 1
, le défaut) ou les deuxièmes (d = 2
) demi-syllabes d’un mot ou d’un vecteur de mots. Deuxièmement, sonDisp(demi = ...)
calcule la dispersion de sonorité d’une demi-syllabe donnée (Clements, 1990; Parker, 2011). Veuillez noter que cette métrique ne différencie pas des séquences qui respectent le principe de sonorité des celles qui ne le respectent pas, c.-à-d. pla
et lpa
ont le même score. Pour cette raison, une troisième fonction a été ajoutée :ssp(demi = ..., d = ...)
, qui évalue si une demi-syllabe respecte (1
) or non (0
) le principe de sonorité. Dans l’exemple ci-dessous, on prend la dispersion de sonorité de la première demi-syllabe dans la pénultième syllabe — ssp()
n’est pas pertinente ici, vu que toutes les syllabes en portugais respectent le principe de sonorité.
= tibble(word = c("partolo", "metrilpo", "vanplidos"))
exemple
= exemple |>
exemple rowwise() |>
mutate(ipa = ipa(word),
syl2 = getSyl(word = ipa, pos = 2),
demi1 = demi(word = syl2, d = 1),
disp = sonDisp(demi = demi1),
SSP = ssp(demi = demi1, d = 1))
word | ipa | syl2 | demi1 | disp | SSP |
---|---|---|---|---|---|
partolo | paɾ.ˈto.lo | to | to | 0.06 | 1 |
metrilpo | me.ˈtɾil.po | tɾil | tɾi | 0.56 | 1 |
vanplidos | vam.ˈpli.dos | pli | pli | 0.56 | 1 |
Vous pouvez aussi calculer la dispersion de sonorité moyenne dans un groupe de mots en utilisant la fonction meanSonDisp()
. Si vos mots d’intérêt sont en portugais (réels ou hypothétiques), vous pouvez utiliser leurs formes orthographiques. Sinon, ils doivent être phonémiquement transcrits et syllabés. Dans ce cas-là, utilisez phonemic = T
dans la fonction.
meanSonDisp(word = c("partolo", "metrilpo", "vanplidos"))
#> [1] 1.53
La visualisation de la sonorité
La fonction plotSon()
utilise ggplot2
pour générer une figure du profil de sonorité d’un mot donné (il faut utiliser sa transcription phonémique). La fonction a été adaptée de l’appli Shiny ici. Si vous voulez afficher la syllabation du mot, il faut utiliser l’argument syl = T
— naturellement, le mot doit être syllabé dans ce cas-là (la syllabe accentuée sera automatiquement mise évidence). Finalement, si vous voulez sauver la figure, ajoutez save_plot = T
à la fonction. La fonction possède un inventaire phonémique relativement flexible. L’échelle de sonorité utilisée ici a été adaptée à partir de Parker (2011).
"combradol" |>
ipa() |>
plotSon(syl = F)
"sobremesa" |>
ipa(lg = "sp") |>
plotSon(syl = T)
Les bigrammes
La fonction biGram_pt()
renvoie la probabilité (log) cumulative d’un mot possible en portugais (word
). L’argument word
doit être transcrit phonémiquement. La base de données de référence utilisée est le Portuguese Stress Lexicon.
biGram_pt("paklode")
#> [1] -43.11171
Deux fonctions additionnelles peuvent être utilisées pour explorer des bigrammes : nGramTbl()
génère un tibble avec les bigrammes phonotactiques dans un texte, et plotnGrams()
génère une figure (ggplot2
) pour l’entrée créée à partir de nGramTbl()
. Consultez ?plotnGrams()
pour plus d’informations.
Générateur de mots en portugais
La fonction wug_pt()
génère un mot hypothétique en portugais. Vous aurez envie (probablement) de faire des ajustements selon vos préférences et les patrons phonotactiques que vous voulez. Pour inclure la palatalisation dans la transcription finale, utilisez palatalization = T
— si vous le faites, gardez dans la tête que la fonction biGram_pt()
la dépalatasilera, vu qu’elle prend la transcription phonémique de la langue.
set.seed(1)
wug_pt(profile = "LHL")
#> [1] "dɾa.ˈbuɾ.me"
# On va créer un tableau avec 5 mots
set.seed(1)
tibble(word = character(5)) |>
mutate(word = wug_pt("LHL", n = 5),
bigram = word |>
biGram_pt())
word | bigram |
---|---|
dɾa.ˈbuɾ.me | -49.23458 |
ze.ˈfɾan.ka | -50.74279 |
be.ˈʒan.tɾe | -49.19741 |
ʒa.ˈgɾan.fe | -51.86230 |
me.ˈxes.vɾo | -68.84952 |
Le trapèze vocalique
La fonction plotVowels()
génère un trapèze vocalique avec ggplot2
. Si l’argument tex = T
, la fonction exporte aussi un fichier tex
avec le code LaTeX pour créer le même trapèze en utilisant l’extension vowel
. Les langues disponibles sont : l’arabe, le français, l’anglais, le néerlandais, l’allemand, le hindi, l’italien, le japonais, le coréen, le mandarin, le portugais, l’espagnol, le swahili, le russe, le talien, le thaï, et le vietnamien. La fonction est aussi disponible comme une appli Shiny ici.
plotVowels(lg = "Spanish", tex = F)
plotVowels(lg = "French", tex = F)
De l’API vers la TIPA
La fonction ipa2tipa()
prend une séquence phonémique et renvoie sa séquence tipa
équivalente, ce qui peut être utile si vous utilisez \(\LaTeX\).
"Aqui estão algumas palavras" |>
cleanText() |>
ipa(narrow = T) |>
ipa2tipa()
#> Done! Here's your tex code using TIPA:
#> \textipa{ / a."ki es."t\~{a}\~{w} aw."g\~{u}.m5s pa."la.vR5s / }
L’âge dans les études d’acquisition du langage
Il est très commun d’utiliser le format aa;mm
pour représenter l’âge des enfants dans les études d’acquisition du langage. Pour faciliter l’analyse de ce type de variable, deux fonctions ont été ajoutées à l’extension : monthsAge()
, qui renvoie un âge en mois à partir du format aa;mm
, et meanAge()
, qui renvoie l’âge moyen dans un vecteur en utilisant le format en question (dans les deux fonctions, vous pouvez spécifier le séparateur année-mois). Voici quelques exemples :
monthsAge(age = "02;06")
#> [1] 30
monthsAge(age = "05:03", sep = ":")
#> [1] 63
meanAge(age = c("02;06", "03;04", NA))
#> [1] "2;11"
meanAge(age = c("05:03", "04:07"), sep = ":")
#> [1] "4:11"
Subvention et remerciements
Une partie de ce projet a bénéficié du programme ENVOL à l’Université Laval. Deux auxiliaires de recherche à l’Université Laval ont travaillé dans la transcription phonémique de l’espagnol et du français (hiver 2023) : Nicolas C. Bustos et Linda Wong.
Citer l’extension
citation("Fonology")
#> To cite Fonology in publications, use:
#>
#> Garcia, Guilherme D. (2023). Fonology: Phonological Analysis in R. R
#> package version 0.9. Available at https://gdgarcia.ca/fonology
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Manual{,
#> title = {Fonology: Phonological Analysis in {R}},
#> author = {Guilherme D. Garcia},
#> note = {R package version 0.9},
#> year = {2023},
#> url = {https://gdgarcia.ca/fonology},
#> }
Copyright © 2024 Guilherme Duarte Garcia
Les références
Notes de bas de page
Les fonctions sans le suffixe
_pt
et_sp
sont indépendentes de la langue.↩︎