MAGAZINE
ルーターマガジン
Ruby
Rubyでテキストの言語判定を行う方法
2025.11.07
はじめに
弊社では多様なスクレイピングを行っており、その過程で多言語のテキストデータを扱う機会が多くあります。 これらの収集データを分析する際には、各文章がどの言語で書かれているかを自動的に判定したい場面が頻繁にあります。 たとえば、SNS投稿の分類、海外サイトからのデータ収集、口コミ分析などがその一例です。
Rubyにはいくつかの言語判定ライブラリがあり、手軽なものから高精度なものまで用途に応じて選べます。 本記事では、代表的な2つのライブラリを紹介します。
whatlanguage:軽量・シンプルcld3-ruby:Google製エンジンによる高精度な判定
1. whatlanguage
インストール
gem install whatlanguage
使用例
require 'whatlanguage'
wl = WhatLanguage.new(:all)
puts wl.language("This is a short text for language detection.") # => :english
puts wl.language("これは言語判定のための短い文章です。") # => :russian
puts wl.language("Il s'agit d'une courte phrase pour la détection du langage.") # => :french
出力例:
english
russian
french
特徴:
- 短いコードで簡単に利用可能
- 主要な言語(英語・フランス語など)に対応
注意点:
- 日本語未対応(対応言語が限定的)
- 短文だと誤判定しやすい
2. cld3-ruby (GoogleのCLD3エンジン)
cld3-ruby は、Googleが開発したCompact Language Detector 3 (CLD3) をRubyから利用できるライブラリです。
ニューラルネットワークを利用したモデルにより、短文でも高い精度で言語を判定できます。
インストール
gem install cld3
使用例
require 'cld3'
detector = CLD3::NNetLanguageIdentifier.new(0, 1000) # テキストの0~1000文字目で判定
text1 = "This is a short text for language detection."
text2 = "これは言語判定のための短い文章です。"
text3 = "Il s'agit d'une courte phrase pour la détection du langage."
puts detector.find_language(text1)
puts detector.find_language(text2)
puts detector.find_language(text3)
出力例:
#<struct CLD3::NNetLanguageIdentifier::Result language=:en, probability=0.9977023601531982, :reliable?=true, proportion=1.0, byte_ranges=[]>
#<struct CLD3::NNetLanguageIdentifier::Result language=:ja, probability=1.0, :reliable?=true, proportion=1.0, byte_ranges=[]>
#<struct CLD3::NNetLanguageIdentifier::Result language=:fr, probability=1.0, :reliable?=true, proportion=1.0, byte_ranges=[]>
特徴:
- Google製の高精度モデル
- 短文やSNSテキストでも高い精度
- 言語コード(ISO 639-1形式)で結果を取得可能
注意点:
- C++で実装されたGoogleのCLD3ライブラリを内部で使用しているため、環境によってはビルド(ネイティブコンパイル)が必要になる場合があります。
特にmacOSやLinux環境では
clangやgccなどのコンパイラが必要です。
判定結果の利用例
result = detector.find_language("これはTest用の文章です。")
if result.reliable?
puts "Detected: #{result.language} (#{(result.probability * 100).round(2)}%)"
else
puts "判定が不確かです。"
end
出力:
Detected: ja (100.0%)
各ライブラリの比較
| ライブラリ | 精度 | 対応言語 | 特徴 |
|---|---|---|---|
| whatlanguage | 中 | 約20言語 | 手軽に使える・短文に弱い・日本語未対応 |
| cld3-ruby | 高 | 約100言語 | Google製・短文でも高精度 |
まとめ
Rubyでの言語判定は、目的や環境に応じてライブラリを選ぶのがポイントです。
- 手軽に試したい →
whatlanguage - 精度も速度も重視したい →
cld3-ruby
日本語を含むテキストを判定したい場合、選択肢はcld3-rubyのみになります。
ただし、開発環境によってはC++のビルドが必要な場合があるため、その点だけ注意しましょう。
株式会社ルーター 長戸
CONTACT
お問い合わせ・ご依頼はこちらから