Comments (2)
はい,この手の文字が「含まれていないほうが嬉しい」ケースはあると思います。
たとえば,システムが MySQL の(utf8mb4 ではなく)utf8 を採用していた場合,BMP 内の文字しか扱えませんから,「𡈽田」さん「𠮷田」とか,地名の「𩸕網代」(長崎県)などが扱えません(保存時に吹き飛んだりする)。
また,システムが Unicode 系の文字コードを用いていても,CSV 出力の際にシフト JIS 化する場合,シフト JIS で表せない文字が入っていると,代替文字に置き換えられたりエラーが出たりします。
※UTF-8 の CSV を Excel がうまく扱えないために,「CSV はシフト JIS で」というオシゴトは少なくない。残念ながら。
その「シフト JIS」も,CP932 と,Ruby でのエンコーディング名「Shift_JIS」(文字集合としては JIS X 0208 の範囲)とでは文字集合の大きさが違い,後者だと「髙」「﨑」が扱えません。
なので,やはり目的に応じて使う文字集合の大きさが変えられるのが理想ですね。
もしそのようにできるなら,文字集合としては
- JIS X 0208
- CP932
- BMP
- 制限なし(Unicode 全体)
の四つを考えれば十分かと思います。
この四つは単純に,下の文字集合が上の文字集合を包含する関係にあります。
ただ,文字列生成のパラメーターとして,この四つの文字集合のどれかが指定できるだけでなく,可能ならば差集合に属す文字を含んだ文字列という指定もできれば嬉しいですね。
どういうことかというと,例えば 100 人の人名を生成するとして,その中に BMP 外の文字も少しはあってほしいとします。
しかし,names.yml の多数の人名の中で,「𡈽」などを含むデータは僅かしか含められないので,100 人程度生成しても該当のものが一つもない,ということが高確率で起こりえます。
そこで,たとえば 97 人ぶんは「制限なし」で生成し(BMP 外の文字はあるかもしれないし無いかもしれない),念のため 3 人ぶんを「BMP 外の文字を必ず含む人名集合」から生成する,としたいわけです。
「いや,そうしたいんなら,その 3 人ぶんは Gimei 使わずに直に書けばいいじゃん」という考えもありうるので,この機能は必須とまでは思いません。
もしこれを実装するなら,(API をどうするかはともかくとして)こんな感じになると思います:
まず,文字の集合を
- C1: JIS X 0208 の文字集合
- C2: CP932 に含まれ,JIS X 0208 に含まれない文字集合
- C3: BMP に含まれ,CP932 に含まれない文字集合
- C4: BMP に含まれない文字集合
に分解して考えます(C1, C2, C3, C4 は互いに共通部分をもたず,C1 ∪ C2 ∪ C3 ∪ C4 は Unicode 全体)。
次に,人名集合を
- N1: C1 のみからなる人名の集合
- N2: C2 ∪ C1 のみからなり,少なくとも 1 字は C2 − C1(差集合)の文字を含む人名の集合
- N3: C3 ∪ C2 のみからなり,少なくとも 1 字は C3 − C2 の文字を含む人名の集合
- N4: C4 ∪ C3 のみからなり,少なくとも 1 字は C4 − C3 の文字を含む人名の集合
の四つ用意します。
N1 は現在のデータですね。
N2 は「山﨑」など,N3 は「鷗外」など,N4 は「𡈽田」などです。
そして,人名を生成するときにパラメーターとして,「BMP 内の文字限定」とした場合,N1 ∪ N2 ∪ N3 の人名からランダムに返す,といった具合です。
ここまでは差集合に対応するか否かに関わらず同じ。
差集合に対応する場合は,たとえば N3 の人名から返す,といった具合ですね。
ただ,姓はいいとして,名は戸籍法の縛りがあるため N4 の例がそう簡単に作れるか分かりません(お年寄りの名はこの縛りが無いはずですが,そもそもレアな字なので)。
ところで,JIS X 0208 の範囲で異体字を豊富に,というほうは難しいことを考える必要がないので,まずはこちらの PR を作ってみようかと思います。
from gimei.
大筋問題ないと思うので lib/data/names.ymlやlib/data/addresses.ymlに追加したい文字を入れてPRもらえると嬉しいです!
少し気になっている点
- 逆にはしご高などの文字が含まれていないほうがうれしいユースケース、というのがあるかどうか気になっています
- なければ単に文字を増やしてしまえばよいのですが、ある場合はなにかしらのオプションで扱う文字の集合を切り替えられるとうれしいのかな…と思っています
- もしこのIssueをみていてユースケースが思いつく人はコメントもらえると嬉しいです
- とくにコメントなければエイヤでPRマージして様子見るつもりでいます
from gimei.
Related Issues (17)
- ふりがな(ひらがな)対応 HOT 1
- 住所も扱えるようにする HOT 1
- READMEかく
- 名前のデータが少ない HOT 1
- gemspec に license を追加
- 0.2.0 リリース HOT 1
- 電話番号生成機能 HOT 6
- suppress warning message on test HOT 1
- Ensuring unique values HOT 1
- 郵便場号の生成機能
- 市町村統廃合のymlファイルへの反映 HOT 2
- データの読み込みを必要になるまで遅延させる
- RBSをつける HOT 1
- 存在しない住所の組み合わせが出る HOT 1
- 型定義の不足 HOT 1
- Ruby 3.4のテストが失敗する
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gimei.