| Construir status | Cobertura de código | Versão | Downloads totais | Versão mínima do PHP | Licença |
|---|---|---|---|---|---|
Esta biblioteca pode detectar o idioma de uma determinada sequência de texto. Ele pode analisar o texto de treinamento em muitos idiomas diferentes em uma sequência de gramas n e cria um arquivo de banco de dados no PHP a ser usado na fase de detecção. Em seguida, pode levar um determinado texto e detectar seu idioma usando o banco de dados gerado anteriormente na fase de treinamento. A biblioteca vem com amostras de texto usadas para treinamento e detecção de texto em 110 idiomas.
Nota: Esta biblioteca requer a extensão de string multibyte para funcionar.
$ composer require patrickschur/language-detection3.yz para 4.yz ?IMPORTANTE : Somente para pessoas que estão usando um diretório personalizado com seus próprios arquivos de tradução.
Começando com a versão 4.yz , atualizamos os arquivos de recursos. Por razões de desempenho, agora usamos o PHP em vez de JSON como formato. Isso significa que as pessoas que desejam usar 4.yz e usaram 3.yz antes, precisam atualizar seus arquivos JSON para o PHP. Para atualizar seus arquivos de recursos, você deve gerar um perfil de idioma novamente. Os arquivos JSON não são mais necessários.
Você pode excluir arquivos JSON desnecessários no Linux com o seguinte comando.
rm resources/ * / * .jsonPara detectar o idioma corretamente, o comprimento do texto de entrada deve ser pelo menos algumas frases.
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 = '')Você pode passar uma variedade de idiomas para o construtor. Para comparar a frase desejada apenas com os idiomas fornecidos. Isso pode aumentar drasticamente o desempenho. O outro parâmetro é opcional e o nome do diretório em que os arquivos de traduções estão localizados.
$ 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)Forneça uma lista de permissões. Retorna uma lista de idiomas, necessários.
$ 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)Forneça uma lista negra. Remove os idiomas fornecidos do 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()Retorna os melhores resultados.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();Resultado:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)Você pode especificar o número de registros para retornar. Por exemplo, o código a seguir retornará as três principais entradas.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();Resultado:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()Retorna o resultado como uma 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)O script usa um tokenizador para obter todas as palavras em uma frase. Você pode definir seu próprio tokenizador para lidar com números, por exemplo.
$ 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 );
}
});Isso retornará apenas caracteres do alfabeto em minúsculas e números entre 0 e 9.
__toString() Retorna a entrada superior do resultado. Observe o echo no começo.
echo $ ld -> detect ( ' Das ist ein Test. ' );Resultado:
de
jsonSerialize()Serializou os dados para 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,
[...]
}
Você também pode combinar métodos entre si. O exemplo a seguir removerá todas as entradas especificadas na lista negra e retornará apenas as quatro principais entradas.
$ 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
)
Você também pode acessar o objeto diretamente como uma 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
Atualmente, a biblioteca suporta 110 idiomas. Para obter uma visão geral de todos os idiomas suportados, dê uma olhada aqui.
A biblioteca é treinável, o que significa que você pode alterar, remover e adicionar seus próprios arquivos de idioma. Se o seu idioma não for suportado, sinta -se à vontade para adicionar seus próprios arquivos de idioma. Para fazer isso, crie um novo diretório em resources e adicione seu texto de treinamento a ele.
Nota: O texto de treinamento deve ser um arquivo .txt .
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
Como você pode ver, também podemos usá -lo para detectar spam ou presunto.
Quando você armazenou seus arquivos de tradução fora dos resources , você deve especificar o caminho.
$ t -> learn ( ' YOUR_PATH_HERE ' );Sempre que você altera um dos arquivos de tradução, você deve primeiro gerar um perfil de idioma para ele. Isso pode levar alguns segundos.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();Remova essas poucas linhas após a execução e agora podemos classificar os textos por seu idioma com nosso próprio texto de treinamento.
Para melhorar a fase de detecção, você deve usar mais gramas N. Mas tenha cuidado para que isso diminua o script. Descobri que a fase de detecção é muito melhor quando você está usando cerca de 9.000 n grama (o padrão é 310). Para fazer isso, olhe para o código logo abaixo:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();Primeiro você tem que treiná -lo. Agora você pode classificar textos como antes, mas deve especificar quantos n-gramas deseja 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)
}
}
Não, não é. A classe do treinador usará apenas os melhores 310 n gramas do idioma. Se você não alterar esse número ou adicionar mais arquivos de idioma, isso não afetará o desempenho. Somente a criação dos n-gramas é mais lenta. No entanto, a criação de gramas N deve ser feita apenas uma vez. A fase de detecção é afetada apenas quando você está tentando detectar grandes pedaços de textos.
Resumo : A fase de treinamento será mais lenta, mas a fase de detecção permanece a mesma.
Sinta -se à vontade para contribuir. Qualquer ajuda é bem -vinda.
Esses projetos são licenciados nos termos da licença do MIT.