Bing Spellcheck, c’est la vie

 

Oui, oui, et re-oui. Bien écrire, un bon orthographe, et tout le reste, c’est important.

Tu as raison, Brandon, coller sur un CV « Franssé lu, parler, écris« , ça n’aide pas a devenir auteur à succès.

 

Seulement voilà.

 

L’être humain ayant ses failles (tu l’as bien compris, toi, emphatique personnage) il arrive que même le meilleur soit dépassé. Ou ait la flemme, aussi.

Du coup si jamais, lors de ta courte existence à l’échelle géologique, tu te retrouves à devoir corriger 2000 documents textes de 25 pages chacun. Tu prends ton stylo rouge et tu t’y attaques peut-être ?

Allez ma poule, à ton clavier.

 

Les APIs, c’est de la magie

 

C’est quoi ça ?

 

Une API, pour te la faire courte (CTB, Brandon), c’est une application (souvent Web) qui te permet de profiter des services qu’elle veut bien t’offrir.

Mais non, attends, regarde deux-trois exemples :

  • Une API de recherche sur une base de donnée peut te renvoyer les documents concernant ta requête.
  • Une API de reconnaissance d’image peut te dire si un chaton est présent une une photo ou non.
  • Une API de correction orthographique peut te dire si ton texte comporte des fautes.

En gros, des gens bien se sont cassé les fesses à programmer quelque chose, et toi, sauvagement, tu vas en profiter.

 

import re
import time
import json
import requests
from urllib import parse
start = time.time()

 

Tu dois commencer a connaître ces librairies, hein Brandon, vu que tu as lu tous les tutos.

 

textToCorrect = 'slt tu vouddrais paas couchher ave moi ? Seriieux regarde cme jécris bien.'

 

Allez, autant y aller de suite, on va corriger cette horreur orthographique. On peut mettre ici un texte qu’on auras récupéré en scrapant une page web. Ou en faisant du copier-coller. C’est toi qui voit.

 

''' HEADER FOR API CONNECTIONS '''
spellCheck = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Ocp-Apim-Subscription-Key': '<TA_CLEF_MICROSOFT_AZURE>' }
''' SPELL CHECK PARAMETERS '''
params = parse.urlencode({
'mode': 'spell',
'mkt': 'fr-fr',
'text': textToCorrect 
})

''' SPELL CHECK REQUEST '''
rawData = requests.get("https://api.cognitive.microsoft.com/bing/v5.0/SpellCheck/?%s" % params, headers=spellCheck)
jsonData = json.loads(rawData.text)

 

Ensuite, on prépare la connexion de notre programme à l’API de microsoft Bing!. Oui, au cas ou tu aurais pas encore compris, cette API connaît plein de mots parce qu’elle se sert des résultats du moteur de recherche Bing!.

Pour obtenir une clé qui va remplacer <TA_CLEF_MICROSOFT_AZURE> ligne 11, il faut aller sur Microsoft Cognitive Services. Tu créé un compte gratuit, tu demandes une clé API et tu les sélectionne toutes, et pas que Bing spellcheck.

Comme ça, ta clé sera la même pour profiter gratuitement de toutes ces merveilles technologiques (pas plus de 7 requêtes à la minute, quand même).

 

Le mode spell ne corrige que le vocabulaire, pas la grammaire (fautes d’accord, etc). Seulement, en français, le mode proof n’est pas disponible. Mais si tu veux corriger de l’anglais, change en :

 

'mode': 'proof',
'mkt': 'en-US',

 

Et la, à toi les corrections de fautes de conjuguaisons, de grammaire, etc.

Attends. De CONJUGUAISON ? EN ANGLAIS ? LOL.

 

Et c’est tout ?

 

''' SPELL CHECK REQUEST '''
rawData = requests.get("https://api.cognitive.microsoft.com/bing/v5.0/SpellCheck/?%s" % params, headers=spellCheck)
jsonData = json.loads(rawData.text)

''' IF MISTAKE, PRINT '''
if len(jsonData['flaggedTokens']) > 0:
    print('Analysed in {} sec'.format(round(time.time() - start, 3)))
    print('- ' * 50)
    for mistake in jsonData['flaggedTokens']:
        print('Written: {}\t\tCorrect: {}\t\t(score: {})'.format(mistake['token'], mistake['suggestions'][0]['suggestion'], round(mistake['suggestions'][0]['score'], 3)))
        if mistake['suggestions'][0]['score'] > 0.8:
            textToCorrect = re.sub(mistake['token'], mistake['suggestions'][0]['suggestion'], textToCorrect)
    print('- ' * 50)
    print('Corrected output :\n{}'.format(textToCorrect))
else:
    print('Good boy, everything\'s correct')

 

Et … Oui c’est tout. Tu load tes paramètres et le header de connexion à Bing Spellcheck. Si il te renvoie des fautes, tu les affiches et tu corriges le texte en faisant un remplacement avec re.sub de chaque erreur par chaque mot corrigé si le score de la correction est supérieur à 0.8 (change cette valeur si tu vois qu’il ne fais pas de corrections, genre 0.6).

Et à la fin, tu affiches notre texte sans faute.

 

Analysed in 4.381 sec
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Written: vouddrais		Correct: voudrais		(score: 1)
Written: paas		Correct: pas		(score: 1)
Written: couchher		Correct: coucher		(score: 1)
Written: ave		Correct: avec		(score: 1)
Written: Seriieux		Correct: serieux		(score: 1)
Written: regarde		Correct: regarder		(score: 1)
Written: jécris		Correct: j'écris		(score: 1)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Corrected output :
slt tu voudrais pas coucher avec moi ? serieux regarde cme j'écris bien.

 

Bon, en français, tu avoues que c’est pas le top. Mais regardes en anglais :

 

hey mothafucka whats upp? I herd this guyz want to figt up.

Analysed in 0.434 sec
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Written: mothafucka		Correct: motha fucka		(score: 0.675)
Written: whats upp		Correct: whats up		(score: 0.675)
Written: herd		Correct: heard		(score: 0.721)
Written: guyz		Correct: guys		(score: 0.721)
Written: figt		Correct: fight		(score: 0.721)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Corrected output :
hey motha fucka whats up ? I heard this guys want to fight up.

 

 

Allez, vas lire le Bescherelle. Ou utilise Bing Spellcheck.

 

 

PS : Le code, toujours sur Github.

 

1 thought on “Bing Spellcheck, le cauchemar du prof de langue”

·

[…] non. Mais ne pleure pas Jeanette. À la place, on va discuter API. Hey oui, depuis le temps qu’on parle de ça, il est peut-être temps d’en faire le […]

Post your comment