MAGAZINE

ルーターマガジン

Ruby

Rubyでテキストの言語判定を行う方法

2025.11.07
Pocket

はじめに

弊社では多様なスクレイピングを行っており、その過程で多言語のテキストデータを扱う機会が多くあります。 これらの収集データを分析する際には、各文章がどの言語で書かれているかを自動的に判定したい場面が頻繁にあります。 たとえば、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環境ではclanggccなどのコンパイラが必要です。

判定結果の利用例

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++のビルドが必要な場合があるため、その点だけ注意しましょう。

株式会社ルーター 長戸

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから