Comment détecter la langue d'une chaîne de caractères?
Quel est le meilleur moyen de détecter la langue d'une chaîne de caractères?
- Pourriez-vous préciser si vous êtes à la recherche de "la langue parlée" ou "langage de programmation".
Vous devez vous connecter pour publier un commentaire.
Si le contexte de votre code d'accès internet, vous pouvez essayer d'utiliser l'API de Google pour la détection de la langue.
http://code.google.com/apis/ajaxlanguage/documentation/
Et, puisque vous êtes à l'aide de c#, jetez un oeil à cet article sur la façon d'appeler les API en c#.
Mise à JOUR:
C# lien est parti, voici une copie en cache de la base de:
Fondamentalement, vous avez besoin de créer une URI et de l'envoyer à Google qui ressemble à:
Cela indique à l'API que vous voulez traduire "hello world" à partir de l'anglais à l'hébreu, à qui Google la réponse JSON ressemblerait à:
J'ai choisi de faire une classe de base qui représente une typique Google réponse JSON:
Puis, une Traduction de l'objet qui hérite de cette classe:
Cette Traduction de classe a un TranslationResponseData objet qui ressemble à ceci:
Enfin, nous pouvons faire la GoogleTranslator classe:
Réponse rapide: NTextCat (NuGet, Démo En Ligne)
Réponse longue:
Actuellement le meilleur moyen semble utiliser les classificateurs formés à classer morceau de texte dans l'une (ou plusieurs) des langues, de l'ensemble prédéfini.
Il y a un Perl outil appelé TextCat. Il a les modèles de langue pour 74 la plupart des langues populaires. Il ya un grand nombre de ports de cet outil dans les différents langages de programmation.
N'ont pas de ports en .Net. J'ai donc écrit un: NTextCat sur GitHub.
Il est pur .NET Framework DLL + interface de ligne de commande pour elle. Par défaut, il utilise un profil de 14 langues.
Tout commentaire est très apprécié!
De nouvelles idées et de demandes de fonctionnalités sont les bienvenus aussi 🙂
Alternative est d'utiliser de nombreux services en ligne (par exemple, l'un à partir de Google mentionné, detectlanguage.com, langid.net, etc.).
Une approche statistique à l'aide de bigrammes ou trigraphs est un très bon indicateur. Par exemple, voici les plus courantes bigrammes, en anglais, dans l'ordre: http://www.letterfrequency.org/#digraph-frequency (on peut trouver de mieux ou de plus de listes complètes). Cette méthode peut avoir un meilleur taux de réussite que la parole, l'analyse de courts extraits de texte, car il y a plus de bigrammes dans le texte qu'il y a des mots complets.
Si tu veux dire que le naturel (c'est à dire de l'homme) de la langue, c'est en général un Problème Difficile. En quelle langue est "serveur" - l'anglais ou le turc? Quel est le langage "chat" - en anglais ou en français? Quel est le langage "uno" - en italien ou en espagnol (ou en Latin!) ?
Sans prêter attention au contexte, et en faisant quelques dur traitement de la langue naturelle (<----- c'est l'expression de google de), vous n'avez pas de chance.
Vous pouvez profiter d'un coup d'oeil à Frengly - c'est une belle INTERFACE utilisateur sur le Google Translate service qui tente de deviner la langue d'entrée de texte...
Faire une analyse statistique de la chaîne: Diviser la chaîne en mots. Obtenez un dictionnaire pour chaque langue que vous souhaitez tester. Et puis de trouver le langage qui a le plus grand nombre de mots.
En C# pour chaque chaîne dans la mémoire seront en unicode, et n'est pas codé. Également dans des fichiers texte le codage n'est pas stocké. (Parfois seulement une indication de 8 bits ou 16 bits).
Si vous voulez faire une distinction entre les deux langues, vous pouvez trouver quelques astuces simples. Par exemple, si vous voulez reconnaître anglais, du néerlandais, de la chaîne de caractères qui contient le "y" est le plus souvent l'anglais. (Fiables, mais rapide).
CLD (Compact Langue Détecteur) de la bibliothèque de Google Chrome navigateur
Vous pouvez rassembler le CLD de la bibliothèque, qui est écrite en C++
http://code.google.com/p/chromium-compact-language-detector/
Vous pouvez utiliser le C# package pour l'identification de la langue de Microsoft Research:
Télécharger le package à partir du lien ci-dessus.
Nous pouvons utiliser
Regex.IsMatch(text, "[\\uxxxx-\\uxxxx]+")
pour détecter une langue spécifique. Ici, xxxx est le numéro à 4 chiffres Unicode id d'un personnage.Pour détecter arabe:
Une alternative est d'utiliser les " Traducteur de Texte API " qui est
Voici un guide de démarrage rapide sur la façon de détecter la langue du texte à l'aide de cette API