【Python】日本語や外国語などの言語判定をする方法

アイキャッチ画像
  • Pythonで文字列の言語判定をするには?
  • 文字列中に何語が含まれているかを解析するには?

本記事ではこのような疑問を解決します。


今回はPythonによる日本語や外国語などの言語判定をする方法を解説していきます。

ちなみに、筆者がPythonによる言語判定を行なったきっかけは海外からの迷惑メールを弾きたいと思ったことです。

メール中の文字列を言語解析して特定の言語だけを受け付けられるようにしました。

言語判定の利用用途は様々ですが、本記事の内容をそれぞれの目的に応用してみてください。

あわせて読みたい

エンジニアが副業を始めるには?エンジニアの副業にはどんな種類がある? 本記事ではこのような疑問を解決します。副業がブームになっている昨今、エンジニアほど副業をやりやすい職業はないでしょう。副業に関心があったり、副業をしてみたいと思っ[…]

アイキャッチ画像

言語判定に使用するライブラリ

今回使用するライブラリは以下の通りです。

・PYCLD2
→対応Pythonバージョン2.7, 3.4, 3.5, 3.6, 3.7

・PYCLD3
→対応Pythonバージョン3.6, 3.7, 3.8, 3.9

上記2つの中から対応するPythonバージョンを考慮して使用するライブラリを選んでください。

ちなみに、コードの書き方が少し異なるだけでどちらも同じような出力結果を出してくれます。

あわせて読みたい

フリーランスエンジニアが案件獲得方法とは?自ら営業せずに案件を獲得するには?実務経験1年未満でも大丈夫なの? 本記事ではこのような疑問を解決します。これからフリーランスエンジニアとして独立したい方は、兎にも角にも案件の獲得が急務です[…]

アイキャッチ画像

PYCLD2を使用する場合

ライブラリをインストールする

まずは必要なライブラリをインストールします。

下記のコマンドを実行しましょう。

$ pip install pycld2

コードを記述する

それでは処理を記述していきます。

コード例は以下の通りです。

import pycld2

isReliable, textBytesFound, details = pycld2.detect(
    "This is a pen. これはペンです。"
)

print(details)
# =>(('Japanese', 'ja', 57, 3956.0), ('ENGLISH', 'en', 37, 1462.0), ('Unknown', 'un', 0, 0.0))

さらに、文字列に日本語が含まれているかどうかの判定をしてみましょう。

import pycld2

isReliable, textBytesFound, details = pycld2.detect(
    "This is a pen. これはペンです。"
)

language_list = []
for l in details:
    language_list.append(l[1])
print(language_list)
# =>['ja', 'en', 'un']

if 'ja' in language_list:
    print('含まれる')
else:
    print('含まれない')
# =>含まれる

PYCLD3を使用する場合

ライブラリをインストールする

まずは必要なライブラリをインストールします。

下記のコマンドを実行しましょう。

$ pip install pycld3

コードを記述する

それでは処理を記述していきます。

コード例は以下の通りです。

import cld3

cld3_languages = cld3.get_frequent_languages(
        "This is a pen. これはペンです。",
        num_langs=3,
        )

print(cld3_languages)
# =>[LanguagePrediction(language='ja', probability=1.0, is_reliable=True, proportion=0.6052631735801697), LanguagePrediction(language='en', probability=0.9999408721923828, is_reliable=True, proportion=0.3947368562221527)]

さらに、文字列に日本語が含まれているかどうかの判定をしてみましょう。

import cld3

cld3_languages = cld3.get_frequent_languages(
        "This is a pen. これはペンです。",
        num_langs=3,
        )

language_list = []
for l in cld3_languages:
    language_list.append(l[0])
print(language_list)
# =>['ja', 'en']

if 'ja' in language_list:
    print('含まれる')
else:
    print('含まれない')
# =>含まれる

まとめ

以上がPythonによる日本語や外国語などの言語判定をする方法になります。

数行のコードで処理を記述できるため、簡単に実装できました。

ぜひ本記事の内容を活用してPythonによる言語判定を試してみてください。

なお、今回扱ったライブラリの公式ドキュメントはこちらになります。

・PYCLD2公式ドキュメント
・PYCLD3公式ドキュメント