< Recherche:Les chemins du langage
Les chemins du langage

Toute réaction ou commentaire par rapport à ce travail de recherche sont les bienvenus sur cette page de discussion.

Cette page fait partie de l’espace recherche de la Wikiversité et dépend de la faculté langues. Pour plus d'informations, consultez le portail de l'espace recherche ou rendez-vous sur l'index des travaux de recherche par faculté.

Titre de la page pour créer un wikilien : Recherche:Les chemins du langage/Programme d'aide au calcul


Dans un logiciel de traitement de texte

De la même façon que les correcteurs orthographiques, il est possible d’utiliser dans traitement de texte, un calculateur de phrase, selon un ou plusieurs codes donnés. Par exemple, gratuitement avec OpenOffice.org Writer, une version du programme ci-dessous est téléchargeable ici.

Compter toutes les consonnes et voyelles d'un texte

Sub CompterConsonneVoyelle
  Document1 = ThisComponent
  Controleur1 = Document1.CurrentController
  VCurseur1 = Controleur1.ViewCursor
  VCurseur1.gotoStart(false)
  VCurseur1.gotoEnd(true)
  msgbox  ConsonneVoyelle(VCurseur1.string)
End Sub

Public Function ConsonneVoyelle(champ As String) As string
  For p = 1 To Len(champ) + 1
    l = Mid(champ, p, 1)
    If Mid(champ, p, 1) = "(" Then
      Do Until (Mid(champ, p, 1) = ")")
        p = p + 1
      Loop
    End If     
    If l = "a" Or l = "A" Or l = "á" Or l = "à" Or l = "ä" Or l = "ã" Or l = "å" Or l = "æ" Or l = "e" Or l = "E" Or l = "é" Or l = "è" _
    Or l = "ë" Or l = "ê" Or l = "i" Or l = "I" Or l = "í" Or l = "o" Or l = "O" Or l = "ò" Or l = "ó" Or l = "õ" Or l = "ô" Or l = "ö" _
    Or l = "œ" Or l = "u" Or l = "U" Or l = "ü" Or l = "û" Or l = "ú" Or l = "ù" Or l = "y" Or l = "Y" Then voyelle = voyelle + 1
    if l = "b" Or l = "B" Or l = "c" Or l = "C" Or l = "ç" Or l = "d" Or l = "D" Or l = "f" Or l = "F" Or l = "g" Or l = "G" Or l = "h" _
    Or l = "H" Or l = "k" Or l = "K" Or l = "l" Or l = "L" Or l = "m" Or l = "M" Or l = "n" Or l = "N" Or l = "p" Or l = "P" Or l = "q" _
    Or l = "Q" Or l = "r" Or l = "R" Or l = "s" Or l = "S" Or l = "t" Or l = "T" Or l = "v" Or l = "V" Or l = "w" Or l = "W" Or l = "x" _
    Or l = "X" Or l = "z" Or l = "Z" Then consonne = consonne + 1
  Next p
  ConsonneVoyelle = ("Voyelles : " & voyelle & ". Consonnes : " & consonne)
End Function

Résultats d'un code d'entraînement cérébral qui tend vers zéro

Phrase par phrase :

' Boite de message par phrase
Sub RechercheTout
  Dim Plage As Object
  Dim Phrase As String
  Dim oCSD As Object  
  oCSD = ThisComponent.createSearchDescriptor
  Phrase = "." & ".*" & "."   
  oCSD.SearchString = Phrase
  oCSD.SearchRegularExpression = True 
  Phrases =  ThisComponent.FindAll(oCSD)
  For i = 0 To Phrases.Count - 1
    msgbox ("Phrase " & (i+1) & " : " & Valeur(Phrases(i).String)
    Total = Total + Valeur(Phrases(i).String)
  Next
  msgbox ("Total : " & Total)
End Sub


' Insertions de résultats par phrase
Sub InsertionsResultats
  Dim monDocument, monTexte, monCurseur As Object
  monDocument = ThisComponent
  monTexte = monDocument.Text
  monCurseur = monTexte.createTextCursor
  monCurseur.gotoStart(false)    ' Positionnement au début du document
  debut = true
  While monCurseur.string <> "" or debut = true
    debut = false
    monCurseur.gotoNextSentence(true)
    monCurseur.CharEscapement = 20
    Phrase = monCurseur.string
    monCurseur.gotoPreviousSentence(false)
    monCurseur.gotoNextSentence(false)  ' Positionnement après la phrase courante pour l'insertion de son résultat
    monTexte.insertString(monCurseur, Valeur(Phrase) & " ", false)
    monCurseur.goright(len(Valeur(Phrase) & " "),true)  ' Positionnement après le résultat inséré
  Wend
End Sub


Public Function Valeur(champ As String) As Variant
  Dim p As Integer ' position
  Dim l As String ' lettre
  Dim h, e, cv As Integer ' codes
  For p = 1 To Len(champ) + 1
    l = Mid(champ, p, 1)
    If Mid(champ, p, 1) = "(" Then
      Do Until (Mid(champ, p, 1) = ")")
        p = p + 1
      Loop
    End If
    ' Les prononciations sont entre [...] ou /.../
    If l = "[" or l = "/" Then
      Do Until l = "]" or l = "/"
        If Mid(champ, p, 1) = "(" Then
          Do Until (Mid(champ, p, 1) = ")")
            p = p + 1
          Loop
        End If
        l = Mid(champ, p, 1)
        If l = "a" Or l = "á" Or l = "@" Or l = "ø" Or l = "æ" Or l = "c" Or l = "C" Or l = "ç" Or l = "g" Or l = "J" Or l = "h" Or l = "k" Or l = "l" Or l = "L" Or l = "o" Or l = "ó" Or l = "%" Or l = "r" Or l = "y" Or l = "u" Or l = "H" Or l = "w" Or l = "P" Or l = "ã" Or l = "H" Or l = "U" Or l = "G" Or l = "^" Or l = "*" Or l = "U" Then h = h - 1
        If l = "b" Or l = "d" Or l = "e" Or l = "é" Or l = "E" Or l = "f" Or l = "i" Or l = "I" Or l = "í" Or l = "Z" Or l = "m" Or l = "n" Or l = "p" Or l = "s" Or l = "t" Or l = "v" Or l = "z" Or l = "F" Or l = "0" Or l = "$" Or l = "X" Or l = "d" Or l = "T" Or l = "M" Or l = "I" Then h = h + 1
        p = p + 1
      Loop
    Else
      If l = "a" Or l = "A" Or l = "á" Or l = "à" Or l = "ä" Or l = "ã" Or l = "å" Or l = "æ" Or l = "c" Or l = "C" Or l = "ç" Or l = "e" Or l = "E" Or l = "é" Or l = "è" Or l = "g" Or l = "G" Or l = "h" Or l = "H" Or l = "k" Or l = "K" Or l = "l" Or l = "L" Or l = "o" Or l = "O" Or l = "ò" Or l = "ó" Or l = "õ" Or l = "ô" Or l = "ö" Or l = "œ" Or l = "q" Or l = "Q" Or l = "r" Or l = "R" Or l = "u" Or l = "U" Or l = "ü" Or l = "û" Or l = "ú" Or l = "ù" Or l = "w" Or l = "W" Then e = e - 1
      If l = "b" Or l = "B" Or l = "d" Or l = "D" Or l = "f" Or l = "F" Or l = "i" Or l = "I" Or l = "í" Or l = "j" Or l = "J" Or l = "m" Or l = "M" Or l = "n" Or l = "N" Or l = "p" Or l = "P" Or l = "s" Or l = "S" Or l = "t" Or l = "T" Or l = "v" Or l = "V" Or l = "y" Or l = "Y" Or l = "z" Or l = "Z" Or l = "é" Or l = "ê" Or l = "è" Or l = "ë" Then e = e + 1
    End If
  Next p
  Valeur = e
End Function

Sur un site web

À terme un formulaire Web pourrait permettre à chacun d'éditer son texte en ligne (ex : via CKEditor), avec deux fonctions JavaScript de calcul et suggestion d'homographe existant sur le Wiktionnaire.

Idéalement il faudrait pouvoir afficher et éditer les longues listes de mots de façon fluide, et y lancer des recherches de type mots-croisés (avec jokers...).

Modèle

En termes d'architecture de base de données Une approche par une entité "Mot" (sensible à la casse) dont on peut calculer des liens entre ses instances en forme normale de Boyce Codd, serait très consommatrice en calcul, même avec du cache.

Il conviendrait donc de persister une indexation des relations entre les mots dans une autre entité. Cette dernière sera plus générale que "figure de style", car elle devra englober les synonymes et antonymes, voire les dérivés et les étymons.

CREATE TABLE `word` (
  `id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL,
  `nature_id` int(11) NOT NULL,
  `spelling` varchar(255) COLLATE utf8_bin NOT NULL,
  `pronunciation` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `romanization` varchar(255) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Les faux-amis pouvant être totaux ou partiel, les différents sens de chaque mot devront également être répertoriés.

Vue

Idéalement un tableau triable, filtrable et modifiable devrait permettre toutes les consultations possibles, ainsi que des mises à jours fréquentes des corpus, éventuellement en collecticiel.

Étant donnés les temps de chargement de milliers de mots, une pagination est envisagée.

Comparatif des tableurs en ligne

Différents outils d'édition de tableau en ligne existent[1][2], en voici un état de l'art réalisé en 2018 :

BibliothèqueCommentaire
Dynatable[3]Payante. Basée sur jQuery (qui évolue souvent), mais inactive depuis quatre ans
Bootstrap table[4]Utilise Bootstrap. Testée avec erreur sur jQuery 3.3.1 : le chargement des data en masse et les traductions en français ne fonctionnent pas
Fixed Header Table[5]Pas de filtre ou de tri.
Datatable avec Editor[6]Payante avec éditeur (sinon tableau en lecture seule testé avec succès : on peut rechercher une partie de graphie, de prononciation ou une romanisation pour une langue et une nature donnée. Mais pas de wildcard).
jQuery HighchartTable[7]Pas de filtre ou de tri.
Tabulator[8]Testée avec erreur sur jQuery 3.3.1 si "add row" + "t.widget is not a function"
FancyGrid[9]Payante.
jQuery KingTable[10]Tableau en lecture seule. Exportation CSV, JSON et XML.
Stackable.js[11]Pas de filtre ou de tri.
JQuery ReStable[12]Pas de filtre ou de tri.
FooTable[13]Testée. Parfois l'erreur sur jQuery 3.3.1 FooTable is not defined.
Tabella.js[14]Payante.
Handsontable[15]Payante.
SlickGrid[16]Testée. Dépôt principal inactif depuis quatre ans, mais un fork semble correspond aux besoins : filtre, tri et fluidité garantie à 500 000 lignes (récupérées en JSON via une API). Toutefois, les largeurs des en-têtes ne correspondent pas toujours à ceux de leurs colonnes, et il est relativement complexe de cumuler plusieurs fonctionnalités.
Clusterize.js[17]Pas de filtre ou de tri.
ag-Grid[18]Payante.
ngTable[19]Utilise AngularJS.
React-Data-Grid[20]Utilise React.js. Semblait actif il y a trois mois mais le site officiel est cassé.
jqgrid[21]Payante.
Backgrid.js[22]Utilise Backbone.js. Semble inactive depuis un an.
Recline.js[23]Semble inactive depuis un an.
jTable[24]Testée avec erreur sur jQuery 3.3.1.
jsGrid[25]Testée mais avec une injection de chaque ligne en JS (améliorable pour les gros volumes ?).
ReactApollo[26]Utilise React.js et permet du GraphQL.

On trouve aussi un tableau en PHP pour Symfony avec Doctrine : EasyAdminBundle[27], qui permet des filtres moyennant une extension[28]. Et une alternative plus complexe : SonataAdminBundle[29].

Performances

Temps de chargement d'une page, dans une base de six millions de mots (en secondes).

BibliothèquewgetFirefox 67.0Speed IndexStart RenderTime To Interactive
Datatables0,142123
Easyadmin8,413
Footable0,189
Sonata admin0,448

Références

Cet article est issu de Wikiversity. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.