| Estado de construcción | Cobertura de código | Versión | Descargas totales | Versión mínima de PHP | Licencia |
|---|---|---|---|---|---|
Esta biblioteca puede detectar el lenguaje de una cadena de texto dada. Puede analizar el texto de entrenamiento dado en muchos modismos diferentes en una secuencia de N-Grams y construye un archivo de base de datos en PHP que se utilizará en la fase de detección. Luego puede tomar un texto dado y detectar su lenguaje utilizando la base de datos previamente generada en la fase de entrenamiento. La biblioteca viene con muestras de texto utilizadas para capacitar y detectar texto en 110 idiomas.
Nota: Esta biblioteca requiere la extensión de cadena multibyte para funcionar.
$ composer require patrickschur/language-detection3.yz a 4.yz ?Importante : solo para las personas que usan un directorio personalizado con sus propios archivos de traducción.
Comenzando con la versión 4.yz hemos actualizado los archivos de recursos. Por razones de rendimiento, ahora usamos PHP en lugar de JSON como formato. Eso significa que las personas que desean usar 4.yz y usaron 3.yz antes, tienen que actualizar sus archivos JSON a PHP. Para actualizar sus archivos de recursos, debe generar un perfil de idioma nuevamente. Los archivos JSON ya no son necesarios.
Puede eliminar archivos JSON innecesarios en Linux con el siguiente comando.
rm resources/ * / * .jsonPara detectar el lenguaje correctamente, la longitud del texto de entrada debe ser al menos algunas oraciones.
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();Resultado:
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 = '')Puede pasar una variedad de idiomas al constructor. Para comparar la oración deseada solo con los idiomas dados. Esto puede aumentar drásticamente el rendimiento. El otro parámetro es opcional y el nombre del directorio donde se encuentran los archivos de traducciones.
$ 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)Proporcionar una lista blanca. Devuelve una lista de idiomas, que se requieren.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();Resultado:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)Proporcionar una lista negra. Elimina los idiomas dados del resultado.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();Resultado:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()Devuelve los mejores resultados.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();Resultado:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)Puede especificar el número de registros para devolver. Por ejemplo, el siguiente código devolverá las tres entradas principales.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();Resultado:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()Devuelve el resultado como una matriz.
$ ld -> detect ( ' This is an example! ' )-> close ();Resultado:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)El script usa un tokenizador para obtener todas las palabras en una oración. Puede definir su propio tokenizador para tratar con números, por ejemplo.
$ 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 );
}
});Esto devolverá solo los caracteres del alfabeto en minúsculas y números entre 0 y 9.
__toString() Devuelve la entrada superior del resultado. Tenga en cuenta el echo al principio.
echo $ ld -> detect ( ' Das ist ein Test. ' );Resultado:
de
jsonSerialize()Serializó los datos a JSON.
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );Resultado:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
También pueden combinar métodos entre sí. El siguiente ejemplo eliminará todas las entradas especificadas en la lista negra y solo devuelve las cuatro entradas principales.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();Resultado:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
También puede acceder al objeto directamente como una matriz.
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsResultado:
0.6623339658444
0.56859582542694
NULL
La biblioteca actualmente admite 110 idiomas. Para obtener una descripción general de todos los idiomas compatibles, eche un vistazo aquí.
La biblioteca es capacitable, lo que significa que puede cambiar, eliminar y agregar sus propios archivos de idioma. Si su idioma no es compatible, no dude en agregar sus propios archivos de idioma. Para hacer eso, cree un nuevo directorio en resources y agregue su texto de capacitación.
Nota: El texto de capacitación debe ser un archivo .txt .
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
Como puede ver, también podemos usarlo para detectar spam o jamón.
Cuando almacenó sus archivos de traducción fuera de resources , debe especificar la ruta.
$ t -> learn ( ' YOUR_PATH_HERE ' );Siempre que cambie uno de los archivos de traducción, primero debe generar un perfil de idioma para él. Esto puede llevar unos segundos.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();Elimine estas pocas líneas después de la ejecución y ahora podemos clasificar los textos por su idioma con nuestro propio texto de capacitación.
Para mejorar la fase de detección, debe usar más N-gramos. Pero ten cuidado, esto ralentiza el guión. Descubrí que la fase de detección es mucho mejor cuando está utilizando alrededor de 9,000 N-gramos (el valor predeterminado es 310). Para hacer eso, mire el código a continuación:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();Primero tienes que entrenarlo. Ahora puede clasificar textos como antes, pero debe especificar cuántos n-gramos desea usar.
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());Resultado:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
No, no lo es. La clase de entrenador solo usará los mejores 310 N gramos del idioma. Si no cambia este número o agrega más archivos de idioma, no afectará el rendimiento. Solo crear los N-Grams es más lento. Sin embargo, la creación de N-Grams debe hacerse solo una vez. La fase de detección solo se ve afectada cuando intenta detectar grandes trozos de textos.
Resumen : La fase de entrenamiento será más lenta, pero la fase de detección sigue siendo la misma.
Siéntete libre de contribuir. Cualquier ayuda es bienvenida.
Estos proyectos tienen licencia bajo los términos de la licencia MIT.