34

PHP で、文字列の言語を検出する方法はありますか? 文字列が UTF-8 形式であるとします。

4

18 に答える 18

36

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
)
于 2010-04-05T00:10:13.097 に答える
17

文字種から言語を判別することはできません。そして、これを行うための絶対確実な方法はありません。

どの方法を使用しても、経験に基づいた推測を行っているだけです。数学関連の記事がいくつかあります

于 2009-09-17T22:08:27.743 に答える
15

これは、 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;
  }
});
于 2009-09-17T22:24:01.353 に答える
8

Google Translate API は無料サービスとして終了するため、Google Translate API の代替となる無料の代替サービスを試すことができます。

http://detectlanguage.com

于 2011-11-14T12:55:39.060 に答える
3

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 キーを制限し、明らかにライブラリを使用する必要があります。

于 2017-11-07T21:09:35.650 に答える
2

Text_LanguageDetect Pear パッケージを使用するか、ダウンロードして通常の php ライブラリのように個別に使用することで、php で文字列の言語を検出する方法を確認できます。

于 2012-05-05T13:26:14.927 に答える
2

Google Translate APIを使用して言語検出し、必要に応じて翻訳することができます。

于 2009-09-17T22:22:00.860 に答える
1

私はさまざまな言語からドキュメントを取得し、それらを Unicode に対して参照します。次に、ベイジアン推論を使用して、使用されているユニコード文字だけでどの言語であるかを判断できます。これにより、フランス語が英語またはロシア語から分離されます。

言語を決定するために言語辞書で単語を検索する以外に、他に何ができるか正確にはわかりません(同様の確率論的アプローチを使用して)。

于 2009-09-20T01:33:06.347 に答える
1

1 つの方法として、入力文字列を単語に分割し、それらの単語を英語の辞書で調べて、それらの単語がいくつ存在するかを確認することが考えられます。このアプローチにはいくつかの制限があります。

  • 固有名詞がうまく扱えない
  • スペルミスは検索を混乱させる可能性があります
  • 「lol」や「b4」などの略語は必ずしも辞書に載っているとは限りません
于 2009-09-17T22:11:55.750 に答える
1

おそらく、この言語ゲッサーに文字列を送信します。

http://www.xrce.xerox.com/competencies/content-analysis/tools/guesser

于 2009-09-17T22:24:54.580 に答える
0

Java を使用して Apache Tika のモジュールを実装し、結果を txt ファイルや DB などに挿入してから、php を使用してファイル db から読み取ることができます。コンテンツがそれほど多くない場合は、Google の API を使用できますが、呼び出しが制限され、限られた数の文字しか API に送信できないことに注意してください。これを書いている時点で、API のバージョン 1 (あまり正確ではないことが判明しました) とラボ バージョン 2 (1 日あたり 100,000 文字の上限があることを読んだ後、捨てました) のテストを終了しました。

于 2011-04-12T16:56:15.670 に答える