| สร้างสถานะ | ความครอบคลุมของรหัส | รุ่น | ดาวน์โหลดทั้งหมด | เวอร์ชัน PHP ขั้นต่ำ | ใบอนุญาต |
|---|---|---|---|---|---|
ไลบรารีนี้สามารถตรวจจับภาษาของสตริงข้อความที่กำหนด มันสามารถแยกวิเคราะห์ข้อความการฝึกอบรมในสำนวนที่แตกต่างกันมากมายในลำดับของ n-grams และสร้างไฟล์ฐานข้อมูลใน PHP ที่จะใช้ในขั้นตอนการตรวจจับ จากนั้นสามารถใช้ข้อความที่กำหนดและตรวจจับภาษาโดยใช้ฐานข้อมูลที่สร้างขึ้นก่อนหน้านี้ในขั้นตอนการฝึกอบรม ห้องสมุดมาพร้อมกับตัวอย่างข้อความที่ใช้สำหรับการฝึกอบรมและตรวจจับข้อความใน 110 ภาษา
หมายเหตุ: ไลบรารีนี้ต้องการส่วนขยายสตริง Multibyte เพื่อทำงาน
$ composer require patrickschur/language-detection3.yz เป็น 4.yz ได้อย่างไร?สำคัญ : เฉพาะสำหรับผู้ที่ใช้ ไดเรกทอรีที่กำหนดเอง พร้อมไฟล์แปลของ ตนเอง
เริ่มต้นด้วยเวอร์ชัน 4.yz เราได้อัปเดตไฟล์ทรัพยากรแล้ว ด้วยเหตุผลด้านประสิทธิภาพตอนนี้เราใช้ PHP แทน JSON เป็นรูปแบบ นั่นหมายความว่าผู้ที่ต้องการใช้ 4.yz และใช้ 3.yz มาก่อนต้องอัพเกรดไฟล์ JSON เป็น PHP ในการอัพเกรดไฟล์ทรัพยากรของคุณคุณต้องสร้างโปรไฟล์ภาษาอีกครั้ง ไฟล์ JSON นั้นไม่จำเป็นอีกต่อไป
คุณสามารถลบไฟล์ JSON ที่ไม่จำเป็นภายใต้ Linux ด้วยคำสั่งต่อไปนี้
rm resources/ * / * .jsonในการตรวจจับภาษาอย่างถูกต้องความยาวของข้อความอินพุตควรเป็นประโยคอย่างน้อยบางประโยค
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();ผลลัพธ์:
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 = '')คุณสามารถผ่านอาร์เรย์ของภาษาไปยังตัวสร้าง เพื่อเปรียบเทียบประโยคที่ต้องการกับภาษาที่กำหนดเท่านั้น สิ่งนี้สามารถเพิ่มประสิทธิภาพได้อย่างมาก พารามิเตอร์อื่นเป็นตัวเลือกและชื่อของไดเรกทอรีที่ไฟล์การแปลอยู่
$ 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)จัดให้มีผู้อนุญาต ส่งคืนรายการภาษาที่จำเป็น
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();ผลลัพธ์:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)จัดเตรียมบัญชีดำ ลบภาษาที่กำหนดออกจากผลลัพธ์
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();ผลลัพธ์:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()ส่งคืนผลลัพธ์ที่ดีที่สุด
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();ผลลัพธ์:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)คุณสามารถระบุจำนวนระเบียนที่จะส่งคืน ตัวอย่างเช่นรหัสต่อไปนี้จะส่งคืนรายการสามอันดับแรก
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();ผลลัพธ์:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()ส่งคืนผลลัพธ์เป็นอาร์เรย์
$ ld -> detect ( ' This is an example! ' )-> close ();ผลลัพธ์:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)สคริปต์ใช้ tokenizer เพื่อรับทุกคำในประโยค คุณสามารถกำหนดโทเค็นของคุณเองเพื่อจัดการกับตัวเลขเช่น
$ 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 );
}
});สิ่งนี้จะส่งคืนเฉพาะอักขระจากตัวอักษรในตัวพิมพ์เล็กและตัวเลขระหว่าง 0 ถึง 9
__toString() ส่งคืนรายการด้านบนของผลลัพธ์ สังเกต echo ที่จุดเริ่มต้น
echo $ ld -> detect ( ' Das ist ein Test. ' );ผลลัพธ์:
de
jsonSerialize()สร้างข้อมูลให้กับ JSON
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );ผลลัพธ์:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
คุณยังสามารถรวมวิธีการซึ่งกันและกัน ตัวอย่างต่อไปนี้จะลบรายการทั้งหมดที่ระบุในบัญชีดำและส่งคืนเฉพาะรายการสี่อันดับแรก
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();ผลลัพธ์:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
คุณยังสามารถเข้าถึงวัตถุได้โดยตรงเป็นอาร์เรย์
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsผลลัพธ์:
0.6623339658444
0.56859582542694
NULL
ปัจจุบันห้องสมุดรองรับ 110 ภาษา หากต้องการรับภาพรวมของภาษาที่รองรับทั้งหมดโปรดดูที่นี่
ห้องสมุดสามารถฝึกอบรมได้ซึ่งหมายความว่าคุณสามารถเปลี่ยนลบและเพิ่มไฟล์ภาษาของคุณเอง หากภาษาของคุณไม่รองรับโปรดเพิ่มไฟล์ภาษาของคุณเอง ในการทำเช่นนั้นให้สร้างไดเรกทอรีใหม่ใน resources และเพิ่มข้อความการฝึกอบรมของคุณลงไป
หมายเหตุ: ข้อความการฝึกอบรมควรเป็นไฟล์. txt
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
อย่างที่คุณเห็นเราสามารถใช้มันเพื่อตรวจจับสแปมหรือแฮม
เมื่อคุณเก็บไฟล์การแปลไว้นอก resources คุณต้องระบุเส้นทาง
$ t -> learn ( ' YOUR_PATH_HERE ' );เมื่อใดก็ตามที่คุณเปลี่ยนไฟล์การแปลใด ๆ คุณต้องสร้างโปรไฟล์ภาษาก่อน อาจใช้เวลาสองสามวินาที
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();ลบบรรทัดเหล่านี้หลังจากดำเนินการและตอนนี้เราสามารถจัดประเภทข้อความด้วยภาษาของพวกเขาด้วยข้อความการฝึกอบรมของเราเอง
เพื่อปรับปรุงขั้นตอนการตรวจจับคุณต้องใช้ N-GRAM มากขึ้น แต่ระวังสิ่งนี้จะทำให้สคริปต์ช้าลง ฉันคิดว่าขั้นตอนการตรวจจับดีกว่ามากเมื่อคุณใช้ประมาณ 9.000 N-grams (ค่าเริ่มต้นคือ 310) หากต้องการดูรหัสด้านล่าง:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();ก่อนอื่นคุณต้องฝึกมัน ตอนนี้คุณสามารถจำแนกข้อความได้ก่อนหน้านี้ แต่คุณต้องระบุจำนวน N-grams ที่คุณต้องการใช้
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());ผลลัพธ์:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
ไม่มันไม่ใช่ คลาสผู้ฝึกสอนจะใช้ภาษาที่ดีที่สุด 310 N-Grams เท่านั้น หากคุณไม่เปลี่ยนหมายเลขนี้หรือเพิ่มไฟล์ภาษาเพิ่มเติมมันจะไม่ส่งผลกระทบต่อประสิทธิภาพ การสร้าง N-GRAMS จะช้าลงเท่านั้น อย่างไรก็ตามการสร้าง N-GRAMS จะต้องทำเพียงครั้งเดียว ขั้นตอนการตรวจจับจะได้รับผลกระทบเฉพาะเมื่อคุณพยายามตรวจจับข้อความขนาดใหญ่
สรุป : ขั้นตอนการฝึกอบรมจะช้าลง แต่ขั้นตอนการตรวจจับยังคงเหมือนเดิม
อย่าลังเลที่จะมีส่วนร่วม ยินดีต้อนรับความช่วยเหลือใด ๆ
โครงการนี้ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาต MIT