Text_LanguageDetect

指定したテキストの言語を検出します。

このパッケージは、与えられたテキストの言語の 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
)