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è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 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èque | wget | Firefox 67.0 | Speed Index | Start Render | Time To Interactive |
---|---|---|---|---|---|
Datatables | 0,142 | 123 | |||
Easyadmin | 8,413 | ||||
Footable | 0,189 | ||||
Sonata admin | 0,448 |
Références
- ↑ https://www.sitepoint.com/12-amazing-jquery-tables/
- ↑ https://jspreadsheets.com/
- ↑ https://www.dynatable.com/
- ↑ http://bootstrap-table.wenzhixin.net.cn/documentation/
- ↑ http://www.fixedheadertable.com/
- ↑ https://datatables.net/examples/plug-ins/range_filtering.html
- ↑ http://highcharttable.org/
- ↑ http://tabulator.info/
- ↑ https://fancygrid.com/
- ↑ https://robertoprevato.github.io/demos/jqkingtable/index.html
- ↑ http://johnpolacek.github.io/stacktable.js/
- ↑ https://codeb.it/restable/
- ↑ https://fooplugins.github.io/FooTable/docs/getting-started.html
- ↑ http://iliketomatoes.github.io/tabellajs/
- ↑ https://handsontable.com/features
- ↑ http://6pac.github.io/SlickGrid/examples/example3-editing.html
- ↑ https://clusterize.js.org/
- ↑ https://www.ag-grid.com/
- ↑ http://ng-table.com/#/
- ↑ https://github.com/adazzle/react-data-grid
- ↑ http://www.guriddo.net/demo/guriddojs/
- ↑ http://backgridjs.com/#basic-example
- ↑ http://okfnlabs.org/recline/demos/
- ↑ http://www.jtable.org/Demo/PagingAndSorting
- ↑ http://js-grid.com/
- ↑ https://www.apollographql.com/docs/react/api/react-apollo/
- ↑ https://symfony.com/doc/master/bundles/EasyAdminBundle/index.html
- ↑ https://packagist.org/packages/alterphp/easyadmin-extension-bundle
- ↑ https://symfony.com/doc/master/bundles/SonataAdminBundle/index.html