東京都府中市、九段下のWEB制作会社Maromaroのブログです

2023.05.22

taka

[便利なGemの紹介]Ruby on Railsにて異体字を正規化する方法[Ruby]

こんにちは
MaromaroのTAKAです。

今回はRuby on Railsにて異体字を正規化する際に簡単に実装する方法をご紹介します。

実際はこのGemは使わず自力で作成したのですが、
それについての詳細は後ほど記載いたします。

異体字とは簡単に例を出すと、
「島」を例に取ると、
「㠀嶋嶌嶹陦隝隯」が異体字となります。
同じ意味を持ち、音も同じであるにも関わらず、形が異なる文字のことを指します。
異体字は、同じ言葉や概念を表すために、歴史的、地域的、あるいは書体(手書きや印刷など)による理由から、形状が異なる文字のバリエーションを表します。

文字をマッチングしたい時に人力で入力されたものですと変換の揺れ等があると思います。
それらを正規化する際に同じ文字で統一出来ると便利ですよね。

やり方

まずはGemfileに以下を記載し、bundle installするか

gem 'itaiji'

以下の様に直接インストールしてください。

gem install itaiji

githubはこちらです。
https://github.com/camelmasa/itaiji

後は以下のように変換したい文字に使用してください。

require 'itaiji'
converter = Itaiji::Converter.new
#以下で異体字を通常字体に変換
seitaiji = converter.seijitai('齊藤')

こちらのgemは非常に便利ですが、全て網羅はしていないと思うので、
自分自身で異体字と通常字体の変換リストの管理をしたい場合は以下のようにする方法も良いかと思います。
リストはitaijiのgemからお借りしました。

# 異体字の変換
def self.normalize_variant_characters(text)
  variant_characters = Settings.itaiji
  variant_characters.each do |key, variants|
    variants.each do |variant|
      text.gsub!(variant.to_s, key.to_s)
    end
  end
  text
end

#下記はsettings.yml ←状況に応じて配置場所は変えてください。全て記載すると長くなるので省略しています
itaiji:
  亜:
  - 亞
  唖:
  - 啞
  - 瘂
  悪:
  - 惡
  芦:
  - 蘆
  鯵:
  - 鰺
  圧:
  - 壓
  庵:
  - 菴
  - 葊
  案:
  - 桉
  囲:
  - 圍
  為:
  - 爲
  医:
  - 醫
  育:
  - 毓
  一:
  - 弌
  壱:
  - 壹
etc...

以上となります。

このようにリストで管理しておけば、
状況に応じて追加できるので便利かと思います。

Takaでした。