| Status erstellen | Codeabdeckung | Version | Gesamtdownloads | MindestpHP -Version | Lizenz |
|---|---|---|---|---|---|
Diese Bibliothek kann die Sprache eines bestimmten Textzeichens erkennen. Es kann den gegebenen Trainingstext in vielen verschiedenen Redewendungen in eine Abfolge von N-Gramm analysieren und eine Datenbankdatei in PHP erstellt, die in der Erkennungsphase verwendet werden soll. Anschließend kann ein bestimmter Text erfolgen und seine Sprache mithilfe der zuvor in der Trainingsphase generierten Datenbank erkennen. Die Bibliothek verfügt über Textmuster, die zum Training und Erkennen von Text in 110 Sprachen verwendet werden.
Hinweis: Diese Bibliothek erfordert die Multibyte -String -Erweiterung, um zu arbeiten.
$ composer require patrickschur/language-detection3.yz auf 4.yz ?Wichtig : Nur für Personen, die ein benutzerdefiniertes Verzeichnis mit eigenen Übersetzungsdateien verwenden.
Ab Version 4.yz haben wir die Ressourcendateien aktualisiert. Aus Leistungsgründen verwenden wir jetzt PHP anstelle von JSON als Format. Das bedeutet, dass Personen, die 4.yz und 3.yz verwenden möchten, ihre JSON -Dateien auf PHP aktualisieren müssen. Um Ihre Ressourcendateien zu aktualisieren, müssen Sie erneut ein Sprachprofil generieren. Die JSON -Dateien werden dann nicht mehr benötigt.
Sie können unnötige JSON -Dateien unter Linux mit dem folgenden Befehl löschen.
rm resources/ * / * .jsonUm die Sprache korrekt zu erkennen, sollte die Länge des Eingangstextes zumindest einige Sätze sein.
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();Ergebnis:
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 = '')Sie können eine Reihe von Sprachen an den Konstruktor weitergeben. Um den gewünschten Satz nur mit den angegebenen Sprachen zu vergleichen. Dies kann die Leistung drastisch erhöhen. Der andere Parameter ist optional und der Name des Verzeichnisses, in dem sich die Übersetzungsdateien befinden.
$ 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)Einen Whitelist zur Verfügung stellen. Gibt eine Liste von Sprachen zurück, die erforderlich sind.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();Ergebnis:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)Geben Sie eine schwarze Liste an. Entfernt die angegebenen Sprachen aus dem Ergebnis.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();Ergebnis:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()Gibt die besten Ergebnisse zurück.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();Ergebnis:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)Sie können die Anzahl der zurückgegebenen Datensätze angeben. Zum Beispiel gibt der folgende Code die drei besten Einträge zurück.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();Ergebnis:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()Gibt das Ergebnis als Array zurück.
$ ld -> detect ( ' This is an example! ' )-> close ();Ergebnis:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)Das Skript verwendet einen Tokenizer, um alle Wörter in einen Satz zu erhalten. Sie können Ihren eigenen Tokenizer definieren, um beispielsweise mit Zahlen umzugehen.
$ 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 );
}
});Dadurch werden nur Zeichen aus dem Alphabet in Kleinbuchstaben und Zahlen zwischen 0 und 9 zurückgegeben.
__toString() Gibt den Top -Antrag des Ergebniss zurück. Beachten Sie das echo am Anfang.
echo $ ld -> detect ( ' Das ist ein Test. ' );Ergebnis:
de
jsonSerialize()Serialisierte die Daten nach JSON.
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );Ergebnis:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
Sie können auch Methoden miteinander kombinieren. Das folgende Beispiel entfernen alle in der Schwarzenliste angegebenen Einträge und gibt nur die vier besten Einträge zurück.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();Ergebnis:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
Sie können auch direkt als Array auf das Objekt zugreifen.
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsErgebnis:
0.6623339658444
0.56859582542694
NULL
Die Bibliothek unterstützt derzeit 110 Sprachen. Um einen Überblick über alle unterstützten Sprachen zu erhalten, sehen Sie sich bitte hier an.
Die Bibliothek ist trainierbar, was bedeutet, dass Sie Ihre eigenen Sprachdateien ändern, entfernen und hinzufügen können. Wenn Ihre Sprache nicht unterstützt wird, können Sie Ihre eigenen Sprachdateien hinzufügen. Erstellen Sie dazu ein neues Verzeichnis in resources und fügen Sie Ihren Schulungstext hinzu.
Hinweis: Der Trainingstext sollte eine .txt -Datei sein.
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
Wie Sie sehen können, können wir es auch verwenden, um Spam oder Schinken zu erkennen.
Wenn Sie Ihre Übersetzungsdateien außerhalb der resources gespeichert haben, müssen Sie den Pfad angeben.
$ t -> learn ( ' YOUR_PATH_HERE ' );Wenn Sie eine der Übersetzungsdateien ändern, müssen Sie zunächst ein Sprachprofil dafür generieren. Dies kann einige Sekunden dauern.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();Entfernen Sie diese wenigen Zeilen nach der Ausführung und jetzt können wir Texte nach ihrer Sprache mit unserem eigenen Trainingstext klassifizieren.
Um die Erkennungsphase zu verbessern, müssen Sie mehr N-Gramm verwenden. Aber seien Sie vorsichtig, dass dies das Skript verlangsamen wird. Ich habe herausgefunden, dass die Erkennungsphase viel besser ist, wenn Sie etwa 9.000 n-Gramm verwenden (Standard ist 310). Um diesen Code direkt unten zu tun:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();Zuerst muss man es trainieren. Jetzt können Sie Texte wie zuvor klassifizieren, müssen jedoch angeben, wie viele N-Gramm Sie verwenden möchten.
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());Ergebnis:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
Nein, es ist nicht. Die Trainerklasse verwendet nur die besten 310 n-Gramm der Sprache. Wenn Sie diese Nummer nicht ändern oder mehr Sprachdateien hinzufügen, wird sich die Leistung nicht auswirken. Das Erstellen der N-Gramms ist langsamer. Die Schaffung von N-Gramm muss jedoch nur einmal erfolgen. Die Erkennungsphase ist nur betroffen, wenn Sie versuchen, große Texte zu erkennen.
Zusammenfassung : Die Trainingsphase ist langsamer, aber die Erkennungsphase bleibt gleich.
Fühlen Sie sich frei zu beitragen. Jede Hilfe ist willkommen.
Dieses Projekt ist im Rahmen der MIT -Lizenz lizenziert.