世界は色んな言語であふれている(langdetectで何語かを判定してみる）

### ■ はじめに
過去に何語かわからない人からSNSでメッセージをもらったことがあります。
たしかアラビア語で、最初見た時は文字化けかと思いました（怖くて返信しませんでした）。
SNSのコメント欄や口コミサイトを眺めていると日本語や英語、見たことのない言語が混ざっていることがあります。
最近Nakatani Shuyo(https://github.com/shuyo) さん作成のライブラリの[**langdetect**](https://pypi.org/project/langdetect/)で何語か判定できることを知り、使ってみたくなりました。

### ■ 対応言語
**langdetect**が対応できるのは以下の55種類の言語。
以下は**言語コード**で記載されています。
`af, ar, bg, bn, ca, cs, cy, da, de, el, en, es, et, fa, fi, fr, gu, he,
hi, hr, hu, id, it, ja, kn, ko, lt, lv, mk, ml, mr, ne, nl, no, pa, pl,
pt, ro, ru, sk, sl, so, sq, sv, sw, ta, te, th, tl, tr, uk, ur, vi, zh-cn, zh-tw`

言語コード一覧については[みんなの自動翻訳＠TexTra®](https://mt-auto-minhon-mlt.ucri.jgn-x.jp/)の[**「言語コードとは何ですか？」**](https://mt-auto-minhon-mlt.ucri.jgn-x.jp/content/help/detail.html?q_pid=FAQ_ETC)のサイトが非常にわかりやすかったです。

### ■ インストール
pythonから使用する場合、[公式](https://pypi.org/project/langdetect/)に書いてありますがインストールは非常に簡単。

```
$ pip install langdetect
```
(サポートされているのはPythonのバージョン 2.7, 3.4+)

### ■ 簡単な使い方
これも[公式](https://pypi.org/project/langdetect/)に書いてありますが、使い方も簡単。

```
>>> from langdetect import detect
>>> detect("War doesn't show who's right, just who's left.")
'en'
>>> detect("Ein, zwei, drei, vier")
'de'
```
### ■ wikipediaを用いた簡単な検証

wikipediaは著名な人・モノであれば複数の言語で書かれています。
台湾で著名な**オードリー・タン**さんの記事を用いて検証をしてみることにしました。
ちなみに中国語のページはこんな感じ（何と書いてあるんでしょう・・）。
![tann_chinese.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684711/50c896f7-1dab-598c-5fee-aaa1c4d91aef.jpeg)

中国語、英語、フランス語、日本語、アラビア語の記事の最初の文をコピペした`sample.txt`を作成しました。
（コピペした後わからなくなるので引用前に何語か注釈を入れています。）

```sample.txt
##中国語##
唐鳳（台灣話 : Tn̂g Hōng，英語：Audrey Tang，1981年4月18日－），原名唐宗漢，是出身臺灣臺北市的自由软件程式設計師及政治人物。候任中華民國數位發展部部長，現任行政院政務委員。她是世界上第一个公开出柜的部长级（及以上）跨性别人物，直到她被任命为政务委员后的四年整，在比利时才有第二个这样的人物。
##英語##
Audrey Tang (Chinese: 唐鳳; pinyin: Táng Fèng; born 18 April 1981) is a Taiwanese free software programmer and Digital Minister of Taiwan,[1] who has been described as one of the "ten greatest Taiwanese computing personalities".[2] In August 2016, Tang was invited to join Taiwan's Executive Yuan as a minister without portfolio, making her the first transgender and the first non-binary official in the top executive cabinet.[3][4][5] Tang has identified as "post-gender" and accepts "whatever pronoun people want to describe me with online."[6] Tang is a community leader of Haskell and Perl and the core member of G0v.
##フランス語##
Audrey Tang (en chinois traditionnel : 唐鳳 ; née le 18 avril 1981 à Taipei avec comme nom 唐宗漢) est une programmeuse de logiciels libres, entrepreneuse et femme politique taïwanaise, connue pour avoir créé et dirigé le projet Pugs, un effort commun des communautés Haskell et Perl pour mettre en œuvre le langage Perl 6. En 2016, elle est nommée ministre sans portefeuille chargée du Numérique à Taïwan, dans le gouvernement de Lin Chuan.
##日本語##
唐 鳳（とう ほう、タン・フォン、オードリー・タン、英: Audrey Tang、1981年4月18日 - ）は、台湾の政治家、プログラマー。改名しており旧名は唐 宗漢（とう そうかん、タン・ツォンハン、英: Autrijus Tang）。
##アラビア語##
(من مواليد 18 أبريل 1981؛ كانت تعرف سابقا باسم تانغ) هي التايوانية مبرمجة البرمجيات الحرة، التي وصفت بأنها واحدة من «العشرة العظماء التيوانيين بالحوسبة».
```
### ■ サンプルコード
以下のコードを用いて、何語と検出されるか検証を実施した。
```sample.py
from langdetect import detect

path_ = "sample.txt"
with open(path_, encoding='utf-8') as f:
    text = f.read()
    for t in text.split("\n"):
        if not "#" in t:
            print("lang:", detect(t))
            print(t)
```

### ■ 検証結果
2回実行した結果は以下の通りです。
正解と同じ判定の場合は〇、失敗の場合は×と記載しています。

| 正解       | 検証(1回目)        | 検証(2回目)              | 
| :--------: | :----------------: | :----------------------: | 
| 中国語     | ×(ko:韓国語と判定) | 〇(zh-tw:中国語(繁体字)) | 
| 英語       | 〇(en)             | 〇(en)                   | 
| フランス語 | 〇(fr)             | 〇(fr)                   | 
| 日本語     | 〇(ja)             | 〇(ja)                   | 
| アラビア語 | 〇(ar)             | 〇(ar)                   | 

### ■ 所感
今回使ってみた所感です。
* 同じデータでも異なる推論結果となることがあった
* 今回検証した結果を見る限り精度が高い
* 今回検証で使用した文章は`"en chinois traditionnel : 唐鳳 ; née le 18 avril 1981 à Taipei avec comme nom 唐宗漢"`のように言語が混ざった部分があるので検証としては難しい題材を用いてしまった
* 何より使いやすいライブラリだった