Partager via


Résolution des problèmes liés aux ressources linguistiques et aux meilleures pratiques

Cette rubrique fournit les meilleures pratiques et des suggestions pour valider et dépanner vos implémentations IWordBreaker et IStemmer .

Cette rubrique est organisée comme suit :

Bonnes pratiques

  • Vérifiez que le modèle de thread pour les ressources de langage est défini sur « les deux » dans le Registre.
  • Lorsque cela est possible, placez les données de langue dans une ressource dans votre DLL plutôt que dans un fichier distinct. Cela rend la DLL plus facile à installer et plus sécurisée. En outre, l’ajout de données linguistiques dans une ressource entraîne une amélioration des performances pour ce composant de ressource de langage.
  • Réduisez les ressources système utilisées par les composants de ressources de langage. Par exemple, si chaque instance d’un objet de ressource de langage a besoin d’un accès en lecture seule à un lexique, envisagez de partager le lexique entre toutes les instances.
  • Envisagez d’utiliser l’analyseur lexical neutre pour gérer du texte qui n’est pas dans la langue ou les paramètres régionaux de votre implémentation d’analyseur lexical. Cela permet de garantir que le texte est traité de manière cohérente dans toutes les langues.
  • Vérifiez tous les codes de retour et retournez-les à partir de fonctions telles que IStemmer::GenerateWordForms et IWordBreaker::BreakText. Si l’indexation échoue, il est important de transmettre l’erreur afin que l’utilisateur soit informé des documents qui ont été indexés.

Test de la cohérence stemmer

Nous vous recommandons de surveiller les performances d’une implémentation IStemmer à des fins de cohérence dans les conditions suivantes :

  • Le générateur de formes dérivées s’exécute de manière cohérente sur plusieurs appels à IStemmer::Init. Le générateur de formes dérivées se réinitialise avec les mêmes paramètres que lors de l’initialisation précédente, sans libérer les paramètres.
  • Étant donné le même corpus de test et les répétitions de la même requête, IStemmer::GenerateWordForms produit la même sortie et effectue des appels identiques aux méthodes de l’objet IWordFormSink .

Test de l’entrée non valide dans le générateur de formes dérivées

Nous vous recommandons de surveiller la façon dont les méthodes IStemmer gèrent toutes les erreurs liées à des paramètres non valides. En outre, nous vous recommandons de vous assurer que les méthodes stemmer ne déclenchent pas d’exceptions non gérées. Le générateur de formes dérivées doit gérer les erreurs suivantes :

  • Appelez IStemmer::Init avec pfLicense défini sur NULL. Init échoue et n’entraîne pas de violation d’accès.
  • Appelez IStemmer::GetLicenseToUse avec le paramètre ppwcsLicense défini sur NULL. IStemmer::GetLicenseToUse n’entraîne pas de violation d’accès.
  • Appelez IStemmer::GenerateWordForms avec le paramètre pwcInBuf défini sur NULL. IStemmer::GenerateWordForms échoue (retourne E_FAIL) et n’entraîne pas de violation d’accès.
  • Appelez IStemmer::GenerateWordForms avec le paramètre cwc égal à 0. IStemmer::GenerateWordForms retourne correctement (retourne S_OK) et n’entraîne pas de violation d’accès.
  • Appelez IStemmer::GenerateWordForms avec le paramètre pwcInBuf défini sur NULL et le paramètre cwc égal à 0. IStemmer::GenerateWordForms échoue (retourne E_FAIL) et n’entraîne pas de violation d’accès.

Test de la cohérence du disjoncteur Word

Nous vous recommandons de vous assurer que l’implémentation de IWordBreaker fonctionne de manière cohérente dans les conditions suivantes :

  • Word analyseur s’exécute de manière cohérente sur plusieurs appels à sa méthode IWordBreaker::Init. Le disjoncteur se réinitialise avec les mêmes paramètres que dans l’initialisation précédente, sans libérer les paramètres.
  • Étant donné le même corpus de test et les répétitions de la même requête, la méthode IWordBreaker::BreakText produit la même sortie et effectue des appels identiques aux méthodes des objets IWordSink et IPhraseSink .

Test de l’entrée non valide dans le disjoncteur Word

Nous vous recommandons de vous assurer que les méthodes IWordBreaker gèrent toutes les erreurs liées à des paramètres non valides. En outre, nous vous recommandons de vous assurer que les méthodes d’analyseur lexicaux ne déclenchent pas d’exceptions non gérées. L’analyseur lexicaux doit exécuter les fonctions suivantes et gérer les erreurs suivantes :

  • L’appel à IWordBreaker::Init doit retourner LANGUAGE_E_DATABASE_NOT_FOUND ou S_OK.
  • Appeler à IWordBreaker::Init initialise correctement le paramètre pfLicense sur FALSE et appelle IStemmer::GetLicenseToUse et n’entraîne pas de violation d’accès.
  • Word analyseur ne lit pas au-delà de la fin du paramètre awcBuffer dans la méthode IWordBreaker::BreakText.
  • Appelez iWordBreaker::BreakText avec pwcInBuf défini sur NULL. IWordBreaker::BreakText échoue (retourne E_FAIL) et n’entraîne pas de violation d’accès.
  • Appelez IWordBreaker::BreakText avec le paramètre cwc égal à 0. IWordBreaker::BreakText retourne correctement (retourne S_OK) et n’entraîne pas de violation d’accès.
  • Appelez la méthode IWordBreaker::BreakText avec le paramètre pwcInBuf défini sur NULL et le paramètre cwc égal à 0. IWordBreaker::BreakText échoue (retourne E_FAIL) et n’entraîne pas de violation d’accès.
  • Les expressions générées lors de la création de l’index contiennent le même nombre de mots.
  • Les expressions sont générées lors de la création d’index par le biais d’appels successifs aux méthodes IWordFormSink::P utWord et IWordFormSink::P utAltWord . L’analyseur lexical utilise uniquement l’objet IPhraseSink au moment de la requête.

Extension des ressources linguistiques

Présentation des composants de ressources de langage

Implémentation d’un disjoncteur Word et d’un générateur de formes dérivées

Considérations linguistiques et Unicode