PHP で、文字列の言語を検出する方法はありますか? 文字列が UTF-8 形式であるとします。
18 に答える
Text_LanguageDetect pear パッケージを使用して、ある程度の妥当な結果を得ました。使い方は非常に簡単で、控えめな 52 言語のデータベースがあります。欠点は、東アジアの言語が検出されないことです。
require_once 'Text/LanguageDetect.php';
$l = new Text_LanguageDetect();
$result = $l->detect($text, 4);
if (PEAR::isError($result)) {
echo $result->getMessage();
} else {
print_r($result);
}
結果:
Array
(
[german] => 0.407037037037
[dutch] => 0.288065843621
[english] => 0.283333333333
[danish] => 0.234526748971
)
文字種から言語を判別することはできません。そして、これを行うための絶対確実な方法はありません。
どの方法を使用しても、経験に基づいた推測を行っているだけです。数学関連の記事がいくつかあります
これは、 Google の AJAX 言語 API (現在は廃止されています)を使用して完全にクライアント側で行うことができます。
AJAX 言語 API を使用すると、Javascript のみを使用して Web ページ内のテキスト ブロックの言語を翻訳および検出できます。さらに、ウェブページの任意のテキストフィールドまたはテキストエリアで音訳を有効にすることができます。たとえば、ヒンディー語に音訳している場合、この API を使用すると、ユーザーは英語を使用してヒンディー語の単語を音声学的に綴り、ヒンディー語スクリプトに表示させることができます。
文字列の言語を自動的に検出できます
var text = "¿Dónde está el baño?";
google.language.detect(text, function(result) {
if (!result.error) {
var language = 'unknown';
for (l in google.language.Languages) {
if (google.language.Languages[l] == result.language) {
language = l;
break;
}
}
var container = document.getElementById("detection");
container.innerHTML = text + " is: " + language + "";
}
});
サポートされている言語のいずれかで書かれた文字列を翻訳します(これも廃止されました) 。
google.language.translate("Hello world", "en", "es", function(result) {
if (!result.error) {
var container = document.getElementById("translation");
container.innerHTML = result.translation;
}
});
Google Translate API は無料サービスとして終了するため、Google Translate API の代替となる無料の代替サービスを試すことができます。
Text_LanguageDetect pear パッケージはひどい結果をもたらしました: 「高級アパート ダウンタウン」はポルトガル語として検出されます...
Google API は依然として最良のソリューションです。300 ドルの無料クレジットを提供し、料金を請求する前に警告します。
以下は、file_get_contents を使用して API によって検出された lang をダウンロードする非常に単純な関数であるため、ライブラリなどをダウンロードまたはインストールする必要はありません。
function guess_lang($str) {
$str = str_replace(" ", "%20", $str);
$content = file_get_contents("https://translation.googleapis.com/language/translate/v2/detect?key=YOUR_API_KEY&q=".$str);
$lang = (json_decode($content, true));
if(isset($lang))
return $lang["data"]["detections"][0][0]["language"];
}
実行する:
echo guess_lang("luxury apartments downtown montreal"); // returns "en"
ここで Google 翻訳 API キーを取得できます: https://console.cloud.google.com/apis/library/translate.googleapis.com/
これは、簡単な短いフレーズの例です。より複雑なアプリケーションでは、API キーを制限し、明らかにライブラリを使用する必要があります。
Text_LanguageDetect Pear パッケージを使用するか、ダウンロードして通常の php ライブラリのように個別に使用することで、php で文字列の言語を検出する方法を確認できます。
Google Translate APIを使用して言語を検出し、必要に応じて翻訳することができます。
私はさまざまな言語からドキュメントを取得し、それらを Unicode に対して参照します。次に、ベイジアン推論を使用して、使用されているユニコード文字だけでどの言語であるかを判断できます。これにより、フランス語が英語またはロシア語から分離されます。
言語を決定するために言語辞書で単語を検索する以外に、他に何ができるか正確にはわかりません(同様の確率論的アプローチを使用して)。
1 つの方法として、入力文字列を単語に分割し、それらの単語を英語の辞書で調べて、それらの単語がいくつ存在するかを確認することが考えられます。このアプローチにはいくつかの制限があります。
- 固有名詞がうまく扱えない
- スペルミスは検索を混乱させる可能性があります
- 「lol」や「b4」などの略語は必ずしも辞書に載っているとは限りません
おそらく、この言語ゲッサーに文字列を送信します。
http://www.xrce.xerox.com/competencies/content-analysis/tools/guesser
Java を使用して Apache Tika のモジュールを実装し、結果を txt ファイルや DB などに挿入してから、php を使用してファイル db から読み取ることができます。コンテンツがそれほど多くない場合は、Google の API を使用できますが、呼び出しが制限され、限られた数の文字しか API に送信できないことに注意してください。これを書いている時点で、API のバージョン 1 (あまり正確ではないことが判明しました) とラボ バージョン 2 (1 日あたり 100,000 文字の上限があることを読んだ後、捨てました) のテストを終了しました。