| Bangun status | Cakupan Kode | Versi | Total unduhan | Versi PHP minimum | Lisensi |
|---|---|---|---|---|---|
Perpustakaan ini dapat mendeteksi bahasa string teks yang diberikan. Ini dapat menguraikan teks pelatihan yang diberikan dalam banyak idiom yang berbeda ke dalam urutan n-gram dan membangun file database dalam PHP untuk digunakan dalam fase deteksi. Kemudian dapat mengambil teks yang diberikan dan mendeteksi bahasanya menggunakan database yang sebelumnya dihasilkan dalam fase pelatihan. Perpustakaan dilengkapi dengan sampel teks yang digunakan untuk melatih dan mendeteksi teks dalam 110 bahasa.
CATATAN: Perpustakaan ini membutuhkan ekstensi string multibyte agar berfungsi.
$ composer require patrickschur/language-detection3.yz ke 4.yz ?Penting : Hanya untuk orang yang menggunakan direktori khusus dengan file terjemahan mereka sendiri .
Dimulai dengan Versi 4.yz Kami telah memperbarui file sumber daya. Untuk alasan kinerja kami sekarang menggunakan PHP sebagai ganti JSON sebagai format. Itu berarti orang yang ingin menggunakan 4.yz dan menggunakan 3.yz sebelumnya, harus meningkatkan file JSON mereka ke PHP. Untuk meningkatkan file sumber daya Anda, Anda harus menghasilkan profil bahasa lagi. File JSON kemudian tidak lagi diperlukan.
Anda dapat menghapus file JSON yang tidak perlu di bawah Linux dengan perintah berikut.
rm resources/ * / * .jsonUntuk mendeteksi bahasa dengan benar, panjang teks input harus setidaknya beberapa kalimat.
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();Hasil:
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 = '')Anda dapat meneruskan berbagai bahasa ke konstruktor. Untuk membandingkan kalimat yang diinginkan hanya dengan bahasa yang diberikan. Ini dapat secara dramatis meningkatkan kinerja. Parameter lainnya adalah opsional dan nama direktori tempat file terjemahan berada.
$ 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)Berikan daftar putih. Mengembalikan daftar bahasa, yang diperlukan.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();Hasil:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)Berikan daftar hitam. Menghapus bahasa yang diberikan dari hasilnya.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();Hasil:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()Mengembalikan hasil terbaik.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();Hasil:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)Anda dapat menentukan jumlah catatan yang akan dikembalikan. Misalnya kode berikut akan mengembalikan tiga entri teratas.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();Hasil:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()Mengembalikan hasilnya sebagai array.
$ ld -> detect ( ' This is an example! ' )-> close ();Hasil:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)Skrip menggunakan tokenizer untuk mendapatkan semua kata dalam kalimat. Anda dapat mendefinisikan tokenizer Anda sendiri untuk menangani angka misalnya.
$ 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 );
}
});Ini hanya akan mengembalikan karakter dari alfabet dalam huruf kecil dan angka antara 0 dan 9.
__toString() Mengembalikan entrie teratas hasilnya. Perhatikan echo di awal.
echo $ ld -> detect ( ' Das ist ein Test. ' );Hasil:
de
jsonSerialize()Serial data ke JSON.
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );Hasil:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
Anda juga dapat menggabungkan metode satu sama lain. Contoh berikut akan menghapus semua entri yang ditentukan dalam daftar hitam dan hanya mengembalikan empat entri teratas.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();Hasil:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
Anda juga dapat mengakses objek secara langsung sebagai array.
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsHasil:
0.6623339658444
0.56859582542694
NULL
Perpustakaan saat ini mendukung 110 bahasa. Untuk mendapatkan gambaran umum dari semua bahasa yang didukung, silakan lihat di sini.
Perpustakaan dapat dilatih yang berarti Anda dapat mengubah, menghapus, dan menambahkan file bahasa Anda sendiri ke dalamnya. Jika bahasa Anda tidak didukung, jangan ragu untuk menambahkan file bahasa Anda sendiri. Untuk melakukan itu, buat direktori baru dalam resources dan tambahkan teks pelatihan Anda ke dalamnya.
Catatan: Teks pelatihan harus menjadi file .txt .
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
Seperti yang Anda lihat, kami juga dapat menggunakannya untuk mendeteksi spam atau ham.
Saat Anda menyimpan file terjemahan Anda di luar resources , Anda harus menentukan jalurnya.
$ t -> learn ( ' YOUR_PATH_HERE ' );Setiap kali Anda mengubah salah satu file terjemahan, Anda harus terlebih dahulu menghasilkan profil bahasa untuk itu. Ini mungkin memakan waktu beberapa detik.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();Hapus beberapa baris ini setelah eksekusi dan sekarang kita dapat mengklasifikasikan teks berdasarkan bahasa mereka dengan teks pelatihan kita sendiri.
Untuk meningkatkan fase deteksi, Anda harus menggunakan lebih banyak n-gram. Tapi hati -hati ini akan memperlambat skrip. Saya menemukan bahwa fase deteksi jauh lebih baik ketika Anda menggunakan sekitar 9.000 n-gram (default adalah 310). Untuk melakukan itu lihat kode di bawah ini:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();Pertama, Anda harus melatihnya. Sekarang Anda dapat mengklasifikasikan teks seperti sebelumnya tetapi Anda harus menentukan berapa banyak n-gram yang ingin Anda gunakan.
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());Hasil:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
Tidak, tidak. Kelas pelatih hanya akan menggunakan 310 n-gram bahasa terbaik. Jika Anda tidak mengubah nomor ini atau menambahkan lebih banyak file bahasa itu tidak akan mempengaruhi kinerja. Hanya membuat n-gram lebih lambat. Namun, penciptaan n-gram harus dilakukan hanya sekali. Fase deteksi hanya terpengaruh ketika Anda mencoba mendeteksi potongan besar teks.
Ringkasan : Fase pelatihan akan lebih lambat tetapi fase deteksi tetap sama.
Jangan ragu untuk berkontribusi. Bantuan apa pun diterima.
Proyek ini dilisensikan berdasarkan ketentuan lisensi MIT.