| ステータスを構築します | コードカバレッジ | バージョン | 総ダウンロード | 最小PHPバージョン | ライセンス |
|---|---|---|---|---|---|
このライブラリは、特定のテキスト文字列の言語を検出できます。多くの異なるイディオムの特定のトレーニングテキストをN-Gramsのシーケンスに解析し、検出フェーズで使用するPHPでデータベースファイルを構築することができます。その後、特定のテキストを取得し、トレーニングフェーズで以前に生成されたデータベースを使用して言語を検出できます。ライブラリには、110の言語でテキストのトレーニングと検出に使用されるテキストサンプルが付属しています。
注:このライブラリでは、動作するためにマルチバイト文字列拡張機能が必要です。
$ composer require patrickschur/language-detection3.yzから4.yzにアップグレードする方法は?重要:独自の翻訳ファイルを備えたカスタムディレクトリを使用している人のみ。
バージョン4.yzから始めて、リソースファイルを更新しました。パフォーマンス上の理由から、JSONの代わりにPHPをフォーマットとして使用します。つまり、 4.yz使用して以前に3.yzを使用したい人は、JSONファイルをPHPにアップグレードする必要があります。リソースファイルをアップグレードするには、再度言語プロファイルを生成する必要があります。 JSONファイルは不要になりました。
次のコマンドを使用して、Linuxの下で不必要なJSONファイルを削除できます。
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)返すレコードの数を指定できます。たとえば、次のコードは上位3つのエントリを返します。
$ 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)スクリプトは、すべての単語を文で取得するためにトークンザーを使用します。たとえば、数字を処理するために独自のトークネイザーを定義できます。
$ 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,
[...]
}
また、メソッドを互いに組み合わせることもできます。次の例では、ブラックリストで指定されたすべてのエントリを削除し、上位4つのエントリのみを返します。
$ 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 ' );翻訳ファイルの1つを変更するたびに、最初に言語プロファイルを生成する必要があります。これには数秒かかる場合があります。
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();実行後にこれらの数行を削除すると、独自のトレーニングテキストで言語でテキストを分類できます。
検出段階を改善するには、より多くのNグラムを使用する必要があります。ただし、これによりスクリプトが遅くなることに注意してください。約9.000 Nグラムを使用している場合、検出フェーズははるかに優れていることがわかりました(デフォルトは310)。そのためには、下のコードをご覧ください。
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();最初にトレーニングする必要があります。これで、以前のようなテキストを分類できますが、使用するnグラムの数を指定する必要があります。
$ 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グラムのみを使用します。この番号を変更したり、言語ファイルを追加したりしないと、パフォーマンスに影響しません。 n-gramsのみを作成するのは遅いです。ただし、N-Gramsの作成は1回だけ行う必要があります。検出フェーズは、テキストの大きな塊を検出しようとしている場合にのみ影響を受けます。
概要:トレーニングフェーズは遅くなりますが、検出フェーズは同じままです。
お気軽に貢献してください。どんな助けも大歓迎です。
このプロジェクトは、MITライセンスの条件に基づいてライセンスされています。