Exemple .net d'utilisation du service de traduction de termes via le service www.wordreference.com


Description

Ce code se propose d'être un exemple d'utilisation du service WordReference. Il ne s'agit pas vraiment d'un service de traduction, tel que Google translate, mais plus d'un dictionnaire en ligne pour la traduction de termes.

Le fonctionnement est assez simple mais implique l'utilisation d'un identifiant. Il faut donc s'enregistrer (en ligne), pour obtenir une clef qui sera utilisée afin d'envoyer sa requête Web dont le résultat est un fichier JSON. Ce résultat est traité pour extraire l'essentiel : une liste de termes candidats.

API Registration : http://www.wordreference.com/docs/APIregistration.aspx
Documentation : http://www.wordreference.com/docs/api.aspx

Le projet contient une Form principale avec deux zones de saisie de texte (source et destination) et le choix des langues. Il n'y a pas de fonction "inversion" de la traduction.
N'oubliez pas d'entrer votre identifiant via le menu du bouton Options, pour lancer l'exemple. Le traitement se déroule principalement dans une Classe nommée WordRefJSON (la Classe n'est pas indispensable), via la méthode (fonction) nommée LaunchTranslation() et la méthode nommée ParseJSON() qui traite le résultat de l'appel Web. Il y a un peu de Regex dans ParseJSON(), mais là aussi rien d'indispensable, c'était surtout pour tester Regex.

L'interface propose une traduction "mot à mot", c'est surtout une boucle sur l'exécution de la requête sur chacun des mots de la zone de saisie (...), donc rien d'extraordinaire.

Le programme proposé a été réalisé avec l'édition gratuite Microsoft Visual Basic 2010 Express.

Source / Exemple :


''' -----------------------------------------------------------------------------
        ''' <summary>
        ''' Parse le résultat d'une requête WordReference, afin d'extraire uniquement
        ''' les traductions. 
        ''' </summary>
        ''' <param name="theData">String</param>
        ''' <returns>True : le parsing est Ok</returns>
        ''' <remarks>
        ''' La fonction utilise des expressions régulières .NET : pour plus de détails
        ''' voir http://msdn.microsoft.com/fr-fr/library/az24scfc(v=vs.100).aspx
        ''' </remarks>
        ''' -----------------------------------------------------------------------------
        Private Function ParseJSON(ByVal theData As String) As Boolean
            ParseJSON = False

            Try
                ' Vérification
                If Len(theData) <= 0 Then Exit Function

                ' Allocation si nécessaire
                If TranslatedTerms Is Nothing Then TranslatedTerms = New List(Of String)
                Call TranslatedTerms.Clear()

                ' Découpage du résultat dans un tableau
                Dim theLines() As String = theData.Split(CChar(vbCr))

                ' Recherche d'une ligne de résultat sur la traduction
                Dim theRegex1 As New Regex("""[a-zA-Z]+Translation""", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
                Dim theRegex2 As New Regex("""term"" : ""([\w\s,]+)\b""", RegexOptions.Compiled Or RegexOptions.IgnoreCase)

                ' Boucle sur toutes les lignes conservées dans le tableau
                For Each aLine As String In theLines
                    If theRegex1.IsMatch(aLine) = True And theRegex2.IsMatch(aLine) = True Then
                        ' Recherche validée : conservation du ou des termes dans une liste
                        ' avec supression des informations liées à la capture
                        Call TranslatedTerms.Add(theRegex2.Match(aLine).Value.Replace("""term"" : """, "").Replace("""", ""))
                    End If
                Next

                ' Libération
                theRegex1 = Nothing : theRegex2 = Nothing

                ' Valide au moins un résultat
                If TranslatedTerms.Count > 0 Then Return True

            Catch Err As Exception
                Call addError("parsing text operation failed: " & Len(theData) & vbCrLf & Err.Message)
            End Try
        End Function

        ''' -----------------------------------------------------------------------------
        ''' <summary>
        ''' Ouvre une Url sur le service en ligne WordReference, pour la traduction
        ''' d'un terme (ou une phrase) à partir d'une langue source et d'une de
        ''' traduction.
        ''' </summary>
        ''' <param name="theTerm">String</param>
        ''' <param name="fromLang">Code Langue source</param>
        ''' <param name="toLang">Code Langue de traduction</param>
        ''' <param name="WRkey">Clef d'accès WordReference</param>
        ''' <param name="WRversion">version WordReference utlisé</param>
        ''' <returns>Boolean</returns>
        ''' <remarks>
        ''' WordReference.com n'est pas un outil de traduction pour des textes, il est
        ''' préférable de l'utiliser pour la traduction de mot, expression ou couble de
        ''' termes (ex: au revoir)
        ''' </remarks>
        ''' -----------------------------------------------------------------------------
        Public Function LaunchTranslation(ByVal theTerm As String,
                                          Optional ByVal fromLang As String = "fr",
                                          Optional ByVal toLang As String = "en",
                                          Optional ByVal WRkey As String = vbNullString,
                                          Optional ByVal WRversion As String = WordReferenceVersion,
                                          Optional ByVal WRurl As String = WordReferenceUrl) As Boolean
            LaunchTranslation = False

            Try
                ' Création de la requête
                Dim uri As String = "http://" & WRurl & "/" & WRversion & "/" & WRkey & "/json/" & fromLang & toLang & "/" & theTerm

                _currentURL = "http://" & WRurl & "/" & WRversion & "/" & "#KEY#" & "/json/" & fromLang & toLang & "/" & theTerm

                ' Appel Web...
                Dim request As HttpWebRequest = CType(WebRequest.Create(uri), HttpWebRequest)
                ' Récuparation du résulat
                Dim response As WebResponse = request.GetResponse
                ' Traitement de la réponse..
                Dim sr As New StreamReader(response.GetResponseStream)
                If sr IsNot Nothing Then LaunchTranslation = ParseJSON(sr.ReadToEnd)

                ' Libération
                sr = Nothing
                Call response.Close()

            Catch Err As Exception
                Call addError("getting WordReference translation operation failed." & vbCrLf & Err.Message)
            End Try
        End Function

Conclusion :


A défaut du Google Translate, c'est un autre moyen de proposer une traduction ciblée dans un programme et de faire connaitre le site www.WordReference.com, je suppose. Je trouvais le principe d'utilisation du service assez simple et accessible.

Il y a certainement des améliorations et des moyens plus efficaces de réaliser la requête Web et surtout de traiter le résultat JSON. Donc, libre à vous de faire évoluer la méthode et de faire profiter au plus grand nombre de votre savoir faire :-)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.