11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

中国語をピンインでソートする

Last updated at Posted at 2014-09-10

中国語には「ピンイン」と呼ばれる発音に似たものがあります。
日本語を 50 音順で並べるのと同じように、中国語ではピンイン順に並べられていると気持ちが良いようです。
今回はそのピンインソートを chinese_pinyin という gem を利用して実現してみたいと思います。
Ruby Toolbox で検索してみると chinese_pinyin がダントツ人気でした。)

ピンインソートはこんな感じで簡単に実現できます。

pinyin.rb
require 'chinese_pinyin'

array = ["北京", "西安", "香港", "上海", "昆明", "日本"]
array.sort! do |a,b|
	Pinyin.t(a, splitter: "") <=> Pinyin.t(b, splitter: "")
end

p array # =>["北京", "昆明", "日本", "上海", "西安", "香港"]

どういうピンインで構成されているかを知りたい場合はこんな感じ。

pinyin.rb
require 'chinese_pinyin'

array = ["北京", "西安", "香港", "上海", "昆明", "日本"]
p array.map {|a| Pinyin.t(a, splitter: "")} # =>["beijing", "xian", "xianggang", "shanghai", "kunming", "riben"]

もう1つ、こちらの gem がイケてる点として、ピンインを置換する拡張ポイントが用意されていることが挙げられます。
例えば「my_pinyin.txt」のような定義ファイルを用意して「WORDS_FILE=my_pinyin.txt」のような環境変数を設定すると、そのピンインを置換することが出来ます。

my_pinyin.txt
日本|nihon
香港|hongkong
pinyin.rb
require 'chinese_pinyin'

array = ["北京", "西安", "香港", "上海", "昆明", "日本"]
p array.map {|a| Pinyin.t(a, splitter: "")} # =>["beijing", "xian", "hongkong", "shanghai", "kunming", "nihon"]

なかなか素晴らしい gem だと思います。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?