| 상태 빌드 상태 | 코드 적용 범위 | 버전 | 총 다운로드 | 최소 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 ' );번역 파일 중 하나를 변경할 때마다 먼저 언어 프로필을 생성해야합니다. 몇 초가 걸릴 수 있습니다.
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 그램 만 만드는 것은 느리게 진행됩니다. 그러나 N- 그램의 생성은 한 번만 수행해야합니다. 탐지 단계는 큰 텍스트 덩어리를 감지하려고 할 때만 영향을받습니다.
요약 : 훈련 단계는 느려지지만 탐지 단계는 동일하게 유지됩니다.
자유롭게 기여하십시오. 모든 도움을 환영합니다.
이 프로젝트는 MIT 라이센스의 조건에 따라 라이센스가 부여됩니다.