Détecter la langue de chaîne de caractères en PHP
En PHP, est-il un moyen de détecter la langue d'une chaîne de caractères? Supposons que la chaîne est au format UTF-8.
- Vous souhaitez tester si une chaîne a des caractères non-anglais? Pouvez-vous définir ce que "anglais" est?
- "le problème avec les français, c'est qu'ils ont pas de mot pour entrepreneur"
- Fondamentalement, ce que je veux faire, c'est que j'ai un tableau de la réception des commentaires de l'utilisateur, chaque commentaire peut être dans une langue différente. sur le PHP backend, j'ai envie de mettre un drapeau si le commentaire n'est pas l'anglais (comme en français ou en Japonais), et l'interface affichera un bouton traduire si le drapeau est réglé
- Ce que vous voulez faire est possible avec du javascript et google. Vous n'avez pas besoin de faire autre chose que de l'inclure.
- vous voudrez peut-être essayer google cld2!
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas détecter la langue du type de caractère. Et il n'y a pas infaillible façons de le faire.
Avec n'importe quelle méthode, vous êtes en train de faire une supposition éclairée. Il y en a quelques calculs liés articles y
J'ai utilisé le Text_LanguageDetect paquet pear avec certains des résultats raisonnables. C'est très simple à utiliser, et il a une modeste 52 de la langue de base de données. L'inconvénient est la non-détection de l'est des langues Asiatiques.
résultats dans:
Je sais que c'est un vieux post, mais voici ce que j'ai développé après de ne pas trouver de solution viable.
La solution utilise les 20 mots les plus communs dans une langue, compte les occurrences de ces dans la botte de foin. Alors il se contente de comparer les chiffres de la première et de la deuxième plus compté langues. Si le deuxième nombre est inférieur à 10% du gagnant, le gagnant prend tout.
Code des suggestions pour l'amélioration de la vitesse sont plus que bienvenus!
.
et,
sont remplacés par des espaces et ainsi devenir le "délimiteurs de mots"). Mais vous aurez en effet besoin de faire quelques ajustements si les chaînes dans votre liste de mots contiennent des caractères non-ASCII.Vous pourriez faire de ce côté client avec
Google AJAX API de Langage(aujourd'hui disparu).Vous pouvez détecter automatiquement une chaîne de langue
Et de traduire n'importe quelle chaîne écrite dans l'une des
langues prises en charge(également disparu)Que Google Translate API va fermer comme un service gratuit, vous pouvez essayer cette alternative libre, qui est un remplacement pour l'API Google Translate:
http://detectlanguage.com
J'ai essayé le Text_LanguageDetect bibliothèque et les résultats que j'ai obtenu n'étaient pas très bonnes (par exemple, le texte "test" a été identifié comme l'estonien et en anglais).
Je peux vous recommandons d'essayer le Yandex Traduire API qui est GRATUIT pour 1 million de caractères pour 24 heures et jusqu'à 10 millions de caractères d'un mois.
Il prend en charge (selon la documentation) plus de 60 langues.
Vous pouvez probablement utiliser la Google Translate API pour détecter la langue et le traduire si nécessaire.
Vous pouvez voir comment détecter la langue pour une chaîne de caractères en php à l'aide de la Text_LanguageDetect Paquet Pear ou les télécharger pour les utiliser séparément comme un régulier de la bibliothèque php.
Text_LanguageDetect paquet pear produit des résultats terribles: "le luxe, appartements de centre-ville" est détecté en tant que portugais...
API de Google est encore la meilleure solution, ils donnent de 300$ de crédit gratuite et d'avertir avant de charger quoi que ce soit vous
Ci-dessous est super simple fonction qui utilise file_get_contents pour télécharger le lang détecté par l'API, donc pas besoin de télécharger ou d'installer les bibliothèques, etc.
Exécuter:
Vous pouvez obtenir votre Google Translate API clé ici: https://console.cloud.google.com/apis/library/translate.googleapis.com/
C'est un simple exemple pour de courtes phrases pour vous allez. Pour des applications plus complexes, vous aurez envie de restreindre votre clé API et de l'utilisation de la bibliothèque évidemment.
Une approche pourrait être de briser la chaîne d'entrée en mots, puis rechercher ces mots dans un dictionnaire anglais pour voir combien d'entre eux sont présents. Cette approche a quelques limitations:
Peut-être soumettre la chaîne à cette langue devineur:
http://www.xrce.xerox.com/competencies/content-analysis/tools/guesser
Je prendrais des documents de diverses langues de référence et de contre Unicode. Vous pouvez ensuite utiliser certains le raisonnement bayésien pour déterminer la langue dans laquelle il est juste de l'unicode des caractères utilisés. Ce serait séparée en français depuis l'anglais ou le russe.
Je ne sais pas exactement sur quoi d'autre qui pourrait être fait à l'exception de recherche de mots dans des dictionnaires de langue pour déterminer la langue (en utilisant une approche probabiliste).
essayez d'utiliser ascii de l'encodage.
j'utilise ce code pour déterminer ru\fr langues dans mon projet bot
J'ai eu de bons résultats avec https://github.com/patrickschur/language-detection et suis à l'aide de la production:
Mon utilisation: j'analyse les e-mails pour un système de CRM afin de savoir dans quelle langue un e-mail a été écrit, afin d'envoyer le texte à un tiers de service n'était pas une option. Même si la Déclaration Universelle des Droits de l'Homme n'est probablement pas la meilleure base pour classer la langue de courriels (e-mails ont souvent stéréotypé, des pièces comme les salutations, qui ne font pas partie des Droits de l'Homme Déclaration), il identifie la langue appropriée dans 99% des cas, si il y a au moins 5 mots.
Mise à jour: j'ai réussi à améliorer la reconnaissance de la langue dans les e-mails en gros de 100% lors de l'utilisation de la langue-la détection de la bibliothèque avec les méthodes suivantes:
Ces faire faire de la bibliothèque un peu plus lent, je vous suggère de les utiliser d'une façon asynchrone, si possible, et de mesurer la performance. Dans mon cas c'est plus que rapide et beaucoup plus précis.
Vous pourriez mettre en œuvre un module de Apache Tika avec Java, insérer les résultats dans un fichier txt, DB, etc et ensuite de lire à partir du fichier db, que ce soit avec php.
Si vous n'avez pas beaucoup de contenu, vous pouvez utiliser les API Google, mais gardez à l'esprit votre appel sera limité, et vous ne pouvez envoyer qu'un nombre restreint de caractères de l'API. Au moment de l'écriture, je l'avais terminé de tester la version 1 (qui s'est avéré ne pas être très précis) et les laboratoires version 2 (j'ai abandonné après, j'ai lu qu'il y a 100 000 caractères de la pac par jour) de l'API.