Une introduction au framework de vérification orthographique d'Android

introduction

Si vous créez un IME (éditeur de méthode de saisie) ou une application de traitement du langage personnalisé, vous pouvez utiliser le framework de vérificateur orthographique d'Android pour ajouter rapidement une fonctionnalité de vérification orthographique à votre application sans avoir à vous occuper de tâches de bas niveau, telles que la gestion de listes de mots ou de mots clés. déterminer les distances de Damerau-Levenshtein entre les mots.

Le framework peut également être utilisé pour créer un correcteur orthographique personnalisé (par exemple pour une nouvelle langue ou pour un domaine spécifique) que d'autres applications peuvent utiliser..

Ce tutoriel vous montre d'abord comment utiliser le framework pour interagir avec le correcteur orthographique par défaut d'Android, puis couvre les bases du développement d'un correcteur orthographique personnalisé..

1. Interaction avec un correcteur orthographique

Étape 1: créer un Activité

Avant de plonger dans le cadre, commençons par créer un Activité qui peut afficher les résultats des vérifications orthographiques.

Créez une nouvelle classe Java appelée OrthographeClient qui s'étend Activité. Cette classe doit également implémenter le SpellCheckerSession.SpellCheckerSessionListener interface pour interagir avec les services de vérification orthographique d'Android. Dans Android Studio, vous pouvez appuyer sur Alt + Insert générer automatiquement des stubs vides pour les méthodes de l'interface.

Comme cela Activité va avoir qu'un seul Affichage dans sa mise en page, vous n'avez pas besoin de créer un XML de mise en page pour cela. Remplacer le onCreate méthode pour initialiser le Affichage et le passer à la setContentView méthode pour qu'elle occupe tout l'écran.

À ce stade, votre classe devrait ressembler à ceci:

Classe publique SpellingsClient extend L'activité implémente SpellCheckerSession.SpellCheckerSessionListener suggestions de TextView privées; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); suggestions = new TextView (this); setContentView (suggestions);  @Override public nul onGetSuggestions (SuggestionsInfo [] résultats)  @Override public nul onGetSentenceSuggestions (SentenceSuggestionsInfo [] résultats) 

Étape 2: envoyer des données au vérificateur orthographique par défaut

Passons maintenant une phrase contenant plusieurs mots mal orthographiés au correcteur orthographique par défaut d’Android. Créez une méthode nommée fetchSuggestionsFor qui accepte un Chaîne en paramètre.

void privé fetchSuggestionsFor (Entrée de chaîne) 

Parce que le correcteur orthographique Un service fait partie du Services de texte API, vous devez utiliser le getSystemService méthode pour récupérer une instance de TextServicesManager. Vous pouvez alors appeler le nouveauSpellCheckerSession méthode pour créer un nouveau session, qui peut être utilisé pour envoyer des données au correcteur orthographique. Ajoutez le code suivant à la méthode:

TextServicesManager tsm = (TextServicesManager) getSystemService (TEXT_SERVICES_MANAGER_SERVICE); SpellCheckerSession session = tsm.newSpellCheckerSession (null, Locale.ENGLISH, this, true);

Assurez-vous que le Lieu vous passez à nouveauSpellCheckerSession correspond à la langue de votre phrase d'entrée.

Maintenant que le session est prêt, vous pouvez appeler getSentenceSuggestions obtenir des suggestions orthographiques pour une ou plusieurs phrases.

le getSentenceSuggestions méthode prend deux paramètres. Le premier paramètre est un tableau de TextInfo objets. Vous utilisez le constructeur de la TextInfo classe pour convertir un Chaîne dans une TextInfo objet. Le deuxième paramètre est un int qui spécifie le nombre de suggestions à générer. Pour cet exemple, définissons-le sur 5.

Ajoutez le code suivant à la méthode:

session.getSentenceSuggestions (new TextInfo [] new TextInfo (entrée), 5);

Enfin, appelez fetchSuggestionsFor dans le onCreate méthode du Activité.

// Passage d'une phrase comportant deux // mots mal orthographiés fetchSuggestionsFor ("Peter livs in Brlin");

Notez que le getSentenceSuggestions méthode a été introduite dans le niveau API 16. Les versions précédentes de l'API utilisaient le, désormais obsolète, getSuggestions méthode.

Étape 3: Afficher les suggestions

le getSentenceSuggestions La méthode interagit avec le correcteur orthographique de manière asynchrone. Lorsque les suggestions ont été générées, le onGetSentenceSuggestions la méthode s'appelle.

Les suggestions pour chaque phrase d'entrée sont disponibles dans un fichier séparé. SentenceSuggestionsInfo objet. Chaque SentenceSuggestionsInfo objet contient plusieurs SuggestionsInfo objets, généralement pour chaque mot de la phrase. Chaque SuggestionsInfo objet contient les suggestions réelles pour un mot sous la forme de Chaîne objets.

Pour cet exemple, parcourons simplement toutes les suggestions et les annexons à une StringBuffer. Utilisation getSuggestionsCount déterminer le nombre de suggestions disponibles et getSuggestionInfoAt pour obtenir une référence à un particulier SuggestionInfo.

Ajoutez le code suivant au onGetSentenceSuggestions méthode:

final StringBuffer sb = new StringBuffer (""); for (résultat PhraseSuggestionsInfo: résultats) int n = result.getSuggestionsCount (); pour (int i = 0; i < n; i++) int m = result.getSuggestionsInfoAt(i).getSuggestionsCount(); for(int k=0; k < m; k++)  sb.append(result.getSuggestionsInfoAt(i).getSuggestionAt(k)) .append("\n");  sb.append("\n");  

Vous pouvez maintenant utiliser le Affichagede Définir le texte méthode pour rendre le contenu de la StringBuffer. Cependant, vous ne pouvez pas appeler la méthode directement, car onGetSentenceSuggestions fonctionne sur son propre thread. Toute tentative de modification de l'interface utilisateur à partir d'un thread non-UI entraînera une exception d'exécution. Par conséquent, assurez-vous d'appeler le Définir le texte méthode de l'intérieur du runOnUiThread méthode.

runOnUiThread (new Runnable () @Override public void run () suggestions.setText (sb.toString ()););

Si vous exécutez votre application maintenant, la sortie ressemblera à ceci:

Comme vous pouvez le constater, notre application affiche actuellement des suggestions pour tous les mots de la phrase, même ceux orthographiés correctement..

Pour afficher uniquement les suggestions de mots mal orthographiés, nous devrons examiner les drapeaux associés à chaque mot. SuggestionsInfo objet. UNE SuggestionsInfo objet pour un mot mal orthographié a le RESULT_ATTR_LOOKS_LIKE_TYPO ensemble de drapeaux. Par conséquent, nous devons ajouter du code pour ignorer SuggestionsInfo objets où cet indicateur n'est pas défini.

Ajoutez le code suivant au onGetSentenceSuggestions méthode avant le début de la boucle la plus interne:

if ((result.getSuggestionsInfoAt (i) .getSuggestionsAttributes () & SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO)! = SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO) continue;

Exécutez l'application à nouveau pour voir la sortie modifiée.

2. Créer un correcteur orthographique personnalisé

Maintenant que vous savez comment interagir avec le correcteur orthographique par défaut, passons à la création d'un correcteur orthographique personnalisé..

Étape 1: Créer un Un service

Créez une nouvelle classe Java nommée SpellingService. Pour qu'une classe soit traitée comme un correcteur orthographique par le système Android, elle doit étendre la SpellCheckerService classe et outrepasser la createSession méthode.

Ajoutez le code suivant à SpellingService.java:

Classe publique SpellingService étend SpellCheckerService @Override public Session createSession () 

Étape 2: Créer une session

Toute la logique de vérification orthographique personnalisée réside dans le Session. Créer une nouvelle classe nommée MySpellingSession qui s'étend Session. Vous pouvez le créer en tant que sous-classe de SpellingService.

le Session classe est une classe abstraite. Après avoir remplacé toutes les méthodes abstraites, votre classe devrait ressembler à ceci:

class MySpellingSession étend la session @Override public void onCreate ()  @Override public SuggestionsInfo surGetSuggestions (TextInfo textInfo, int suggestionsLimit)  @Override public SentenceSuggestionsInfo [] surGetSentenceSuggestions (TextInfo)

Pour ce tutoriel, créons un correcteur orthographique très simple doté des fonctionnalités suivantes:

  • Il traite le mot "Peter" comme une faute de frappe.
  • Il retourne cinq orthographes alternatives pour le mot "Peter".

Le code pour implémenter ces fonctionnalités peut être ajouté à la onGetSuggestions méthode, car il est supposé gérer des mots individuels (sous forme de TextInfo objets).

Extraire le mot en utilisant le getText méthode et vérifiez si elle est égale à "Peter". Si tel est le cas, ajoutez les suggestions appropriées à un tableau de Chaîne objets. Si ce n'est pas le cas, laissez le tableau vide.

Enfin, créez et retournez un nouveau SuggestionsInfo objet qui contient le tableau de suggestions avec le drapeau RESULT_ATTR_LOOKS_LIKE_TYPO. Le code actuel pourrait ressembler à ceci:

Mot de chaîne = textInfo.getText (); Suggestions de chaînes [] = null; if (word.equals ("Peter")) suggestions = new String [] "Pedro", "Pietro", "Petar", "Pierre", "Petrus";  else suggestions = new String [] ;  SuggestionsInfo suggestionsInfo = new SuggestionsInfo (SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO, suggestions); renvoyer suggestionsInfo;

Nous n'avons pas encore fini. le OrthographeClient La classe que nous avons créée précédemment a transmis des phrases entières au correcteur orthographique, et non des mots individuels. Cela signifie que le onGetSuggestions La méthode ne sera jamais appelée directement. Par conséquent, nous devons écrire un code capable de scinder les phrases en mots et de les transmettre comme arguments au onGetSuggestions méthode. Ce code doit être ajouté à la onGetSentenceSuggestionsMultiple méthode.

Voici ce que vous faites dans le onGetSentenceSuggestionsMultiple méthode:

  • Boucle à travers le tableau de TextInfo objets qu'il reçoit en entrée et convertit chaque phrase en un tableau de mots à l'aide du Divisé méthode.
  • Convertir chaque mot en un TextInfo objet et le passer comme un argument à la onGetSuggestions méthode.
  • Ajouter les suggestions renvoyées à un ArrayList de SuggestionsInfo objets.
  • Créer et retourner un nouveau tableau de SentenceSuggestionsInfo objets utilisant le ArrayList de SuggestionsInfo objets.

Ajoutez le code suivant au onGetSentenceSuggestionsMultiple méthode:

liste suggestionsInfos = new ArrayList <> (); pour (int i = 0; i

Maintenant que la coutume Session la classe est prête, créez et retournez une instance de celle-ci dans le service createSession méthode:

renvoyer new MySpellingSession ();

Étape 3: Créer les métadonnées pour le service

Créez un nouveau fichier XML appelé spellinginfo.xml dans le res / xml dossier. Ce fichier est utilisé par le système Android pour déterminer le nom du vérificateur orthographique et les langues qu’il prend en charge. Appelons notre correcteur orthographique Mon correcteur orthographique. Ajoutez le code suivant au fichier:

    

Mettez à jour votre values ​​/ strings.xml de sorte qu'il a label_service:

Mon correcteur orthographique

Étape 4: Mettre à jour le manifeste

Tout Un service qui veut se comporter comme un correcteur orthographique doit demander le android.permission.BIND_TEXT_SERVICE permission et répondre à la android.service.textservice.SpellCheckerService action. Il devrait également contenir une référence au XML de métadonnées que nous avons défini à l'étape précédente. Définir SpellingService en ajoutant le code suivant à votre AndroidManifest.xml:

     

Étape 5: Activer le nouveau vérificateur orthographique

Si vous compilez et exécutez votre application maintenant, vous ne verrez aucune différence dans la sortie de votre Activité. En effet, il utilise toujours le correcteur orthographique Android par défaut. Pour activer votre correcteur orthographique personnalisé, accédez à la Réglages app et choisissez votre correcteur orthographique dans le Langue et entrée section.

Une fois activé, si vous redémarrez l'application, vous verrez des suggestions uniquement pour le mot "Peter"..

Conclusion

Dans ce tutoriel, vous avez appris à communiquer avec les services de vérification orthographique d'Android pour effectuer des opérations de vérification orthographique dans votre application. Vous avez également appris à créer votre propre correcteur orthographique personnalisé. Vous pouvez utiliser ces connaissances pour créer non seulement de meilleurs IME, mais également des correcteurs orthographiques complets pour les langues actuellement non prises en charge par Android. Pour en savoir plus sur l'API TextServices et la structure du vérificateur d'orthographe, consultez le manuel de référence des développeurs Android..