指定したテキストの言語を検出します。
このパッケージは、与えられたテキストの言語の 3-gram の頻度順を調べ、既知の言語の 3-gram 頻度の表と対応させることで言語を検出します。
このパッケージは Cavnar & Trenkle (1994): "N-Gram-Based Text Categorization" で提案された技術を実装したものです。
まずはサポートされる言語の一覧を取得してみましょう。 Text_LanguageDetect オブジェクトの getLanguages() をコールします。 このメソッドは、言語を表す文字列の配列を返します。例えば array('albanian', 'arabic', 'azeri') のようになります。
実際の言語をそのテキストから取得するには Text_LanguageDetect オブジェクトの detect() メソッドを使用します。 最初のパラメータにはテキストを指定します。そしてオプションの二番目のパラメータ $limit では、結果を最大で何件まで返すのかを指定します。 このメソッドの返す配列は、ソートされた言語名をキーとし、 そのスコアを値に持つものとなります。 言語が検出できなかった場合は、空の配列を返します。
結果を一件だけ取得するには detectSimple() を使用します。これは、言語名を文字列で返します。 検出できなかった場合は null を返します。
注意 言語を正確に検出するには、ある程度の長さのテキストを指定する必要があります。
<?php require_once 'Text/LanguageDetect.php'; $l = new Text_LanguageDetect(); echo "サポートしている言語:\n"; $langs = $l->getLanguages(); if (PEAR::isError($langs)) { die($langs->getMessage()); } sort($langs); echo implode(', ', $langs) . "\n\n"; $text = <<<EOD Hallo! Das ist ein Text in deutscher Sprache. Mal sehen, ob die Klasse erkennt, welche Sprache das hier ist. EOD; $result = $l->detect($text, 4); if (PEAR::isError($result)) { echo $result->getMessage(), "\n"; } else { print_r($result); } ?> |
上の例の結果は、次のようになります。
サポートしている言語: albanian, arabic, azeri, bengali, bulgarian, cebuano, croatian, czech, danish, dutch, english, estonian, farsi, finnish, french, german, hausa, hawaiian, hindi, hungarian, icelandic, indonesian, italian, kazakh, kyrgyz, latin, latvian, lithuanian, macedonian, mongolian, nepali, norwegian, pashto, pidgin, polish, portuguese, romanian, russian, serbian, slovak, slovene, somali, spanish, swahili, swedish, tagalog, turkish, ukrainian, urdu, uzbek, vietnamese, welsh Array ( [german] => 0.407037037037 [dutch] => 0.288065843621 [english] => 0.283333333333 [danish] => 0.234526748971 ) |