はじめに
Language-Detectionという言語判定のライブラリがあります。Apacheライセンスで公開されており、53言語を99%以上の精度で判定できます。今回はこちらのライブラリをWebAPIにして公開しました。

API
サンプルコード
特徴
詳細は公式サイトをご覧ください。ざっと紹介すると、以下の特徴があります。
- 53言語を99%以上の精度で判定
- Wikipediaデータベースの要約ファイルから言語プロファイルを作成
- ベイジアンフィルタを用いて、言語ごとの確率を出力
対象言語
下記の53言語です。
| 出力ラベル | 言語 |
|---|---|
| af | アフリカーンス語 |
| ar | アラビア語 |
| bg | ブルガリア語 |
| bn | ベンガル語 |
| cs | チェコ語 |
| 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 | オランダ語 |
| pa | パンジャーブ語 |
| pl | ポーランド語 |
| pt | ポルトガル語 |
| ro | ルーマニア語 |
| ru | ロシア語 |
| sk | スロバキア語 |
| sl | スロベニア語 |
| so | ソマリ語 |
| sq | アルバニア語 |
| sv | スウェーデン語 |
| sw | スワヒリ語 |
| ta | タミル語 |
| te | テルグ語 |
| th | タイ語 |
| tl | タガログ語 |
| tr | トルコ語 |
| uk | ウクライナ語 |
| ur | ウルドゥー語 |
| vi | ベトナム語 |
| zh-cn | 中国語(簡体字) |
| zh-tw | 中国語(繁体字) |
使ってみる
それでは実際にAPIを使ってみます。公式では入力テキストは10語から20語以上を推奨していますが、ツイートなどの短い文章用のモデルファイルも公開されています。今回、公開したAPIはどちらも対応しています。さて、実例を見てみましょう。日本語は言語判定が簡単な言語だと言われているので、当然のように正解しますね。
"text": "吾輩は猫である。名前はまだない。",
"language": "ja",
"probabilities": [
{
"lang": "ja",
"prob": 0.9999994666311415
}
]
英語もイケますね。
"text": "I have a pen. I have an apple.",
"language": "en",
"probabilities": [
{
"lang": "en",
"prob": 0.9999959057535223
}
]
フランス語です。適当に例文を引っ張ってきました。
"text": "J’aime beaucoup prendre des photos. Le weekend, je m’en vais prendre des photos de la nature, des animaux, de personnes diverses, etc.",
"language": "fr",
"probabilities": [
{
"lang": "fr",
"prob": 0.9999969265253923
}
]
タガログ語です。すごい。合ってる。
"text": "Magandang hapon. Kumusta ka? Mabuti naman. Salamat sa masarap na pagkain. Magkano ba ito? ",
"language": "tl",
"probabilities": [
{
"lang": "tl",
"prob": 0.9999952298879659
}
]
アフリカーンス語です。これも合ってる。すごい。
"text": "Goeiemiddag. Hoe gaan dit? Kan jy Japanees praat? Ek het my beursie verloor. Hat u leegte kamer?",
"language": "af",
"probabilities": [
{
"lang": "af",
"prob": 0.9999963894521695
}
]
おわりに
Language-DetectionをAPIで公開しました。私がまったく知らない言語でもとても正確に判定するので驚きました。言語判定は色々と役立つシーンがあります。例えば、チャットボットを作ったときに入力のテキストの言語判定をし、言語に応じて返答の言語を変える、といった使い方ができます。その他の例としては、スパムフィルタにも使えます。簡易的なスパムフィルタとして用いる場合、例えば私のこのブログは日本人を対象としていますが、英語やフランス語のコメントがあった場合はスパムと判断してもほぼ間違いはありません。色んなシーンで使える技術なので、是非お試しください。
PPAPを入力してみる
番外編としてPPAP(Pen Pineapple Apple Pen)を入力してみました。入力が短いので単文用の言語判定APIを使いました。
"text": "Pen Pineapple Apple Pen",
"language": "ro",
"probabilities": [
{
"lang": "ro",
"prob": 0.9999955412821313
}
]
ルーマニア語?ある程度長い文章、かつ文法が含まれていないと難しいのでしょうか?以上、番外編でした。