| Statut de construction | Couverture de code | Version | Téléchargements totaux | Version PHP minimum | Licence |
|---|---|---|---|---|---|
Cette bibliothèque peut détecter la langue d'une chaîne de texte donnée. Il peut analyser le texte de formation donné dans de nombreux idiomes différents dans une séquence de n-grammes et construire un fichier de base de données dans PHP à utiliser dans la phase de détection. Ensuite, il peut prendre un texte donné et détecter sa langue en utilisant la base de données précédemment générée dans la phase de formation. La bibliothèque est livrée avec des échantillons de texte utilisés pour la formation et la détection de texte dans 110 langues.
Remarque: Cette bibliothèque nécessite l'extension de chaîne multi -yte pour travailler.
$ composer require patrickschur/language-detection3.yz à 4.yz ?Important : uniquement pour les personnes qui utilisent un répertoire personnalisé avec leurs propres fichiers de traduction.
À partir de la version 4.yz nous avons mis à jour les fichiers de ressources. Pour des raisons de performance, nous utilisons maintenant PHP au lieu de JSON comme format. Cela signifie que les personnes qui souhaitent utiliser 4.yz et utilisés 3.yz avant, doivent mettre à niveau leurs fichiers JSON en PHP. Pour mettre à niveau vos fichiers de ressources, vous devez à nouveau générer un profil linguistique. Les fichiers JSON ne sont alors plus nécessaires.
Vous pouvez supprimer des fichiers JSON inutiles sous Linux avec la commande suivante.
rm resources/ * / * .jsonPour détecter correctement la langue, la longueur du texte d'entrée doit être au moins quelques phrases.
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();Résultat:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nb" => 0.48849462365591,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"dk" => 0.47172043010753,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
"de" => 0.45903225806452,
[...]
)
__construct(array $result = [], string $dirname = '')Vous pouvez transmettre une gamme de langues au constructeur. Pour comparer la phrase souhaitée uniquement avec les langues données. Cela peut augmenter considérablement les performances. L'autre paramètre est facultatif et le nom du répertoire où se trouvent les fichiers de traductions.
$ ld = new Language ([ ' de ' , ' en ' , ' nl ' ]);
// Compares the sentence only with "de", "en" and "nl" language models.
$ ld -> detect ( ' Das ist ein Test ' );whitelist(string ...$whitelist)Fournir une liste blanche. Renvoie une liste de langues, qui sont nécessaires.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();Résultat:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)Fournir une liste noire. Supprime les langues données du résultat.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();Résultat:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()Renvoie les meilleurs résultats.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();Résultat:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)Vous pouvez spécifier le nombre d'enregistrements à retourner. Par exemple, le code suivant renverra les trois premières entrées.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();Résultat:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()Renvoie le résultat en tant que tableau.
$ ld -> detect ( ' This is an example! ' )-> close ();Résultat:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)Le script utilise un tokenizer pour obtenir tous les mots dans une phrase. Vous pouvez définir votre propre tokenizer pour gérer les numéros par exemple.
$ ld -> setTokenizer ( new class implements TokenizerInterface
{
public function tokenize ( string $ str ): array
{
return preg_split ( ' /[^a-z0-9]/u ' , $ str , - 1 , PREG_SPLIT_NO_EMPTY );
}
});Cela ne renverra que des caractères de l'alphabet en minuscules et des nombres entre 0 et 9.
__toString() Renvoie la première entrée du résultat. Notez l' echo au début.
echo $ ld -> detect ( ' Das ist ein Test. ' );Résultat:
de
jsonSerialize()Sérialisé les données à JSON.
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );Résultat:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
Vous pouvez également combiner des méthodes entre elles. L'exemple suivant supprimera toutes les entrées spécifiées dans la liste noire et ne renvoie que les quatre premières entrées.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();Résultat:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
Vous pouvez également accéder directement à l'objet en tant que tableau.
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsRésultat:
0.6623339658444
0.56859582542694
NULL
La bibliothèque prend actuellement en charge 110 langues. Pour obtenir un aperçu de toutes les langues prises en charge, veuillez consulter ici.
La bibliothèque est formable, ce qui signifie que vous pouvez modifier, supprimer et y ajouter vos propres fichiers linguistiques. Si votre langue n'est pas prise en charge, n'hésitez pas à ajouter vos propres fichiers linguistiques. Pour ce faire, créez un nouveau répertoire en resources et ajoutez-y votre texte de formation.
Remarque: Le texte de formation doit être un fichier .txt .
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
Comme vous pouvez le voir, nous pouvons également l'utiliser pour détecter le spam ou le jambon.
Lorsque vous avez stocké vos fichiers de traduction en dehors des resources , vous devez spécifier le chemin.
$ t -> learn ( ' YOUR_PATH_HERE ' );Chaque fois que vous modifiez l'un des fichiers de traduction, vous devez d'abord générer un profil linguistique pour cela. Cela peut prendre quelques secondes.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();Supprimez ces quelques lignes après l'exécution et maintenant nous pouvons classer les textes par leur langue avec notre propre texte de formation.
Pour améliorer la phase de détection, vous devez utiliser plus de n-grammes. Mais soyez prudent que cela ralentira le script. J'ai compris que la phase de détection est bien meilleure lorsque vous utilisez environ 9 000 n-grammes (la valeur par défaut est 310). Pour ce faire, regardez le code juste ci-dessous:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();Vous devez d'abord l'entraîner. Vous pouvez maintenant classer les textes comme avant, mais vous devez spécifier le nombre de n-grammes que vous souhaitez utiliser.
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());Résultat:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
Non ce n'est pas le cas. La classe Trainer n'utilisera que les 310 n-grammes de la langue. Si vous ne modifiez pas ce numéro ou n'ajoutez pas plus de fichiers linguistiques, cela n'affectera pas les performances. Créer uniquement les n-grammes est plus lent. Cependant, la création de n-grammes ne doit être effectuée qu'une seule fois. La phase de détection n'est affectée que lorsque vous essayez de détecter de gros morceaux de textes.
Résumé : La phase de formation sera plus lente mais la phase de détection reste la même.
N'hésitez pas à contribuer. Toute aide est la bienvenue.
Ces projets sont concédés sous licence de la licence du MIT.