Convert giữa các hệ chữ Nhật với gem Mojinizer
Bài đăng này đã không được cập nhật trong 9 năm
Mojinizer
**Nguồn:** https://github.com/ikayzo/mojinizer - Gem giúp chuyển đổi giữa các hệ chữ Hiragana, Katakana, Romaji. - Chuyển đổi giữa các kiểu input Zenkaku và Hankaku.
1. Cài đặt
gem 'mojinizer'
2. Sử dụng
Các method được sử dụng để convert và detect đã được thêm vào class String sau khi cài đặt gem. Do đó, ta có thể gọi thông qua String object's method.
Conversation
- Hirakana/Katakana -> Romaji:
"つくえ".romaji #=> "tsukue"
"ツクエ".romaji #=> "tsukue"
- Katakana/Romaji -> Hiragana:
"ツクエ".hiragana #=> "つくえ"
"tsukue".hiragana #=> "つくえ"
- Hiragana/Romaji -> Katakana:
"つくえ".katakana #=> "ツクエ"
"tsukue".katakana #=> "ツクエ"
- Hiragana <-> Katakana
"つくえ".hira_to_kata #=> "ツクエ"
"ツクエ".kata_to_hira #=> "つくえ"
- Chuyển đổi giữa kiểu Hankaku <-> Zenkaku:
"アロハ".han_to_zen #=> "アロハ"
"abc".han_to_zen #=> "abc"
"アロハ".zen_to_han #=> "アロハ"
"abc".zen_to_han #=> "abc"
Detection method
Các hàm detection giúp kiểm tra chuỗi truyền vào thuộc kiểu Hiragana, Katakana, ... trả về giá trị true, false.
- Toàn bộ chuỗi là kiểu Hiragana/Katakana ?
"アロハ".kana? #=> true
"abc".kana? #=> false
"アロハ".katakana? #=> true
"アロハ abc".katakana? #=> false
"すし".hiragana? #=> true
"Let's eat すし".hiragana? #=> false
- Với detection method có thể áp dụng kiểm tra kiểu Kanji.
"東京都".kanji? #=> true
"東京都だよ".kanji? #=> false
- Kiểu Hankaku/Zenkaku/ASCII zenkaku.
"アロハ".hankaku? #=> true
"アロハ".hankaku? #=> false
"アロハ".zenkaku? #=> false
"アロハ abc".zenkaku? #=> true
"アロハ abc".ascii_zenkaku? #=> false
"abc".ascii_zenkaku? #=> true
- Toàn bộ chuỗi có là chữ Nhật?
"東京都".japanese? #=> true
"abc".japanese #=> false
- Check nội dung bên trong chuỗi có tồn tại kiểu Kana, Zenkaku, ... hay không. Trả về true, false.
"アロハ everybody".contains_katakana? #=> true
"Let's eat すし".contains_katakana? #=> false
"アロハ everybody".contains_hiragana? #=> false
"Let's eat すし".contains_hiragana? #=> true
"金曜日だよ".contains_kanji? #=> true
"アロハ everybody".contains_hankaku? #=> true
"Let's eat すし".contains_hankaku? #=> false
"アロハ everybody".contains_zenkaku? #=> false
"Let's eat すし".contains_zenkaku? #=> true
"Let's eat すし".contains_japanese? #=> true
"It's Friday, Friday".contains_japanese? #=> false
3. Demo
- Giả sử:
- Ta có thông tin được crawler từ nhiều nguồn khác nhau.
- Vì có khả năng xảy ra trùng lặp nên cần so sánh các thông tin.
- Vì cùng 1 thông tin nhưng sử dụng khác kiểu chữ sẽ không thể so sánh chính xác được.
- Yêu cầu xử lý trước khi so sánh:
- Thống nhất chữ hoa chữ thường => chữ hoa.
- Thống nhất kiểu chữ sang Hiragana.
- Thống nhất sử dụng kiểu input Zenkaku.
def crawler
...
return name_array
#name_array = ["シー・コネクト", "イー・スピリット", "ポリゴン・ピクチュアズ", "dPARK", "アイノグラフィックス", "dPark", "アンビション", "しー・こねくと"]
end
Bằng mắt thường có thể thấy phẩn tử của mảng - シー・コネクト (katakana) tương đương しー・こねくと (hiragana) - dPARK (hankaku) tương đương dPark (zenkaku)
Nhưng vì khi nhập liệu sử dụng kiểu chữ và input khác nhau, nên khi ta so sánh sự trùng lặp sẽ bị bỏ sót.
"シー・コネクト" == "しー・こねくと" #false
"dPARK" == "dPark" #false
Xử lý dữ liệu:
def crawler
...
return name_array
end
def convert_name
name_array = crawler
name_array.each do |name|
name = name.mb_chars.upcase.to_s
name = name.hiragana unless name.hiragana?
name = name.han_to_zen unless name.zenkaku?
@convert_array << name unless new_array.include? name
end
end
Kết quả sau khi xử lý và so sánh:
Name_array | Convert_array | |
---|---|---|
シー・コネクト | => | しー・こねくと |
イー・スピリット | => | いー・すぴりっと |
ポリゴン・ピクチュアズ | => | ぽりごん・ぴくちゅあず |
dPARK | => | DPARK |
アイノグラフィックス | => | あいのぐらふぃっくす |
dPark | => | DPARK (trùng lặp-loại) |
アンビション | => | あんびしょん |
しー・こねくと | => | しー・こねくと (trùng lặp-loại) |
All rights reserved