1
0

【言語検出】pycld3を使って文章の言語検出してみた

Posted at

はじめに

botの入力制限に特定の言語のみを受け取りたいという要望があったので、それを実現する手法の1つとしてpycld3というライブラリで検証してみようと思います。

この記事でやること

  • 文章からpyclda3を用いて言語コードを取得する

実装

まずはライブラリのインストールから行います。
詳しくはこちらを確認してください。
pythonのバージョンは以下のように指定されているので今回は python=3.8の環境で実装しました。

Requires: Python >2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*

余談ですが、python3.- ~ 3.5ではpycld2という別のライブラリが使えるようでした。

インストール
pip install pycld3

このライブラリはcld3という名前でimportできます。

main.py
import cld3

次に今回判別に使う仮データを用意します。

main.py
samples = {
    '月が綺麗ですね' : 'ja', # 日本語
    'The moon is beautiful.' : 'en', # 英語
    'La lune est belle' : 'fr', # フランス語
    'La luna è bellissima' : 'it', # イタリア語
    '月が綺麗ですね The moon is beautiful' : 'ja + en',
    '月が綺麗ですね La lune est belle' : 'ja + fr',
    '月が綺麗ですね La lune è bellissima' : 'ja + it',
    '月が綺麗ですね The moon is beautiful La lune est belle La lune est belle La luna è bellissima' : 'mixed',
}

今回は日本語、英語、フランス語、イタリア語の4カ国議+複数の言語の結合文字列で実験しました。

main.py
for k, v in samples.items():
    lang = cld3.get_frequent_languages(k, num_langs = 1)[0][0]
    print(f'入力言語{v} : 検出された言語{lang}')

コードの全体像はこちらになります。

main.py(全体)
import cld3

samples = {
    '月が綺麗ですね' : 'ja', # 日本語
    'The moon is beautiful.' : 'en', # 英語
    'La lune est belle' : 'fr', # フランス語
    'La luna è bellissima' : 'it', # イタリア語
    '月が綺麗ですね The moon is beautiful' : 'ja + en',
    '月が綺麗ですね La lune est belle' : 'ja + fr',
    '月が綺麗ですね La lune è bellissima' : 'ja + it',
    '月が綺麗ですね The moon is beautiful La lune est belle La lune est belle La luna è bellissima' : 'mixed',
}

for k, v in samples.items():
    lang = cld3.get_frequent_languages(k, num_langs = 1)[0][0]
    print(f'入力言語{v} : 検出された言語{lang}')

実行結果と考察

実行結果
入力言語ja : 検出された言語ja
入力言語en : 検出された言語en
入力言語fr : 検出された言語fr
入力言語it : 検出された言語co
入力言語ja + en : 検出された言語en
入力言語ja + fr : 検出された言語ja
入力言語ja + it : 検出された言語it
入力言語mixed : 検出された言語fy

表にまとめると以下のようになります。

入力言語 検出言語 正誤
日本語 日本語 O
英語 英語 O
フランス語 フランス語 O
イタリア語 コルシカ語 X
日本語+英語 英語 -
日本語+フランス語 日本語 -
日本語+イタリア語 イタリア語 -
全文章結合 フリジア語 -

興味深い点としては、単一言語で検出ではコルシカ語と検出されたイタリア語が、日本語+イタリア語の混合文章ではイタリア語として検出されているということかなともいました。

また、今回は短い文章に対して検出を行ったのでより長い文章にすることで各言語ごとの差がつき、より正しい検出になることができそうな気もしました。

まとめ

完全な精度でないですが、単一の言語認識において英語かそうでないかを判別するという、大元の要件はこのライブラリで満たすことができそうなので、一定利用しやすいライブラリなのかと思います!
ぜひ、皆さんも使ってみてください!!!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0