Recherche:Les chemins du langage/Programme d'aide au calcul

Une page de Wikiversité.
Sauter à la navigation Sauter à la recherche
Babel 900.jpg
Wikimedia-research-fr.png
Travail de recherche : Les chemins du langage

Cette page de l’espace Recherche, dépend de la faculté langues. Consultez le portail de l'espace recherche ou pour plus de détails l'index des travaux de recherche par faculté.

Toutes les discussions sur ce sujet doivent avoir lieu sur cette page.


Dans un logiciel de traitement de texte[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

À 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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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

Bibliothèque Commentaire
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).
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 avec 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. 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 ?)

Références[modifier | modifier le wikicode]