textpie commited on
Commit
5e6f6db
·
verified ·
1 Parent(s): fd161da

Genderize v2: fused two-network model (v2.2), script-aware routing, country prior — honest model card; v1 preserved in tag v1

Browse files
COMMERCIAL_USE.md CHANGED
@@ -1,12 +1,13 @@
1
  # Licensing of the genderize weights
2
 
3
- **Weights** (`genderize_cora.pt`, `genderize_ultra.pt`, their `.config.json`, `.calibration.json` and `maps.json`)
 
4
  are released under **Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)** — see `LICENSE`.
5
 
6
  In plain words:
7
 
8
  - You may **download, run, study, modify and redistribute** the weights and derivatives **for non-commercial
9
- purposes**, provided you give attribution (*dbtool.it, genderize cora/ultra, 2026*) and indicate changes.
10
  - Research, teaching, personal projects, non-profit and public-sector use are non-commercial uses.
11
  - **Commercial use is not granted by this licence.** Commercial use means, without limitation: offering the
12
  model or a derivative as a paid or ad-supported service or API, embedding it in a product that is sold,
@@ -15,7 +16,7 @@ In plain words:
15
  on-premise licence, both offered by the rights holder. A separate written commercial licence can be
16
  requested from the rights holder, Domenico Gigante (d.gigante@tech-time.it).
17
 
18
- **Inference code** (`genderize_infer.py`) is released under the **MIT License** (see `LICENSE-CODE`) so that it
19
  can be freely reused; it carries no model knowledge.
20
 
21
  No training data, training scripts or dictionary tables are part of this release.
 
1
  # Licensing of the genderize weights
2
 
3
+ **Weights** (the `genderize_fuso_v2/` directory: the two internal networks `v1/` and `v2/`, `fuso.json`,
4
+ `country_prior.json`, `dom113_rimedio.json` and `SHA256SUMS`)
5
  are released under **Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)** — see `LICENSE`.
6
 
7
  In plain words:
8
 
9
  - You may **download, run, study, modify and redistribute** the weights and derivatives **for non-commercial
10
+ purposes**, provided you give attribution (*dbtool.it, genderize v2, 2026*) and indicate changes.
11
  - Research, teaching, personal projects, non-profit and public-sector use are non-commercial uses.
12
  - **Commercial use is not granted by this licence.** Commercial use means, without limitation: offering the
13
  model or a derivative as a paid or ad-supported service or API, embedding it in a product that is sold,
 
16
  on-premise licence, both offered by the rights holder. A separate written commercial licence can be
17
  requested from the rights holder, Domenico Gigante (d.gigante@tech-time.it).
18
 
19
+ **Inference code** (`inference.py`, `inference_fuso.py`) is released under the **MIT License** (see `LICENSE-CODE`) so that it
20
  can be freely reused; it carries no model knowledge.
21
 
22
  No training data, training scripts or dictionary tables are part of this release.
README.md CHANGED
@@ -8,209 +8,234 @@ tags:
8
  - gender-detection
9
  - nationality
10
  - name-analysis
11
- - byte-level
12
  - cpu
13
  pipeline_tag: text-classification
14
  ---
15
 
16
- # genderize — cora / ultra
17
 
18
- Two models that take a personal name and return a **gender** (M/F) and a
19
- **country** (226 ISO-3166 alpha-2 codes), with probabilities. Byte-level,
20
- CPU-only, no tokenizer and no vocabulary file: you feed them a string.
 
 
21
 
22
- ## Package contents
23
-
24
- | File | What it is |
25
- |---|---|
26
- | `genderize_cora.pt` | weights, cora (3.1 MB) — **CC BY-NC 4.0** |
27
- | `genderize_ultra.pt` | weights, ultra (12.9 MB) — **CC BY-NC 4.0** |
28
- | `genderize_cora.config.json` | `{"ch": 160}` — CC BY-NC 4.0 |
29
- | `genderize_ultra.config.json` | `{"ch": 384}` — CC BY-NC 4.0 |
30
- | `genderize_cora.calibration.json` | per-head temperature — CC BY-NC 4.0 |
31
- | `genderize_ultra.calibration.json` | per-head temperature (the file additionally records a calibration-error metric) — CC BY-NC 4.0 |
32
- | `maps.json` | class ids: gender `M/F`, 226 countries — CC BY-NC 4.0 |
33
- | `genderize_infer.py` | standalone inference code (needs `torch` and `numpy`) — **MIT** |
34
- | `LICENSE` | full text of CC BY-NC 4.0 (weights) |
35
- | `LICENSE-CODE` | full text of the MIT License (inference code) |
36
- | `COMMERCIAL_USE.md` | what counts as non-commercial use, and how to obtain a commercial licence |
37
-
38
- ## What the models do
39
-
40
- | Variant | Gender | Country | Size |
41
- |---|---|---|---|
42
- | `genderize-cora` | 2 classes (M/F) | 226 classes | ~0.77M parameters, ch=160 |
43
- | `genderize-ultra` | 2 classes (M/F) | 226 classes | ~3.21M parameters, ch=384 |
44
-
45
- `ultra` is the larger, more accurate variant; `cora` is the lighter one. Both run
46
- on CPU: on an Intel i3-6100T (2 cores, 2 threads used) the network alone processes
47
- about **850 names/s** (`cora`) and **160 names/s** (`ultra`) in batches of 100.
48
 
49
- ## How it works
50
 
51
- **1. Normalisation.** The input name is normalised before anything else:
52
- Unicode **NFC**, **lowercase**, **whitespace collapsed** (internal runs and
53
- leading/trailing spaces become a single space). The normalised form is what the
54
- weights saw, so this step must not be changed or skipped:
55
-
56
- " MARÍA GARCÍA " -> "maría garcía"
57
-
58
- **2. Encoding.** The normalised text is encoded as **UTF-8 and truncated to 48
59
- bytes** (not 48 characters: an accented or non-Latin character takes more than
60
- one byte, so the effective character budget is smaller). Each byte becomes an
61
- integer in 0–255; byte value 0 is the padding value. A name shorter than 48 bytes
62
- is padded with zeros.
63
-
64
- **3. Network.** Byte-level, dual-head 1-D convolutional classifier:
65
-
66
- - one embedding table, 256 entries (one per byte value) of width 64, padding
67
- index 0;
68
- - a 1×1 convolution projecting 64 → `ch` channels;
69
- - four residual 1-D convolution blocks, kernel sizes **3, 5, 7, 3**, each with
70
- convolution + BatchNorm + GELU around a residual connection, padding to keep
71
- the length;
72
- - the masked positions are pooled twice — mean-pooling and max-pooling — and the
73
- two vectors are concatenated;
74
- - a shared layer of 512 units (GELU, plus a dropout layer that is inactive at
75
- inference);
76
- - two linear heads read out from it: **gender**, 2 classes, and **country**,
77
- 226 classes.
78
-
79
- `cora` uses `ch = 160`, `ultra` `ch = 384`; those are the only differences
80
- between the two configs.
81
-
82
- **4. Probabilities.** Because it is a *convolutional* stack, the model sees all
83
- byte positions at once: character order matters through the convolution kernels,
84
- not through a recurrent state. Logits are divided by a **per-head temperature**
85
- before softmax — `temp_gender` and `temp_country` from the calibration file:
86
-
87
- | Variant | temp_gender | temp_country |
88
  |---|---|---|
89
- | cora | 1.0096479654312134 | 1.0 |
90
- | ultra | 1.0460342168807983 | 0.939997673034668 |
91
-
92
- **5. Decision rule.** Gender is reported as `male` when P(M) ≥ 0.5, otherwise
93
- `female`; the reported probability is the probability of the reported class.
94
- Countries are returned as the **top-k** codes (default 5, `--top`) sorted by
95
- probability.
96
-
97
- **6. Output.** One record per input name:
98
-
99
- {"name": "...", "gender": "male|female", "probability": 0.0-1.0,
100
- "countries": [{"code": "IT", "probability": 0.0-1.0}, ...], "model": "cora|ultra"}
101
-
102
- ## Loading and using the weights
103
-
104
- All files sit flat in this repository. Download them (for example with
105
- `huggingface_hub.snapshot_download("textpie/genderize")`) and run the reference
106
- driver from that directory:
107
-
108
- pip install torch numpy
109
- python genderize_infer.py --variant ultra --top 3 "Andrea Rossi"
110
-
111
- In Python:
112
 
113
  ```python
114
- from genderize_infer import Genderize
 
115
 
116
- model = Genderize("ultra") # or Genderize("cora"); pass models_dir=... if the files live elsewhere
117
- model.predict(["Andrea Rossi"], top=3)
118
- ```
119
 
120
- Output for the five names published with the examples (`--variant ultra`),
121
- reproduced locally against these exact weight files:
122
 
123
- | Input | Gender | P | Country top-3 |
124
- |---|---|---|---|
125
- | Andrea Rossi | male | 0.849 | IT 0.84, FR 0.05, US 0.02 |
126
- | Yuki Tanaka | female | 0.589 | JP 0.98, US 0.01, ID 0.00 |
127
- | María García | female | 0.995 | ES 0.42, MX 0.13, AR 0.09 |
128
- | Chen Wei | male | 0.692 | CN 0.56, TW 0.13, SG 0.09 |
129
- | Fatima Al Sayed | female | 0.996 | AE 0.35, OM 0.19, SA 0.14 |
130
-
131
- ## Benchmarks
132
 
133
- Source: **dbtool.it/benchmark**. These are **not** new measurements taken for
134
- this card and no re-measurement was performed here.
 
135
 
136
- - **Bench**: 25,000 names never seen in training, scored on the **network alone**.
137
- - The dictionary layer used by the hosted API does not contribute on unseen
138
- names, so these figures describe the released weights.
139
 
140
- | Metric | cora | ultra |
141
- |---|---|---|
142
- | Gender accuracy | 97.9 % | 98.2 % |
143
- | Country top-1 accuracy | 82.6 % | 83.7 % |
144
-
145
- Per-country figures for the full hosted system are on https://dbtool.it/academic; an
146
- independent open bench on public WGND 2.0 names (network alone, losses included) is
147
- on https://dbtool.it/benchmark.
148
-
149
- ## What this release does NOT include
150
-
151
- - **The dictionary layer of the API.** The hosted API combines the network with
152
- a proprietary frequency layer (exact-name and per-country M/F frequencies)
153
- derived from production data. That layer is **not part of this release**:
154
- you get the network alone. Consequence: **the public API can answer
155
- differently from the weights you download**, especially on very frequent
156
- names. Documented example: `Yuki Tanaka` scores *female 0.59* with the network
157
- alone (the value reproduced above), while the API with its dictionary layer
158
- answers *male 0.58*.
159
- - **Everything about how the models were trained**: no recipe, no epochs, no
160
- optimiser, no data split, no training hyperparameters, no data sources and no
161
- per-country counts. This release ships a usable model, not the process behind
162
- it, and no training example.
163
-
164
- ## Training data — nature only
165
-
166
- The models were trained on **name–gender–country pairs covering 226 countries,
167
- tens of millions of examples**. That is the whole description this release
168
- provides: the corpus is **not redistributed**, and its sources, composition and
169
- per-country sizes are not part of the package.
170
-
171
- ## Limitations
172
-
173
- - **East Asian names**: accuracy drops to roughly **82–88 %**; Chinese, Korean
174
- and Japanese names are frequently confused with one another.
175
- - **Names ambiguous across countries**: many names are plausible in several
176
- countries, so a top-1 of ~83 % means roughly one name in six gets the wrong
177
- country. `Andrea` is the classic case: male in Italy, female elsewhere. Treat
178
- the country score as a prior, and never as a single-country verdict.
179
- - **48-byte truncation**: only the first 48 UTF-8 bytes reach the model. Long
180
- names and long compounds are silently cut, and multi-byte characters consume
181
- more of the budget than plain ASCII.
182
- - **Empty or near-empty input**: an empty or fully-trimmed name is encoded as 48
183
- padding bytes and still returns a prediction. Validate your input.
184
- - **Binary gender**: the gender head has two classes; names that do not fit them
185
- are forced into the closer one.
186
- - **Transliteration**: results depend on how the name was romanised upstream;
187
- different romanisations of the same name can disagree.
188
- - **Dictionary gap**: the released weights are the network alone, so for very
189
- frequent names they can differ from the hosted API (see above).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
191
  ## Licence
192
 
193
- Two licences, one per artefact:
 
 
 
 
 
194
 
195
- - **Weights** — `genderize_cora.pt`, `genderize_ultra.pt`, their `.config.json`
196
- and `.calibration.json`, and `maps.json` — are released under **Creative
197
- Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)**, full
198
- text in `LICENSE`. You may download, run, study, modify and redistribute them
199
- and their derivatives **for non-commercial purposes**, with attribution
200
- (*dbtool.it, genderize cora/ultra, 2026*) and an indication of changes.
201
- - **Inference code** — `genderize_infer.py` — is released under the **MIT License**,
202
- full text in `LICENSE-CODE`. It can be reused freely; it carries no model
203
- knowledge.
204
 
205
- **Commercial use of the weights is not granted by this licence.** The commercial
206
- channel is **dbtool.it** (the hosted API and the on-premise licence), or a
207
- separate written licence from the rights holder. What counts as commercial use,
208
- and how to request a licence, is set out in **`COMMERCIAL_USE.md`**.
209
 
210
- The training data is **not** part of this release, and neither is the dictionary
211
- layer of the hosted API (see above).
212
 
213
- ## Contact
 
 
 
 
 
214
 
215
- dbtool — https://dbtool.it — open-weights page: https://dbtool.it/open-models.html
216
- Domenico Gigante, d.gigante@tech-time.it
 
8
  - gender-detection
9
  - nationality
10
  - name-analysis
11
+ - character-level
12
  - cpu
13
  pipeline_tag: text-classification
14
  ---
15
 
16
+ # Genderize v2
17
 
18
+ Genderize v2 estimates a **binary gender** (M/F) and a **likely country** (226
19
+ ISO-3166 alpha-2 codes) from a personal name, with probabilities. It is a
20
+ character-level classifier designed for **CPU inference** — no tokenizer, no
21
+ vocabulary file. It supersedes `genderize v1 (cora/ultra)`, which remains
22
+ available in this repository under the git tag **`v1`**.
23
 
24
+ > **Read the limitations before using this model.** It is measurably **weaker
25
+ > than v1 in Togo, Chad and Samoa**, and it does not improve Arabic and Hebrew.
26
+ > It is intended for **aggregate statistical analyses**, not for decisions
27
+ > about individual people.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
+ ## Package contents
30
 
31
+ | File | What it is | Licence |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  |---|---|---|
33
+ | `genderize_fuso_v2/fuso.json` | fusion configuration (thresholds, weights) | CC BY-NC 4.0 |
34
+ | `genderize_fuso_v2/v1/` | internal network A: the v1 `ultra` weights, configs, calibration, class map | CC BY-NC 4.0 |
35
+ | `genderize_fuso_v2/v2/` | internal network B (codepoint-level, distilled lineage), weights, configs, calibration, class map | CC BY-NC 4.0 |
36
+ | `genderize_fuso_v2/country_prior.json` | empirical country prior used by the country head | CC BY-NC 4.0 |
37
+ | `genderize_fuso_v2/dom113_rimedio.json` | configuration of the Latin-script country-trait rule (see below) | CC BY-NC 4.0 |
38
+ | `genderize_fuso_v2/SHA256SUMS` | SHA-256 of every file in the model directory | CC BY-NC 4.0 |
39
+ | `inference.py` | inference module for network A (byte-level model) | MIT |
40
+ | `inference_fuso.py` | the Genderize v2 class `GenderizeFuso` (imports `inference.py`) | MIT |
41
+ | `examples.txt` | example outputs reproduced with exactly these files | — |
42
+ | `LICENSE` | CC BY-NC 4.0 (weights and model artifacts) | — |
43
+ | `LICENSE-CODE` | MIT (inference code) | — |
44
+ | `COMMERCIAL_USE.md` | what counts as non-commercial use, and how to obtain a commercial licence | — |
45
+
46
+ Training data is **not** distributed with this package (see *Data provenance*).
47
+
48
+ ## Quickstart
49
+
50
+ Requires Python 3.10+, `torch`, and `anyascii` (ISC licence; only invoked for
51
+ non-Latin scripts that benefit from transliteration).
 
 
 
 
52
 
53
  ```python
54
+ import sys
55
+ from huggingface_hub import snapshot_download
56
 
57
+ path = snapshot_download("textpie/genderize")
58
+ sys.path.insert(0, path) # inference_fuso.py + inference.py live at repo root
 
59
 
60
+ from inference_fuso import GenderizeFuso # the class documented in the file header
 
61
 
62
+ model = GenderizeFuso(f"{path}/genderize_fuso_v2")
63
+ print(model.predict(["Andrea Rossi", "Yuki Tanaka"]))
64
+ # -> [{'gender': 'M', 'p_male': 0.7937, 'country': 'IT', 'p_country': 0.8262, 'top5': ['IT', 'FR', 'US', 'CH', 'DE']},
65
+ # {'gender': 'F', 'p_male': 0.5037, 'country': 'JP', 'p_country': 0.9809, 'top5': ['JP', 'US', 'ID', 'DE', 'CN']}]
66
+ ```
 
 
 
 
67
 
68
+ `predict()` returns one dict per name: `gender` (`'M'` if p(M) ≥ 0.60, else
69
+ `'F'`), `p_male`, `country` (argmax of the adjusted country distribution),
70
+ `p_country`, and `top5` (top-5 country codes).
71
 
72
+ ## How it works
 
 
73
 
74
+ - **Two internal networks, one fused output.** Network A is the v1 `ultra`
75
+ byte-level CNN (UTF-8 bytes, 48-byte truncation). Network B reads the name
76
+ as Unicode codepoints (32 max, its own 226-country map). Gender probability
77
+ is the plain average of the two calibrated p(M); the country distribution is
78
+ 0.7 × A + 0.3 × B.
79
+ - **Calibration and threshold.** Each network ships per-head temperature
80
+ calibration files. The operating threshold M ≥ **0.60** was chosen on three
81
+ frozen benches and then verified — without retuning — on six fresh,
82
+ never-touched sets.
83
+ - **Script-aware routing (T1).** The Unicode script of the name is detected
84
+ from character blocks; for measured scripts the model classifies the native
85
+ form, an `anyascii` transliteration, or the average of both (rule fixed on a
86
+ validation half only, no learned parameters). Latin and unmapped scripts
87
+ stay native. The country head always reads the original form.
88
+ - **Country prior.** The country distribution is adjusted with a logit term
89
+ `log p(c) − 0.75 · log π(c)`, where `π` is the empirical prior in
90
+ `country_prior.json` (coefficient fixed on validation only).
91
+ - **Per-country gender selector + Latin-script trait rule.** For a small set
92
+ of countries where v2.2 measured regressions (AM, GE, MM, TG, TD, WS), part
93
+ of the gender decision falls back to the v1 branch under rules fixed on old
94
+ benches and on a frozen validation bench — never on the 226-v2 test bench
95
+ (configuration in `dom113_rimedio.json`).
96
+
97
+ ## Results (gender accuracy, measured)
98
+
99
+ v1 = `genderize-ultra` (calibrated, threshold 0.50). v2 = this release
100
+ (threshold 0.60). All numbers are point measurements on frozen benches; they
101
+ do not generalize beyond the named benches.
102
+
103
+ ### Independent bench: 226-countries v2 (50,258 rows, Latin script)
104
+
105
+ Built with explicit exclusions against the training corpora and all earlier
106
+ benches; **no overlap with training** (full = residual by construction).
107
+ Paired bootstrap, 2,000 resamples, seed 20260927.
108
+
109
+ | Group | n | v2 | v1 |
110
+ |---|---:|---:|---:|
111
+ | All | 50,258 | **94.08 %** | 93.71 % |
112
+ | Women (F) | 20,648 | **92.98 %** | 90.30 % |
113
+ | Men (M) | 29,610 | 94.86 % | **96.09 %** |
114
+
115
+ Per country (countries with ≥ 400 bench rows): **14 countries significantly
116
+ above v1, 94 statistically par, 1 below**. With the pre-registered criterion
117
+ (≥ 200 rows): **14 above, 106 par, 3 below**. Countries above v1: AZ, DZ,
118
+ EG, ET, HK, JM, LK, MY, NG, NP, SG, SY, UY, ZA. "Par" means the confidence
119
+ interval includes zero — it is not proof of equivalence; no multiple-comparison
120
+ correction is applied.
121
+
122
+ ### Where v2 is **worse than v1** (all measured deltas, IC95 in percentage points)
123
+
124
+ | Country | n | Δ (v2 − v1) | IC95 |
125
+ |---|---:|---:|---|
126
+ | **Togo (TG)** | 400 | **−2.00** | [−3.50, −0.50] |
127
+ | **Chad (TD)** | 207 | **−2.42** | [−4.83, −0.48] |
128
+ | **Samoa (WS)** | 210 | **−4.76** | [−9.05, −0.95] |
129
+ | Armenia (AM) | 400 | −0.25 | [−0.75, 0.00] |
130
+ | Georgia (GE) | 400 | −0.25 | [−0.75, 0.00] |
131
+ | Myanmar (MM) | 400 | −1.25 | [−3.50, +0.75] |
132
+
133
+ TG is the only country below v1 at the ≥ 400-row quota; TD and WS are also
134
+ below at the pre-registered ≥ 200-row criterion; AM, GE and MM measure
135
+ statistically par. Without the Latin-script trait rule, deltas down to
136
+ −7.3 pp were measured on the same bench. **If your
137
+ analysis focuses on these countries, use v1.**
138
+
139
+ ### Other frozen benches
140
+
141
+ | Bench | n | v2 | v1 | Notes |
142
+ |---|---:|---:|---:|---|
143
+ | Native scripts (with T1 routing) | 16,945 | **88.70 %** | 83.84 % | release path (v2.2 verdict) |
144
+ | Native scripts + routing (T1) | 6,072 | **85.82 %** | 74.31 % | half-test split; largest gains: Georgian 50.9→92.3, Bengali 62.5→87.7, Armenian 67.5→90.8, Kazakh 93.1→97.5, Hindi 83.8→87.3 |
145
+ | East-Asian | 5,199 | **80.96 %** | 79.75 % | women 79.3 vs 69.3 |
146
+ | Old 226 bench (Wikidata) | 39,164 | 92.63 % | 92.14 % | **not independent: 34 % of this bench is inside v1's training data** (v1 residual: 90.41 %); kept for continuity with v1's history |
147
+
148
+ Six fresh, never-touched sets (v2 / v1): Olympians 96.20 / 96.07; Vietnamese
149
+ 80.32 / 76.58; Tajik-Latin 79.09 / 76.13; Tajik-Cyrillic 72.12 / 67.65;
150
+ Persian-Latin 77.57 / 74.07; Persian-script 67.29 / 64.59.
151
+
152
+ ### Country (nationality) output
153
+
154
+ The country head is a **coarse signal**: on the old 226 bench, top-1 ≈ 28.4 %
155
+ (v1: 28.1 %; v1 top-5 ≈ 56.3 %). Use `top5` and the probability, not the
156
+ argmax alone.
157
+
158
+ ### Persian dedicated branch: tested and **rejected**
159
+
160
+ A dedicated Persian transliteration branch (beam over k readings, < 5 MB) was
161
+ integrated and measured on the only available native-Persian bench (n = 1,000;
162
+ **not fresh** — already used by earlier experiments): +2.5 pp over the direct
163
+ branch, IC95 [−0.4, +5.6] — the interval crosses zero, so the gain is **not
164
+ confirmed** and the branch is **not part of this release**. It will be
165
+ reconsidered only if an independent, fresh native-Persian bench becomes
166
+ available (none found as of 2026-09-28).
167
+
168
+ ### Speed
169
+
170
+ 198.8 names/s with script routing (189.6 without), single CPU, 8 threads,
171
+ batch 256, measured back-to-back on the bench machine. Throughput varies with
172
+ hardware and load; no latency promise is made.
173
+
174
+ ## Limitations and honest notes
175
+
176
+ - **Weaker than v1 in Togo, Chad, Samoa** (deltas above) — the headline
177
+ limitation of this release. Armenia, Georgia and Myanmar measure slightly
178
+ below v1 (statistically par).
179
+ - **Women with non-Latin-script names remain weak**: on Persian-script and
180
+ Cyrillic names female accuracy stays around 29–35 %, as low as 19.9 % on
181
+ Persian-script names in the fresh sets. The aggregate gains do not fix this.
182
+ - **Arabic and Hebrew: no gain.** Transliteration does not help these scripts
183
+ (measured: routing leaves them at the native branch); v2 is at best par with
184
+ v1 there. Thai likewise stays native.
185
+ - **The model does not condition gender on country**: e.g. "Andrea Costa" is
186
+ classified F with p(M) = 0.44 (Andrea is a male name in Italian, female in
187
+ Spanish).
188
+ - **No built-in abstention**: the model always answers. Probabilities are
189
+ temperature-calibrated per network; the 0.60 threshold was fixed before the
190
+ fresh-set verification. For analyses, use `p_male` (and a margin you choose)
191
+ rather than the hard label.
192
+ - **Binary output only**: the model returns M/F. It cannot represent
193
+ non-binary identities, and name-inferred gender is a *perceived-attribute
194
+ proxy*, not a statement about any person's identity.
195
+ - Bench numbers are specific to the named frozen benches; several are
196
+ Wikidata-derived and may share source characteristics with the training
197
+ corpora (the independent 226-v2 bench was built with explicit exclusions;
198
+ the old 226 bench overlaps v1 training by 34 %, as declared above).
199
+
200
+ ## Data provenance
201
+
202
+ - Trained on **aggregated public name records with gender and country signals**
203
+ (Wikidata-derived corpora, Olympian records, per-country name lists),
204
+ internally reviewed. Training corpora, splits and recipes are **private and
205
+ not redistributed** with this package.
206
+ - **No LLM-generated labels were used in the training of this model.** An
207
+ LLM second-opinion cascade was explored in research and measured, but it is
208
+ **not part of this release**.
209
+ - A small fraction of the network-B corpus (**8,708 rows, ≈ 1.21 %**) comes
210
+ from a GFDL-1.3-licensed public dataset; this is disclosed for transparency
211
+ about obligations.
212
+ - WGND and IPUMS were never used in training.
213
+ - Bench sources: Wikidata (CC0), Olympian and public record compilations;
214
+ bench row-level data is not redistributed.
215
 
216
  ## Licence
217
 
218
+ - **Weights and model artifacts** (everything under `genderize_fuso_v2/`):
219
+ **CC BY-NC 4.0** — see `LICENSE`; commercial use requires a separate
220
+ licence (see `COMMERCIAL_USE.md`).
221
+ - **Inference code** (`inference.py`, `inference_fuso.py`): **MIT** — see
222
+ `LICENSE-CODE`.
223
+ - Runtime dependency `anyascii`: ISC licence (third-party).
224
 
225
+ ## Intended use
 
 
 
 
 
 
 
 
226
 
227
+ Aggregate, statistical analyses: bibliometrics and authorship studies,
228
+ name-collection demography, dataset documentation. **Not** intended for
229
+ decisions about individual people (hiring, credit, identity verification,
230
+ content moderation), nor as ground truth about anyone's gender.
231
 
232
+ ## Version history
 
233
 
234
+ - **v2** (this release): fused two-network model, script-aware routing,
235
+ country prior, per-country selector. 14 above, 94 par, 1 below at ≥ 400 rows
236
+ (3 below at ≥ 200) on the independent 226-v2 bench (see above).
237
+ - **v1** (`cora` / `ultra`): preserved in this repository at git tag **`v1`**.
238
+
239
+ ---
240
 
241
+ Support this work: https://github.com/sponsors/sheppard94g
 
examples.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ # Genderize v2 - example outputs, reproduced with exactly the packaged files
2
+ # (CPU inference, deterministic; regenerate with the README quickstart)
3
+
4
+ Andrea Rossi M p_male 0.7937 IT 0.8262 top5 IT FR US CH DE
5
+ Yuki Tanaka F p_male 0.5037 JP 0.9809 top5 JP US ID DE CN
6
+ María García F p_male 0.0041 ES 0.4072 top5 ES MX CO PE AR
7
+ Chen Wei M p_male 0.7927 CN 0.4280 top5 CN TW SG MY HK
8
+ Fatima Al Sayed F p_male 0.0089 AE 0.2588 top5 AE OM SA EG SY
9
+ ნინო ალექსიძე F p_male 0.5304 GE 0.9764 top5 GE RU FR GR RS
10
+ Andrea Costa F p_male 0.4408 IT 0.3496 top5 IT US BR FR AR # known error: Andrea is a male name in Italian (no country conditioning)
genderize_fuso_v2/SHA256SUMS ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 66ca7529702dab8241a9b275c30b3d24bf79c3fea81a8e6df4e01365c9987876 v1/genderize_ultra.calibration.json
2
+ 9105ba4cbe101b66215d68d6cb990872e5aada69fa244d3fe93ef93bbb68121a v1/genderize_ultra.config.json
3
+ e0b61d9a547aa1b11acad39af573ad63897578e35aa609c26b3de33156303b83 v1/genderize_ultra.pt
4
+ 79c5ae965c32da45899aa7aef1ce31192aa3daef16c8d2c46762a3550cdbc5e2 v1/maps.json
5
+ a77c0a9a459b11c2dc7558eb55e359f145ecc4afdcf1b1f30f9908b78d3835f2 v2/genderize_ultra.calibration.json
6
+ 2daac90aba1db7980562bb683f1daa11d120bf6b78c92f44f956a93f0c2afbdd v2/genderize_ultra.config.json
7
+ 079f974d050ac27c7ffb3e15e7bd0dd2a6eb450d6d6a759f02acaf5d67ab33c8 v2/genderize_ultra.pt
8
+ 2d4992a18e70435622e2f480814c0aaf28e9a32c555655a62f5c217fd18a4320 v2/maps.json
9
+ fcb8bafbf58f1c49367c58b943641c2a426a8d486b4ab654672dec0fc7b24c7c fuso.json
10
+ 120adde865c64296bf17f77f69419beb7d0fa647f1ce4fe80cefb00795930137 country_prior.json
11
+ b68edafb32abcc05b3ec68c498722ef2ba281953bc00175cdafa976876e0516e dom113_rimedio.json
genderize_fuso_v2/country_prior.json ADDED
@@ -0,0 +1,297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "beta": 0.75,
3
+ "fonte_prior": "conteggio empirico delle righe train (split=0) del corpus D2 precomputed G2D1; floor(counts,1); normalizzato a somma 1; identico a DOM-105 (reports/trainer/dom105/protocol.json)",
4
+ "input_sha256": {
5
+ "data/nomi_v2/banchi_overlap_wikidata.manifest.json": "567b447133681b75b18dd0f5da1f7e50478281759d3c7bbfb1e88504653b89d8",
6
+ "data/nomi_v2/banchi_overlap_wikidata_226.txt": "45eb3f3647e3563550cabab315244cffa53bbd3d8a0691605c1a87cb6427195c",
7
+ "data/nomi_v2/banchi_overlap_wikidata_nativo.txt": "2ca053efb5533afaf64d154380728d6306f61b426b04ec8c08cc2f60c1bdc751",
8
+ "data/nomi_v2/precomputed_v2_G2D1/manifest.json": "efa8485962b2b35bd8186a38b03cb4872bd7200d7c7a8c9b9612c927a147d8d3",
9
+ "data/nomi_v2/test_226_paesi.FROZEN.json": "b8dad3c5ba75d2acc36d93d0d846212d8af48833bc0ec36b83182ba6cdbc329a",
10
+ "data/nomi_v2/test_226_paesi.tsv": "0841f58d64ee224c60cb87a94d33131450a397e872e5cff9e70ee0d14eab12c6",
11
+ "data/nomi_v2/test_nativo_v1.FROZEN.json": "1782cdc371774d0d32be970e4fec89127ceef9ce044c5162960f8387885a338b",
12
+ "data/nomi_v2/test_nativo_v1.tsv": "a3c07f812446111ce9ba9dd35e562b3805b9dec9d930c25527edfe1b88154ce2",
13
+ "models/genderize_fuso_v2/v2/maps.json": "2d4992a18e70435622e2f480814c0aaf28e9a32c555655a62f5c217fd18a4320",
14
+ "release/inference.py": "35707c40dca9f4fe99da0ca1131d00808693b868b1a52c15aeb588ba2d1c2374",
15
+ "release/inference_fuso.py": "e50de64632785dc36f9afb65a04cda51edf82ce51ff7aa3bdc0e58f9dddf733e",
16
+ "reports/trainer/dom105/protocol.json": "61b14fb59526799ec127ff4ea8875c3f16890efa8888115d51dfb998cfd6a9dd",
17
+ "reports/trainer/genderize_D2.json": "7d2ef64c00f40d4c938780d653c61d7c85c44dfa5bff0133683b2db6bf6971ae",
18
+ "scripts/dom112_prepara.py": "74d78bc2199afffa8dedab5c20f6359c3a40c68f7e2254944834249fa8431f63"
19
+ },
20
+ "logit_adjustment": "log(p_c fusa 0,7v1+0,3v2) - beta*log(prior) in float64; argmax per il paese; p_c restituita rinormalizzata",
21
+ "prior": {
22
+ "AD": 1.6018768417489172e-05,
23
+ "AE": 0.009082800189765346,
24
+ "AF": 0.004839083969052669,
25
+ "AG": 6.022887861457011e-06,
26
+ "AI": 3.1699409797142164e-08,
27
+ "AL": 0.004687127564955102,
28
+ "AM": 0.00015520031036680802,
29
+ "AO": 0.005032661698213884,
30
+ "AR": 0.003951648425311742,
31
+ "AT": 0.012980168659034449,
32
+ "AU": 0.0009517325132794639,
33
+ "AX": 1.056646993238072e-08,
34
+ "AZ": 0.0010330097999993364,
35
+ "BA": 0.00013108762598111522,
36
+ "BB": 1.7857334185723418e-05,
37
+ "BD": 0.00588676002931815,
38
+ "BE": 0.007814792098469863,
39
+ "BF": 9.130486668570181e-05,
40
+ "BG": 0.0036473657906689744,
41
+ "BH": 0.009432265049838974,
42
+ "BI": 0.00018035907527580653,
43
+ "BJ": 4.985260514097224e-05,
44
+ "BM": 3.8461950553865825e-06,
45
+ "BN": 0.0021134947494048594,
46
+ "BO": 0.0056805553685877405,
47
+ "BR": 0.024410806768364993,
48
+ "BS": 1.3229220355340662e-05,
49
+ "BT": 1.5638375499923466e-06,
50
+ "BW": 0.002517968651946461,
51
+ "BY": 0.00022349140553978462,
52
+ "BZ": 9.795117627316928e-06,
53
+ "CA": 0.0095114713084521,
54
+ "CC": 1.056646993238072e-08,
55
+ "CD": 2.7620752403243204e-05,
56
+ "CF": 2.5031967269809928e-05,
57
+ "CG": 0.00013044307131524,
58
+ "CH": 0.0054746994013650995,
59
+ "CI": 0.00012076418485717926,
60
+ "CK": 3.592599777009445e-07,
61
+ "CL": 0.009715626074015628,
62
+ "CM": 0.0022206070551094026,
63
+ "CN": 0.006705333888509752,
64
+ "CO": 0.014075256469886522,
65
+ "CR": 0.0022267567406100484,
66
+ "CU": 0.00013013664368720097,
67
+ "CV": 3.5418807213340175e-05,
68
+ "CY": 0.001162163761982826,
69
+ "CZ": 0.012321317559340714,
70
+ "DE": 0.028080351579422038,
71
+ "DJ": 0.00015622525795024896,
72
+ "DK": 0.04178221013483809,
73
+ "DM": 1.7931299475250084e-05,
74
+ "DO": 8.341171364621342e-05,
75
+ "DZ": 0.01379913347761355,
76
+ "EC": 0.0030637373904238577,
77
+ "EE": 0.0014430944980750322,
78
+ "EG": 0.016905295244815915,
79
+ "EH": 1.056646993238072e-08,
80
+ "ER": 2.19782574593519e-06,
81
+ "ES": 0.02531284517355247,
82
+ "ET": 0.00018132062403965318,
83
+ "FI": 0.01249439633683311,
84
+ "FJ": 8.314755189790389e-05,
85
+ "FK": 2.113293986476144e-08,
86
+ "FM": 1.584970489857108e-07,
87
+ "FR": 0.13121066195700787,
88
+ "GA": 3.0980889841740275e-05,
89
+ "GB": 0.020088793005453378,
90
+ "GD": 1.9230975276932913e-06,
91
+ "GE": 0.0010607362171019034,
92
+ "GG": 2.3246233851237586e-07,
93
+ "GH": 0.008657510341456955,
94
+ "GI": 6.022887861457011e-07,
95
+ "GM": 1.5849704898571083e-05,
96
+ "GN": 6.439206776792811e-05,
97
+ "GP": 2.113293986476144e-08,
98
+ "GQ": 7.5127601219226924e-06,
99
+ "GR": 0.006941209196810287,
100
+ "GT": 0.012013262694932086,
101
+ "GW": 2.8318139418780333e-06,
102
+ "GY": 2.5718787815414674e-05,
103
+ "HK": 0.004499319128376967,
104
+ "HN": 0.00020840248647634497,
105
+ "HR": 0.006172308312770807,
106
+ "HT": 0.0002759116628743254,
107
+ "HU": 0.004415062097136164,
108
+ "ID": 0.002526897319039323,
109
+ "IE": 0.009992869112101434,
110
+ "IL": 0.00652543973791097,
111
+ "IM": 1.32080874154759e-06,
112
+ "IN": 0.009942234588185465,
113
+ "IO": 1.056646993238072e-08,
114
+ "IQ": 0.008264268596453475,
115
+ "IR": 0.005549827002584326,
116
+ "IS": 0.0004136350319729757,
117
+ "IT": 0.026147839327018994,
118
+ "JE": 3.2756056790380236e-07,
119
+ "JM": 0.0034164884226464557,
120
+ "JO": 0.004354262629145245,
121
+ "JP": 0.007213306364039023,
122
+ "KE": 9.528842585020934e-05,
123
+ "KG": 8.074896322325347e-05,
124
+ "KH": 0.00015076239299520813,
125
+ "KI": 5.705893763485589e-07,
126
+ "KM": 6.931604275641753e-05,
127
+ "KN": 7.92485244928554e-07,
128
+ "KP": 3.280888914004214e-05,
129
+ "KR": 0.0013601160096960465,
130
+ "KW": 0.0054166260826167345,
131
+ "KY": 3.2439062692408815e-06,
132
+ "KZ": 0.0036071603725762657,
133
+ "LA": 7.856170394725067e-05,
134
+ "LB": 0.0018794157409928293,
135
+ "LC": 2.6733168928923223e-06,
136
+ "LI": 1.3662445622568272e-05,
137
+ "LK": 0.00022036373043979993,
138
+ "LR": 7.924852449285541e-06,
139
+ "LS": 5.093038507407508e-06,
140
+ "LT": 0.0024641430541109135,
141
+ "LU": 0.0019066666669484392,
142
+ "LV": 0.00021158299392599157,
143
+ "LY": 0.0036326889639328977,
144
+ "MA": 0.009109797520442579,
145
+ "MC": 4.66932306311904e-05,
146
+ "MD": 0.0005427995604263976,
147
+ "ME": 4.7369484706862775e-05,
148
+ "MF": 1.056646993238072e-08,
149
+ "MG": 0.0002446877442241404,
150
+ "MH": 2.958611581066602e-07,
151
+ "MK": 8.37498406840496e-05,
152
+ "ML": 9.601751227554361e-05,
153
+ "MM": 1.935777291612148e-05,
154
+ "MN": 7.022475917060227e-05,
155
+ "MO": 0.002936073300700834,
156
+ "MQ": 2.113293986476144e-08,
157
+ "MR": 2.0741980477263354e-05,
158
+ "MS": 4.226587972952288e-08,
159
+ "MT": 0.0009922654919400763,
160
+ "MU": 0.006129260514266288,
161
+ "MV": 0.0007628251638283614,
162
+ "MW": 6.635743117535093e-06,
163
+ "MX": 0.015855970815240983,
164
+ "MY": 0.016463384339303888,
165
+ "MZ": 2.8814763505602226e-05,
166
+ "NA": 0.00392767310503517,
167
+ "NC": 6.656876057399854e-07,
168
+ "NE": 2.0192524040779557e-05,
169
+ "NF": 1.056646993238072e-08,
170
+ "NG": 0.012092912745282373,
171
+ "NI": 2.9004959964385078e-05,
172
+ "NL": 0.031615416927649666,
173
+ "NO": 0.0064510517895870105,
174
+ "NP": 0.00010499901171806722,
175
+ "NR": 5.610795534094163e-06,
176
+ "NU": 7.079534854695083e-07,
177
+ "NZ": 0.0003920899997808514,
178
+ "OM": 0.00832257437754035,
179
+ "PA": 0.010601687976665346,
180
+ "PE": 0.009714622259372052,
181
+ "PG": 1.306015683642257e-05,
182
+ "PH": 0.009393602336356393,
183
+ "PK": 0.00033100523710175847,
184
+ "PL": 0.012986719870392524,
185
+ "PN": 3.1699409797142164e-08,
186
+ "PR": 0.0011925740624482177,
187
+ "PS": 0.0049637894471946265,
188
+ "PT": 0.011482868170206304,
189
+ "PW": 3.6559985966037293e-06,
190
+ "PY": 5.9753387467612976e-05,
191
+ "QA": 0.003826562554252219,
192
+ "RO": 0.0009560858988916048,
193
+ "RS": 0.0020051461667182275,
194
+ "RU": 0.01639605479289476,
195
+ "RW": 2.434514672420518e-05,
196
+ "SA": 0.015217618667216068,
197
+ "SB": 3.3918368482942115e-06,
198
+ "SC": 3.4658021378208765e-06,
199
+ "SD": 0.009402319674050608,
200
+ "SE": 0.010882100955730865,
201
+ "SG": 0.005591406061768244,
202
+ "SI": 0.002685711362123005,
203
+ "SK": 0.0005211382970650172,
204
+ "SL": 6.477246068549382e-06,
205
+ "SM": 1.860755355092245e-05,
206
+ "SN": 0.00017695667195757994,
207
+ "SO": 4.733778529706563e-06,
208
+ "SR": 4.397764785856856e-05,
209
+ "SS": 3.1910739195789777e-06,
210
+ "ST": 2.620484543230419e-06,
211
+ "SV": 7.73359934350945e-05,
212
+ "SX": 1.056646993238072e-08,
213
+ "SY": 0.006802143886030224,
214
+ "SZ": 1.4687393206009202e-06,
215
+ "TC": 4.226587972952288e-08,
216
+ "TD": 1.4634560856347299e-05,
217
+ "TG": 4.246664265823812e-05,
218
+ "TH": 0.0002867211616151509,
219
+ "TJ": 1.5194583762763476e-05,
220
+ "TK": 1.056646993238072e-08,
221
+ "TL": 1.628293016579869e-05,
222
+ "TM": 0.0001901330599632587,
223
+ "TN": 0.008768162414588845,
224
+ "TO": 3.328438028699927e-06,
225
+ "TR": 0.011724364840510865,
226
+ "TT": 4.0680909239665774e-05,
227
+ "TV": 4.015258574304674e-07,
228
+ "TW": 0.004903127343312829,
229
+ "TZ": 2.9121191133641267e-05,
230
+ "UA": 0.0015944697463263185,
231
+ "UG": 2.5602556646158488e-05,
232
+ "US": 0.07691355653366785,
233
+ "UY": 0.010733251093793418,
234
+ "UZ": 8.81877580556495e-05,
235
+ "VA": 2.64161748309518e-07,
236
+ "VC": 1.1411787526971178e-06,
237
+ "VE": 0.00023895015105085762,
238
+ "VG": 8.347511246580769e-07,
239
+ "VN": 0.0003747926885015442,
240
+ "VU": 9.192828841171227e-07,
241
+ "WF": 6.339881959428433e-08,
242
+ "WS": 5.219836146596077e-06,
243
+ "XK": 3.2428496222476435e-05,
244
+ "YE": 0.004594174328959949,
245
+ "ZA": 0.01396672825721104,
246
+ "ZM": 2.154503219212429e-05,
247
+ "ZW": 2.4408545543799467e-05
248
+ },
249
+ "selettore": {
250
+ "griglia": [
251
+ "v1@0.50",
252
+ "fuso@0.50",
253
+ "fuso@0.55",
254
+ "fuso@0.60",
255
+ "fuso@0.65",
256
+ "fuso@0.70"
257
+ ],
258
+ "insieme_S": [
259
+ "AM",
260
+ "GE",
261
+ "MM",
262
+ "TG",
263
+ "TD",
264
+ "WS"
265
+ ],
266
+ "min_righe_validazione": 30,
267
+ "regola": "massima accuratezza genere sulle righe a paese vero c dei banchi vecchi (residuo 226 v1 + nativo); n<30 -> v1@0,5; parimerito: prima v1@0,5 poi fuso a soglia crescente",
268
+ "scelte": {
269
+ "AM": {
270
+ "ramo": "v1",
271
+ "soglia": 0.5
272
+ },
273
+ "GE": {
274
+ "ramo": "fuso",
275
+ "soglia": 0.55
276
+ },
277
+ "MM": {
278
+ "ramo": "fuso",
279
+ "soglia": 0.7
280
+ },
281
+ "TD": {
282
+ "ramo": "v1",
283
+ "soglia": 0.5
284
+ },
285
+ "TG": {
286
+ "ramo": "fuso",
287
+ "soglia": 0.7
288
+ },
289
+ "WS": {
290
+ "ramo": "v1",
291
+ "soglia": 0.5
292
+ }
293
+ },
294
+ "validazione": "banchi VECCHI: residuo 226 v1 (39.164 righe meno 13.425 overlap v1 training) + nativo v1 (16.945 righe); il banco 226 v2 non è mai stato letto in questa fase"
295
+ },
296
+ "versione": "2.1"
297
+ }
genderize_fuso_v2/dom113_rimedio.json ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "ambito": "SOLO nomi di scritture latine (script_t1 = None): la validazione che ha scelto il rimedio è latina; sulle scritture native il ramo v1 leggerebbe byte fuori distribuzione e il trigger non è mai stato misurato",
3
+ "conseguenza": "se decisione v2.1 (taglio 0,60) != v1@0,50 e il trigger scatta: decisione e punteggio dal ramo v1, rimappati come il selettore DOM-112 (p_v1 + 0,60 - 0,50)",
4
+ "esclusi": {
5
+ "AM": "già pari col selettore DOM-112, non toccato",
6
+ "WS": "v1 peggiore del fuso sulla validazione (84,62 contro 85,71)"
7
+ },
8
+ "fonti": {
9
+ "residuo": "data/nomi_v2/test_226_paesi.tsv meno banchi_overlap_wikidata_226.txt",
10
+ "validazione": "data/nomi_v2/validazione_dom113_ge_mm_tg_td_ws.tsv (FROZEN, DOM-113)"
11
+ },
12
+ "lessico": {
13
+ "GE": [
14
+ "Abramidze",
15
+ "Abuladze",
16
+ "Aleksandre",
17
+ "Andria",
18
+ "Badri",
19
+ "Bakradze",
20
+ "Beka",
21
+ "Beridze",
22
+ "Berishvili",
23
+ "Beruashvili",
24
+ "Buba",
25
+ "Chagelishvili",
26
+ "Chechelashvili",
27
+ "Chkareuli",
28
+ "Davit",
29
+ "Elene",
30
+ "Emzar",
31
+ "Gagnidze",
32
+ "Gelashvili",
33
+ "Gocha",
34
+ "Gogi",
35
+ "Iashvili",
36
+ "Imnadze",
37
+ "Jgerenaia",
38
+ "Jordania",
39
+ "Kakhaber",
40
+ "Kavtaradze",
41
+ "Keso",
42
+ "Khaindrava",
43
+ "Khubua",
44
+ "Kiladze",
45
+ "Lasha",
46
+ "Leonid",
47
+ "Levan",
48
+ "Lizi",
49
+ "Losaberidze",
50
+ "Mamatsashvili",
51
+ "Mamuka",
52
+ "Mariami",
53
+ "Markoishvili",
54
+ "Mate",
55
+ "Meladze",
56
+ "Merab",
57
+ "Merabi",
58
+ "Mikheil",
59
+ "Mushkudiani",
60
+ "Natali",
61
+ "Nika",
62
+ "Nikoloz",
63
+ "Nikolozi",
64
+ "Nini",
65
+ "Nodar",
66
+ "Nozadze",
67
+ "Nugzar",
68
+ "Nutsubidze",
69
+ "Ormotsadze",
70
+ "Pitskhelauri",
71
+ "Ramaz",
72
+ "Revaz",
73
+ "Shalva",
74
+ "Shengelia",
75
+ "Shota",
76
+ "Tarba",
77
+ "Tato",
78
+ "Teimuraz",
79
+ "Tekla",
80
+ "Tornike",
81
+ "Tsertsvadze",
82
+ "Ugrekhelidze",
83
+ "Vakhtang",
84
+ "Vano",
85
+ "Vasadze",
86
+ "Vladimer",
87
+ "Vyacheslav",
88
+ "Zaza",
89
+ "Zodelava",
90
+ "Zurab"
91
+ ],
92
+ "MM": [
93
+ "Aike",
94
+ "Bai",
95
+ "Bay",
96
+ "Chit",
97
+ "Hein",
98
+ "Hlaing",
99
+ "Htan",
100
+ "Htet",
101
+ "Htike",
102
+ "Htin",
103
+ "Htoo",
104
+ "Htun",
105
+ "Htut",
106
+ "Kan",
107
+ "Khaing",
108
+ "Kham",
109
+ "Khat",
110
+ "Khun",
111
+ "Kyaing",
112
+ "Kyauk",
113
+ "Kyu",
114
+ "Latt",
115
+ "Law",
116
+ "Lay",
117
+ "Linn",
118
+ "Mann",
119
+ "Maw",
120
+ "Moon",
121
+ "Nyan",
122
+ "Nyein",
123
+ "Nyi",
124
+ "Nyo",
125
+ "Nyunt",
126
+ "Ohn",
127
+ "Phyo",
128
+ "Pyae",
129
+ "Ral",
130
+ "Saw",
131
+ "Sein",
132
+ "Shwe",
133
+ "Swe",
134
+ "Tha",
135
+ "Thant",
136
+ "Thar",
137
+ "Thaung",
138
+ "Thaw",
139
+ "Thura",
140
+ "Tint",
141
+ "Wunna",
142
+ "Yone"
143
+ ],
144
+ "TD": [
145
+ "Allasra",
146
+ "Timothee"
147
+ ],
148
+ "TG": [
149
+ "Akakpo",
150
+ "Coubageat",
151
+ "Dadzie",
152
+ "Eninful",
153
+ "Kodjovi",
154
+ "Lawson",
155
+ "Segbefia"
156
+ ]
157
+ },
158
+ "onorifici_mm": [
159
+ "Maung",
160
+ "Mg",
161
+ "Sao",
162
+ "Saw",
163
+ "U"
164
+ ],
165
+ "paesi_attivi": [
166
+ "GE",
167
+ "MM",
168
+ "TG",
169
+ "TD"
170
+ ],
171
+ "regola_lessico": "token esatto, qualsiasi posizione, supporto>=2 in validazione, lunghezza>=3, non più frequente negli altri paesi S, <=3 occorrenze nel residuo 226 v1",
172
+ "regola_massa": "somma delle p_paese AGGIUSTATE (logit β=0,75) su {GE MM TG TD WS} >= tau e paese S con p massima tra quelli attivi",
173
+ "regola_onorifici": "primo token onorifico birmano e nome di almeno 2 token (onorifici presenti come primo token nella validazione MM)",
174
+ "tau_massa": 0.15,
175
+ "versione": "dom113"
176
+ }
genderize_fuso_v2/fuso.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"nome":"genderize v2 fuso","v1":"release/pesi ultra","v2":"models/genderize_D2","soglia_M":0.60,"peso_paese_v1":0.7,"decisione":"DECISIONI 25/09"}
genderize_fuso_v2/v1/genderize_ultra.calibration.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"temp_gender": 1.0460342168807983, "temp_country": 0.939997673034668, "ece_gender_pre": 0.0012399105666638377, "ece_gender_post": 0.0007778512481309008}
genderize_fuso_v2/v1/genderize_ultra.config.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"ch": 384}
genderize_fuso_v2/v1/genderize_ultra.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e0b61d9a547aa1b11acad39af573ad63897578e35aa609c26b3de33156303b83
3
+ size 12868705
genderize_fuso_v2/v1/maps.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"gender": {"M": 0, "F": 1}, "country": {"AD": 0, "AE": 1, "AF": 2, "AG": 3, "AI": 4, "AL": 5, "AM": 6, "AO": 7, "AR": 8, "AT": 9, "AU": 10, "AX": 11, "AZ": 12, "BA": 13, "BB": 14, "BD": 15, "BE": 16, "BF": 17, "BG": 18, "BH": 19, "BI": 20, "BJ": 21, "BM": 22, "BN": 23, "BO": 24, "BR": 25, "BS": 26, "BT": 27, "BW": 28, "BY": 29, "BZ": 30, "CA": 31, "CC": 32, "CD": 33, "CF": 34, "CG": 35, "CH": 36, "CI": 37, "CK": 38, "CL": 39, "CM": 40, "CN": 41, "CO": 42, "CR": 43, "CU": 44, "CV": 45, "CY": 46, "CZ": 47, "DE": 48, "DJ": 49, "DK": 50, "DM": 51, "DO": 52, "DZ": 53, "EC": 54, "EE": 55, "EG": 56, "EH": 57, "ER": 58, "ES": 59, "ET": 60, "FI": 61, "FJ": 62, "FK": 63, "FM": 64, "FR": 65, "GA": 66, "GB": 67, "GD": 68, "GE": 69, "GG": 70, "GH": 71, "GI": 72, "GM": 73, "GN": 74, "GP": 75, "GQ": 76, "GR": 77, "GT": 78, "GW": 79, "GY": 80, "HK": 81, "HN": 82, "HR": 83, "HT": 84, "HU": 85, "ID": 86, "IE": 87, "IL": 88, "IM": 89, "IN": 90, "IO": 91, "IQ": 92, "IR": 93, "IS": 94, "IT": 95, "JE": 96, "JM": 97, "JO": 98, "JP": 99, "KE": 100, "KG": 101, "KH": 102, "KI": 103, "KM": 104, "KN": 105, "KP": 106, "KR": 107, "KW": 108, "KY": 109, "KZ": 110, "LA": 111, "LB": 112, "LC": 113, "LI": 114, "LK": 115, "LR": 116, "LS": 117, "LT": 118, "LU": 119, "LV": 120, "LY": 121, "MA": 122, "MC": 123, "MD": 124, "ME": 125, "MF": 126, "MG": 127, "MH": 128, "MK": 129, "ML": 130, "MM": 131, "MN": 132, "MO": 133, "MQ": 134, "MR": 135, "MS": 136, "MT": 137, "MU": 138, "MV": 139, "MW": 140, "MX": 141, "MY": 142, "MZ": 143, "NA": 144, "NC": 145, "NE": 146, "NF": 147, "NG": 148, "NI": 149, "NL": 150, "NO": 151, "NP": 152, "NR": 153, "NU": 154, "NZ": 155, "OM": 156, "PA": 157, "PE": 158, "PG": 159, "PH": 160, "PK": 161, "PL": 162, "PN": 163, "PR": 164, "PS": 165, "PT": 166, "PW": 167, "PY": 168, "QA": 169, "RO": 170, "RS": 171, "RU": 172, "RW": 173, "SA": 174, "SB": 175, "SC": 176, "SD": 177, "SE": 178, "SG": 179, "SI": 180, "SK": 181, "SL": 182, "SM": 183, "SN": 184, "SO": 185, "SR": 186, "SS": 187, "ST": 188, "SV": 189, "SX": 190, "SY": 191, "SZ": 192, "TC": 193, "TD": 194, "TG": 195, "TH": 196, "TJ": 197, "TK": 198, "TL": 199, "TM": 200, "TN": 201, "TO": 202, "TR": 203, "TT": 204, "TV": 205, "TW": 206, "TZ": 207, "UA": 208, "UG": 209, "US": 210, "UY": 211, "UZ": 212, "VA": 213, "VC": 214, "VE": 215, "VG": 216, "VN": 217, "VU": 218, "WF": 219, "WS": 220, "XK": 221, "YE": 222, "ZA": 223, "ZM": 224, "ZW": 225}}
genderize_fuso_v2/v2/genderize_ultra.calibration.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "temp_gender": 1.0,
3
+ "temp_country": 1.0
4
+ }
genderize_fuso_v2/v2/genderize_ultra.config.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "ch": 384,
3
+ "maxlen": 32
4
+ }
genderize_fuso_v2/v2/genderize_ultra.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:079f974d050ac27c7ffb3e15e7bd0dd2a6eb450d6d6a759f02acaf5d67ab33c8
3
+ size 14099084
genderize_fuso_v2/v2/maps.json ADDED
@@ -0,0 +1,5298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "gender": {
3
+ "M": 0,
4
+ "F": 1
5
+ },
6
+ "country": {
7
+ "AD": 0,
8
+ "AE": 1,
9
+ "AF": 2,
10
+ "AG": 3,
11
+ "AI": 4,
12
+ "AL": 5,
13
+ "AM": 6,
14
+ "AO": 7,
15
+ "AR": 8,
16
+ "AT": 9,
17
+ "AU": 10,
18
+ "AX": 11,
19
+ "AZ": 12,
20
+ "BA": 13,
21
+ "BB": 14,
22
+ "BD": 15,
23
+ "BE": 16,
24
+ "BF": 17,
25
+ "BG": 18,
26
+ "BH": 19,
27
+ "BI": 20,
28
+ "BJ": 21,
29
+ "BM": 22,
30
+ "BN": 23,
31
+ "BO": 24,
32
+ "BR": 25,
33
+ "BS": 26,
34
+ "BT": 27,
35
+ "BW": 28,
36
+ "BY": 29,
37
+ "BZ": 30,
38
+ "CA": 31,
39
+ "CC": 32,
40
+ "CD": 33,
41
+ "CF": 34,
42
+ "CG": 35,
43
+ "CH": 36,
44
+ "CI": 37,
45
+ "CK": 38,
46
+ "CL": 39,
47
+ "CM": 40,
48
+ "CN": 41,
49
+ "CO": 42,
50
+ "CR": 43,
51
+ "CU": 44,
52
+ "CV": 45,
53
+ "CY": 46,
54
+ "CZ": 47,
55
+ "DE": 48,
56
+ "DJ": 49,
57
+ "DK": 50,
58
+ "DM": 51,
59
+ "DO": 52,
60
+ "DZ": 53,
61
+ "EC": 54,
62
+ "EE": 55,
63
+ "EG": 56,
64
+ "EH": 57,
65
+ "ER": 58,
66
+ "ES": 59,
67
+ "ET": 60,
68
+ "FI": 61,
69
+ "FJ": 62,
70
+ "FK": 63,
71
+ "FM": 64,
72
+ "FR": 65,
73
+ "GA": 66,
74
+ "GB": 67,
75
+ "GD": 68,
76
+ "GE": 69,
77
+ "GG": 70,
78
+ "GH": 71,
79
+ "GI": 72,
80
+ "GM": 73,
81
+ "GN": 74,
82
+ "GP": 75,
83
+ "GQ": 76,
84
+ "GR": 77,
85
+ "GT": 78,
86
+ "GW": 79,
87
+ "GY": 80,
88
+ "HK": 81,
89
+ "HN": 82,
90
+ "HR": 83,
91
+ "HT": 84,
92
+ "HU": 85,
93
+ "ID": 86,
94
+ "IE": 87,
95
+ "IL": 88,
96
+ "IM": 89,
97
+ "IN": 90,
98
+ "IO": 91,
99
+ "IQ": 92,
100
+ "IR": 93,
101
+ "IS": 94,
102
+ "IT": 95,
103
+ "JE": 96,
104
+ "JM": 97,
105
+ "JO": 98,
106
+ "JP": 99,
107
+ "KE": 100,
108
+ "KG": 101,
109
+ "KH": 102,
110
+ "KI": 103,
111
+ "KM": 104,
112
+ "KN": 105,
113
+ "KP": 106,
114
+ "KR": 107,
115
+ "KW": 108,
116
+ "KY": 109,
117
+ "KZ": 110,
118
+ "LA": 111,
119
+ "LB": 112,
120
+ "LC": 113,
121
+ "LI": 114,
122
+ "LK": 115,
123
+ "LR": 116,
124
+ "LS": 117,
125
+ "LT": 118,
126
+ "LU": 119,
127
+ "LV": 120,
128
+ "LY": 121,
129
+ "MA": 122,
130
+ "MC": 123,
131
+ "MD": 124,
132
+ "ME": 125,
133
+ "MF": 126,
134
+ "MG": 127,
135
+ "MH": 128,
136
+ "MK": 129,
137
+ "ML": 130,
138
+ "MM": 131,
139
+ "MN": 132,
140
+ "MO": 133,
141
+ "MQ": 134,
142
+ "MR": 135,
143
+ "MS": 136,
144
+ "MT": 137,
145
+ "MU": 138,
146
+ "MV": 139,
147
+ "MW": 140,
148
+ "MX": 141,
149
+ "MY": 142,
150
+ "MZ": 143,
151
+ "NA": 144,
152
+ "NC": 145,
153
+ "NE": 146,
154
+ "NF": 147,
155
+ "NG": 148,
156
+ "NI": 149,
157
+ "NL": 150,
158
+ "NO": 151,
159
+ "NP": 152,
160
+ "NR": 153,
161
+ "NU": 154,
162
+ "NZ": 155,
163
+ "OM": 156,
164
+ "PA": 157,
165
+ "PE": 158,
166
+ "PG": 159,
167
+ "PH": 160,
168
+ "PK": 161,
169
+ "PL": 162,
170
+ "PN": 163,
171
+ "PR": 164,
172
+ "PS": 165,
173
+ "PT": 166,
174
+ "PW": 167,
175
+ "PY": 168,
176
+ "QA": 169,
177
+ "RO": 170,
178
+ "RS": 171,
179
+ "RU": 172,
180
+ "RW": 173,
181
+ "SA": 174,
182
+ "SB": 175,
183
+ "SC": 176,
184
+ "SD": 177,
185
+ "SE": 178,
186
+ "SG": 179,
187
+ "SI": 180,
188
+ "SK": 181,
189
+ "SL": 182,
190
+ "SM": 183,
191
+ "SN": 184,
192
+ "SO": 185,
193
+ "SR": 186,
194
+ "SS": 187,
195
+ "ST": 188,
196
+ "SV": 189,
197
+ "SX": 190,
198
+ "SY": 191,
199
+ "SZ": 192,
200
+ "TC": 193,
201
+ "TD": 194,
202
+ "TG": 195,
203
+ "TH": 196,
204
+ "TJ": 197,
205
+ "TK": 198,
206
+ "TL": 199,
207
+ "TM": 200,
208
+ "TN": 201,
209
+ "TO": 202,
210
+ "TR": 203,
211
+ "TT": 204,
212
+ "TV": 205,
213
+ "TW": 206,
214
+ "TZ": 207,
215
+ "UA": 208,
216
+ "UG": 209,
217
+ "US": 210,
218
+ "UY": 211,
219
+ "UZ": 212,
220
+ "VA": 213,
221
+ "VC": 214,
222
+ "VE": 215,
223
+ "VG": 216,
224
+ "VN": 217,
225
+ "VU": 218,
226
+ "WF": 219,
227
+ "WS": 220,
228
+ "XK": 221,
229
+ "YE": 222,
230
+ "ZA": 223,
231
+ "ZM": 224,
232
+ "ZW": 225
233
+ },
234
+ "vocab_codepoint": {
235
+ " ": 2,
236
+ "!": 3,
237
+ "\"": 4,
238
+ "#": 5,
239
+ "$": 6,
240
+ "%": 7,
241
+ "&": 8,
242
+ "'": 9,
243
+ "(": 10,
244
+ ")": 11,
245
+ "*": 12,
246
+ "+": 13,
247
+ ",": 14,
248
+ "-": 15,
249
+ ".": 16,
250
+ "/": 17,
251
+ "0": 18,
252
+ "1": 19,
253
+ "2": 20,
254
+ "3": 21,
255
+ "4": 22,
256
+ "5": 23,
257
+ "6": 24,
258
+ "7": 25,
259
+ "8": 26,
260
+ "9": 27,
261
+ ":": 28,
262
+ ";": 29,
263
+ "<": 30,
264
+ "=": 31,
265
+ ">": 32,
266
+ "?": 33,
267
+ "@": 34,
268
+ "[": 35,
269
+ "\\": 36,
270
+ "]": 37,
271
+ "^": 38,
272
+ "_": 39,
273
+ "`": 40,
274
+ "a": 41,
275
+ "b": 42,
276
+ "c": 43,
277
+ "d": 44,
278
+ "e": 45,
279
+ "f": 46,
280
+ "g": 47,
281
+ "h": 48,
282
+ "i": 49,
283
+ "j": 50,
284
+ "k": 51,
285
+ "l": 52,
286
+ "m": 53,
287
+ "n": 54,
288
+ "o": 55,
289
+ "p": 56,
290
+ "q": 57,
291
+ "r": 58,
292
+ "s": 59,
293
+ "t": 60,
294
+ "u": 61,
295
+ "v": 62,
296
+ "w": 63,
297
+ "x": 64,
298
+ "y": 65,
299
+ "z": 66,
300
+ "{": 67,
301
+ "|": 68,
302
+ "}": 69,
303
+ "": 70,
304
+ "¡": 71,
305
+ "¢": 72,
306
+ "£": 73,
307
+ "¥": 74,
308
+ "©": 75,
309
+ "ª": 76,
310
+ "«": 77,
311
+ "¬": 78,
312
+ "®": 79,
313
+ "°": 80,
314
+ "´": 81,
315
+ "µ": 82,
316
+ "·": 83,
317
+ "º": 84,
318
+ "»": 85,
319
+ "¼": 86,
320
+ "½": 87,
321
+ "¿": 88,
322
+ "×": 89,
323
+ "ß": 90,
324
+ "à": 91,
325
+ "á": 92,
326
+ "â": 93,
327
+ "ã": 94,
328
+ "ä": 95,
329
+ "å": 96,
330
+ "æ": 97,
331
+ "ç": 98,
332
+ "è": 99,
333
+ "é": 100,
334
+ "ê": 101,
335
+ "ë": 102,
336
+ "ì": 103,
337
+ "í": 104,
338
+ "î": 105,
339
+ "ï": 106,
340
+ "ð": 107,
341
+ "ñ": 108,
342
+ "ò": 109,
343
+ "ó": 110,
344
+ "ô": 111,
345
+ "õ": 112,
346
+ "ö": 113,
347
+ "÷": 114,
348
+ "ø": 115,
349
+ "ù": 116,
350
+ "ú": 117,
351
+ "û": 118,
352
+ "ü": 119,
353
+ "ý": 120,
354
+ "þ": 121,
355
+ "ÿ": 122,
356
+ "ā": 123,
357
+ "ă": 124,
358
+ "ą": 125,
359
+ "ć": 126,
360
+ "ĉ": 127,
361
+ "ċ": 128,
362
+ "č": 129,
363
+ "ď": 130,
364
+ "đ": 131,
365
+ "ē": 132,
366
+ "ĕ": 133,
367
+ "ė": 134,
368
+ "ę": 135,
369
+ "ě": 136,
370
+ "ĝ": 137,
371
+ "ğ": 138,
372
+ "ġ": 139,
373
+ "ģ": 140,
374
+ "ĥ": 141,
375
+ "ħ": 142,
376
+ "ĩ": 143,
377
+ "ī": 144,
378
+ "ĭ": 145,
379
+ "į": 146,
380
+ "ı": 147,
381
+ "ij": 148,
382
+ "ĵ": 149,
383
+ "ķ": 150,
384
+ "ĸ": 151,
385
+ "ĺ": 152,
386
+ "ļ": 153,
387
+ "ľ": 154,
388
+ "ŀ": 155,
389
+ "ł": 156,
390
+ "ń": 157,
391
+ "ņ": 158,
392
+ "ň": 159,
393
+ "ʼn": 160,
394
+ "ŋ": 161,
395
+ "ō": 162,
396
+ "ŏ": 163,
397
+ "ő": 164,
398
+ "œ": 165,
399
+ "ŕ": 166,
400
+ "ŗ": 167,
401
+ "ř": 168,
402
+ "ś": 169,
403
+ "ŝ": 170,
404
+ "ş": 171,
405
+ "š": 172,
406
+ "ţ": 173,
407
+ "ť": 174,
408
+ "ŧ": 175,
409
+ "ũ": 176,
410
+ "ū": 177,
411
+ "ŭ": 178,
412
+ "ů": 179,
413
+ "ű": 180,
414
+ "ų": 181,
415
+ "ŵ": 182,
416
+ "ŷ": 183,
417
+ "ź": 184,
418
+ "ż": 185,
419
+ "ž": 186,
420
+ "ƀ": 187,
421
+ "ƅ": 188,
422
+ "ƌ": 189,
423
+ "ƒ": 190,
424
+ "ƛ": 191,
425
+ "ƞ": 192,
426
+ "ơ": 193,
427
+ "ƥ": 194,
428
+ "ƨ": 195,
429
+ "ƪ": 196,
430
+ "ƭ": 197,
431
+ "ư": 198,
432
+ "ƴ": 199,
433
+ "ƶ": 200,
434
+ "ƺ": 201,
435
+ "ƽ": 202,
436
+ "ƿ": 203,
437
+ "dž": 204,
438
+ "ǎ": 205,
439
+ "ǐ": 206,
440
+ "ǒ": 207,
441
+ "ǔ": 208,
442
+ "ǖ": 209,
443
+ "ǘ": 210,
444
+ "ǚ": 211,
445
+ "ǜ": 212,
446
+ "ǝ": 213,
447
+ "ǟ": 214,
448
+ "ǡ": 215,
449
+ "ǥ": 216,
450
+ "ǧ": 217,
451
+ "ǩ": 218,
452
+ "ǯ": 219,
453
+ "ǰ": 220,
454
+ "ǵ": 221,
455
+ "ǹ": 222,
456
+ "ǻ": 223,
457
+ "ǿ": 224,
458
+ "ȁ": 225,
459
+ "ȃ": 226,
460
+ "ȅ": 227,
461
+ "ȇ": 228,
462
+ "ȉ": 229,
463
+ "ȋ": 230,
464
+ "ȍ": 231,
465
+ "ȑ": 232,
466
+ "ȓ": 233,
467
+ "ș": 234,
468
+ "ț": 235,
469
+ "ȝ": 236,
470
+ "ȟ": 237,
471
+ "ȡ": 238,
472
+ "ȧ": 239,
473
+ "ȩ": 240,
474
+ "ȭ": 241,
475
+ "ȳ": 242,
476
+ "ɇ": 243,
477
+ "ɐ": 244,
478
+ "ɑ": 245,
479
+ "ɓ": 246,
480
+ "ɖ": 247,
481
+ "ɗ": 248,
482
+ "ɘ": 249,
483
+ "ə": 250,
484
+ "ɛ": 251,
485
+ "ɞ": 252,
486
+ "ɣ": 253,
487
+ "ɥ": 254,
488
+ "ɩ": 255,
489
+ "ɪ": 256,
490
+ "ɭ": 257,
491
+ "ɯ": 258,
492
+ "ɱ": 259,
493
+ "ɲ": 260,
494
+ "ɳ": 261,
495
+ "ɽ": 262,
496
+ "ɾ": 263,
497
+ "ʀ": 264,
498
+ "ʆ": 265,
499
+ "ʇ": 266,
500
+ "ʉ": 267,
501
+ "ʋ": 268,
502
+ "ʌ": 269,
503
+ "ʑ": 270,
504
+ "ʚ": 271,
505
+ "ʛ": 272,
506
+ "ʜ": 273,
507
+ "ʞ": 274,
508
+ "ʟ": 275,
509
+ "ʬ": 276,
510
+ "ʹ": 277,
511
+ "ʺ": 278,
512
+ "ʻ": 279,
513
+ "ʼ": 280,
514
+ "ʾ": 281,
515
+ "ʿ": 282,
516
+ "˚": 283,
517
+ "̀": 284,
518
+ "́": 285,
519
+ "̂": 286,
520
+ "̃": 287,
521
+ "̄": 288,
522
+ "̅": 289,
523
+ "̆": 290,
524
+ "̇": 291,
525
+ "̈": 292,
526
+ "̊": 293,
527
+ "̋": 294,
528
+ "̐": 295,
529
+ "̑": 296,
530
+ "̕": 297,
531
+ "̛": 298,
532
+ "̜": 299,
533
+ "̝": 300,
534
+ "̠": 301,
535
+ "̣": 302,
536
+ "̤": 303,
537
+ "̥": 304,
538
+ "̦": 305,
539
+ "̧": 306,
540
+ "̨": 307,
541
+ "̩": 308,
542
+ "̫": 309,
543
+ "̭": 310,
544
+ "̮": 311,
545
+ "̯": 312,
546
+ "̰": 313,
547
+ "̱": 314,
548
+ "̲": 315,
549
+ "̳": 316,
550
+ "̴": 317,
551
+ "̵": 318,
552
+ "̶": 319,
553
+ "̷": 320,
554
+ "̸": 321,
555
+ "̺": 322,
556
+ "̽": 323,
557
+ "̾": 324,
558
+ "̿": 325,
559
+ "͂": 326,
560
+ "͆": 327,
561
+ "͇": 328,
562
+ "͋": 329,
563
+ "͍": 330,
564
+ "͎": 331,
565
+ "͏": 332,
566
+ "͒": 333,
567
+ "͓": 334,
568
+ "͙": 335,
569
+ "͜": 336,
570
+ "͝": 337,
571
+ "͞": 338,
572
+ "͟": 339,
573
+ "͠": 340,
574
+ "͡": 341,
575
+ "͢": 342,
576
+ "ͦ": 343,
577
+ "ͫ": 344,
578
+ "΄": 345,
579
+ "ΐ": 346,
580
+ "ά": 347,
581
+ "έ": 348,
582
+ "ή": 349,
583
+ "ί": 350,
584
+ "α": 351,
585
+ "β": 352,
586
+ "γ": 353,
587
+ "δ": 354,
588
+ "ε": 355,
589
+ "ζ": 356,
590
+ "η": 357,
591
+ "θ": 358,
592
+ "ι": 359,
593
+ "κ": 360,
594
+ "λ": 361,
595
+ "μ": 362,
596
+ "ν": 363,
597
+ "ξ": 364,
598
+ "ο": 365,
599
+ "π": 366,
600
+ "ρ": 367,
601
+ "ς": 368,
602
+ "σ": 369,
603
+ "τ": 370,
604
+ "υ": 371,
605
+ "φ": 372,
606
+ "χ": 373,
607
+ "ψ": 374,
608
+ "ω": 375,
609
+ "ϊ": 376,
610
+ "ό": 377,
611
+ "ύ": 378,
612
+ "ώ": 379,
613
+ "а": 380,
614
+ "б": 381,
615
+ "в": 382,
616
+ "г": 383,
617
+ "д": 384,
618
+ "е": 385,
619
+ "ж": 386,
620
+ "з": 387,
621
+ "и": 388,
622
+ "й": 389,
623
+ "к": 390,
624
+ "л": 391,
625
+ "м": 392,
626
+ "н": 393,
627
+ "о": 394,
628
+ "п": 395,
629
+ "р": 396,
630
+ "с": 397,
631
+ "т": 398,
632
+ "у": 399,
633
+ "ф": 400,
634
+ "х": 401,
635
+ "ц": 402,
636
+ "ч": 403,
637
+ "ш": 404,
638
+ "щ": 405,
639
+ "ъ": 406,
640
+ "ы": 407,
641
+ "ь": 408,
642
+ "э": 409,
643
+ "ю": 410,
644
+ "я": 411,
645
+ "ё": 412,
646
+ "ђ": 413,
647
+ "ѓ": 414,
648
+ "є": 415,
649
+ "ѕ": 416,
650
+ "і": 417,
651
+ "ї": 418,
652
+ "ј": 419,
653
+ "љ": 420,
654
+ "њ": 421,
655
+ "ћ": 422,
656
+ "ќ": 423,
657
+ "ѝ": 424,
658
+ "ў": 425,
659
+ "џ": 426,
660
+ "ѣ": 427,
661
+ "ѧ": 428,
662
+ "ѽ": 429,
663
+ "҈": 430,
664
+ "҉": 431,
665
+ "ґ": 432,
666
+ "ғ": 433,
667
+ "қ": 434,
668
+ "ң": 435,
669
+ "ҩ": 436,
670
+ "ү": 437,
671
+ "ұ": 438,
672
+ "ҳ": 439,
673
+ "ә": 440,
674
+ "ө": 441,
675
+ "ԁ": 442,
676
+ "ՙ": 443,
677
+ "ա": 444,
678
+ "բ": 445,
679
+ "գ": 446,
680
+ "դ": 447,
681
+ "ե": 448,
682
+ "զ": 449,
683
+ "է": 450,
684
+ "ը": 451,
685
+ "թ": 452,
686
+ "ժ": 453,
687
+ "ի": 454,
688
+ "լ": 455,
689
+ "խ": 456,
690
+ "ծ": 457,
691
+ "կ": 458,
692
+ "հ": 459,
693
+ "ձ": 460,
694
+ "ղ": 461,
695
+ "ճ": 462,
696
+ "մ": 463,
697
+ "յ": 464,
698
+ "ն": 465,
699
+ "շ": 466,
700
+ "ո": 467,
701
+ "չ": 468,
702
+ "պ": 469,
703
+ "ջ": 470,
704
+ "ռ": 471,
705
+ "ս": 472,
706
+ "վ": 473,
707
+ "տ": 474,
708
+ "ր": 475,
709
+ "ց": 476,
710
+ "ւ": 477,
711
+ "փ": 478,
712
+ "ք": 479,
713
+ "օ": 480,
714
+ "ֆ": 481,
715
+ "և": 482,
716
+ "ְ": 483,
717
+ "ִ": 484,
718
+ "ַ": 485,
719
+ "ָ": 486,
720
+ "ֹ": 487,
721
+ "ּ": 488,
722
+ "ׁ": 489,
723
+ "א": 490,
724
+ "ב": 491,
725
+ "ג": 492,
726
+ "ד": 493,
727
+ "ה": 494,
728
+ "ו": 495,
729
+ "ז": 496,
730
+ "ח": 497,
731
+ "ט": 498,
732
+ "י": 499,
733
+ "ך": 500,
734
+ "כ": 501,
735
+ "ל": 502,
736
+ "ם": 503,
737
+ "מ": 504,
738
+ "ן": 505,
739
+ "נ": 506,
740
+ "ס": 507,
741
+ "ע": 508,
742
+ "ף": 509,
743
+ "פ": 510,
744
+ "ץ": 511,
745
+ "צ": 512,
746
+ "ק": 513,
747
+ "ר": 514,
748
+ "ש": 515,
749
+ "ת": 516,
750
+ "׳": 517,
751
+ "״": 518,
752
+ "،": 519,
753
+ "ء": 520,
754
+ "آ": 521,
755
+ "أ": 522,
756
+ "ؤ": 523,
757
+ "إ": 524,
758
+ "ئ": 525,
759
+ "ا": 526,
760
+ "ب": 527,
761
+ "ة": 528,
762
+ "ت": 529,
763
+ "ث": 530,
764
+ "ج": 531,
765
+ "ح": 532,
766
+ "خ": 533,
767
+ "د": 534,
768
+ "ذ": 535,
769
+ "ر": 536,
770
+ "ز": 537,
771
+ "س": 538,
772
+ "ش": 539,
773
+ "ص": 540,
774
+ "ض": 541,
775
+ "ط": 542,
776
+ "ظ": 543,
777
+ "ع": 544,
778
+ "غ": 545,
779
+ "ـ": 546,
780
+ "ف": 547,
781
+ "ق": 548,
782
+ "ك": 549,
783
+ "ل": 550,
784
+ "م": 551,
785
+ "ن": 552,
786
+ "ه": 553,
787
+ "و": 554,
788
+ "ى": 555,
789
+ "ي": 556,
790
+ "ً": 557,
791
+ "ٌ": 558,
792
+ "ٍ": 559,
793
+ "َ": 560,
794
+ "ُ": 561,
795
+ "ِ": 562,
796
+ "ّ": 563,
797
+ "ْ": 564,
798
+ "ٓ": 565,
799
+ "ٕ": 566,
800
+ "ٖ": 567,
801
+ "ٗ": 568,
802
+ "٘": 569,
803
+ "ٛ": 570,
804
+ "٭": 571,
805
+ "ٰ": 572,
806
+ "ٱ": 573,
807
+ "ٲ": 574,
808
+ "ٳ": 575,
809
+ "ٴ": 576,
810
+ "ٵ": 577,
811
+ "ٷ": 578,
812
+ "ٹ": 579,
813
+ "ٺ": 580,
814
+ "ٻ": 581,
815
+ "ټ": 582,
816
+ "پ": 583,
817
+ "ٿ": 584,
818
+ "ڀ": 585,
819
+ "ځ": 586,
820
+ "ڂ": 587,
821
+ "ڃ": 588,
822
+ "څ": 589,
823
+ "چ": 590,
824
+ "ڇ": 591,
825
+ "ڈ": 592,
826
+ "ډ": 593,
827
+ "ڊ": 594,
828
+ "ڍ": 595,
829
+ "ڑ": 596,
830
+ "ڒ": 597,
831
+ "ړ": 598,
832
+ "ڔ": 599,
833
+ "ڕ": 600,
834
+ "ږ": 601,
835
+ "ڗ": 602,
836
+ "ژ": 603,
837
+ "ښ": 604,
838
+ "ڛ": 605,
839
+ "ڜ": 606,
840
+ "ڝ": 607,
841
+ "ڠ": 608,
842
+ "ڣ": 609,
843
+ "ڤ": 610,
844
+ "ڦ": 611,
845
+ "ڨ": 612,
846
+ "ک": 613,
847
+ "ڪ": 614,
848
+ "ګ": 615,
849
+ "گ": 616,
850
+ "ڰ": 617,
851
+ "ڱ": 618,
852
+ "ڲ": 619,
853
+ "ڳ": 620,
854
+ "ڴ": 621,
855
+ "ڵ": 622,
856
+ "ڶ": 623,
857
+ "ڷ": 624,
858
+ "ڸ": 625,
859
+ "ڹ": 626,
860
+ "ں": 627,
861
+ "ڻ": 628,
862
+ "ڼ": 629,
863
+ "ھ": 630,
864
+ "ہ": 631,
865
+ "ۂ": 632,
866
+ "ۃ": 633,
867
+ "ۄ": 634,
868
+ "ۅ": 635,
869
+ "ۆ": 636,
870
+ "ۇ": 637,
871
+ "ۈ": 638,
872
+ "ۉ": 639,
873
+ "ۋ": 640,
874
+ "ی": 641,
875
+ "ۍ": 642,
876
+ "ێ": 643,
877
+ "ې": 644,
878
+ "ۑ": 645,
879
+ "ے": 646,
880
+ "ۓ": 647,
881
+ "۔": 648,
882
+ "ە": 649,
883
+ "ۖ": 650,
884
+ "ۗ": 651,
885
+ "ۘ": 652,
886
+ "ۙ": 653,
887
+ "ۚ": 654,
888
+ "ۛ": 655,
889
+ "ۜ": 656,
890
+ "ۣ": 657,
891
+ "ۥ": 658,
892
+ "ۦ": 659,
893
+ "ۧ": 660,
894
+ "ۨ": 661,
895
+ "۪": 662,
896
+ "۫": 663,
897
+ "۬": 664,
898
+ "ۭ": 665,
899
+ "ۺ": 666,
900
+ "ۼ": 667,
901
+ "ۿ": 668,
902
+ "ܐ": 669,
903
+ "ܓ": 670,
904
+ "ܔ": 671,
905
+ "ܛ": 672,
906
+ "ܟ": 673,
907
+ "ݐ": 674,
908
+ "ݛ": 675,
909
+ "ݩ": 676,
910
+ "ݪ": 677,
911
+ "ހ": 678,
912
+ "ނ": 679,
913
+ "ރ": 680,
914
+ "ބ": 681,
915
+ "އ": 682,
916
+ "މ": 683,
917
+ "ފ": 684,
918
+ "ދ": 685,
919
+ "ތ": 686,
920
+ "ލ": 687,
921
+ "ސ": 688,
922
+ "ޒ": 689,
923
+ "ޗ": 690,
924
+ "ޙ": 691,
925
+ "ޝ": 692,
926
+ "ޢ": 693,
927
+ "ަ": 694,
928
+ "ާ": 695,
929
+ "ި": 696,
930
+ "ީ": 697,
931
+ "ު": 698,
932
+ "ް": 699,
933
+ "ࣰ": 700,
934
+ "ँ": 701,
935
+ "ं": 702,
936
+ "अ": 703,
937
+ "आ": 704,
938
+ "इ": 705,
939
+ "ई": 706,
940
+ "उ": 707,
941
+ "ऊ": 708,
942
+ "ऋ": 709,
943
+ "ए": 710,
944
+ "ऐ": 711,
945
+ "ओ": 712,
946
+ "क": 713,
947
+ "ख": 714,
948
+ "ग": 715,
949
+ "घ": 716,
950
+ "ङ": 717,
951
+ "च": 718,
952
+ "छ": 719,
953
+ "ज": 720,
954
+ "झ": 721,
955
+ "ञ": 722,
956
+ "ट": 723,
957
+ "ठ": 724,
958
+ "ड": 725,
959
+ "ढ": 726,
960
+ "ण": 727,
961
+ "त": 728,
962
+ "थ": 729,
963
+ "द": 730,
964
+ "ध": 731,
965
+ "न": 732,
966
+ "प": 733,
967
+ "फ": 734,
968
+ "ब": 735,
969
+ "भ": 736,
970
+ "म": 737,
971
+ "य": 738,
972
+ "र": 739,
973
+ "ल": 740,
974
+ "ळ": 741,
975
+ "व": 742,
976
+ "श": 743,
977
+ "ष": 744,
978
+ "स": 745,
979
+ "ह": 746,
980
+ "़": 747,
981
+ "ा": 748,
982
+ "ि": 749,
983
+ "ी": 750,
984
+ "ु": 751,
985
+ "ू": 752,
986
+ "ृ": 753,
987
+ "े": 754,
988
+ "ै": 755,
989
+ "ॉ": 756,
990
+ "ो": 757,
991
+ "ौ": 758,
992
+ "्": 759,
993
+ "।": 760,
994
+ "॰": 761,
995
+ "ঁ": 762,
996
+ "ং": 763,
997
+ "ঃ": 764,
998
+ "অ": 765,
999
+ "আ": 766,
1000
+ "ই": 767,
1001
+ "ঈ": 768,
1002
+ "উ": 769,
1003
+ "ঊ": 770,
1004
+ "ঋ": 771,
1005
+ "এ": 772,
1006
+ "ঐ": 773,
1007
+ "ও": 774,
1008
+ "ক": 775,
1009
+ "খ": 776,
1010
+ "গ": 777,
1011
+ "ঘ": 778,
1012
+ "ঙ": 779,
1013
+ "চ": 780,
1014
+ "ছ": 781,
1015
+ "জ": 782,
1016
+ "ঝ": 783,
1017
+ "ঞ": 784,
1018
+ "ট": 785,
1019
+ "ঠ": 786,
1020
+ "ড": 787,
1021
+ "ঢ": 788,
1022
+ "ণ": 789,
1023
+ "ত": 790,
1024
+ "থ": 791,
1025
+ "দ": 792,
1026
+ "ধ": 793,
1027
+ "ন": 794,
1028
+ "প": 795,
1029
+ "ফ": 796,
1030
+ "ব": 797,
1031
+ "ভ": 798,
1032
+ "ম": 799,
1033
+ "য": 800,
1034
+ "র": 801,
1035
+ "ল": 802,
1036
+ "শ": 803,
1037
+ "ষ": 804,
1038
+ "স": 805,
1039
+ "হ": 806,
1040
+ "়": 807,
1041
+ "া": 808,
1042
+ "ি": 809,
1043
+ "ী": 810,
1044
+ "ু": 811,
1045
+ "ূ": 812,
1046
+ "ৃ": 813,
1047
+ "ে": 814,
1048
+ "ৈ": 815,
1049
+ "ো": 816,
1050
+ "ৌ": 817,
1051
+ "্": 818,
1052
+ "ৎ": 819,
1053
+ "ৰ": 820,
1054
+ "ৱ": 821,
1055
+ "ਂ": 822,
1056
+ "ਅ": 823,
1057
+ "ਆ": 824,
1058
+ "ਕ": 825,
1059
+ "ਖ": 826,
1060
+ "ਗ": 827,
1061
+ "ਘ": 828,
1062
+ "ਚ": 829,
1063
+ "ਜ": 830,
1064
+ "ਟ": 831,
1065
+ "ਡ": 832,
1066
+ "ਢ": 833,
1067
+ "ਣ": 834,
1068
+ "ਤ": 835,
1069
+ "ਦ": 836,
1070
+ "ਧ": 837,
1071
+ "ਨ": 838,
1072
+ "ਪ": 839,
1073
+ "ਫ": 840,
1074
+ "ਬ": 841,
1075
+ "ਭ": 842,
1076
+ "ਮ": 843,
1077
+ "ਯ": 844,
1078
+ "ਰ": 845,
1079
+ "ਲ": 846,
1080
+ "ਵ": 847,
1081
+ "ਸ": 848,
1082
+ "ਹ": 849,
1083
+ "਼": 850,
1084
+ "ਾ": 851,
1085
+ "ਿ": 852,
1086
+ "ੀ": 853,
1087
+ "ੁ": 854,
1088
+ "ੂ": 855,
1089
+ "ੇ": 856,
1090
+ "ੈ": 857,
1091
+ "ੋ": 858,
1092
+ "ੌ": 859,
1093
+ "੍": 860,
1094
+ "ੜ": 861,
1095
+ "ੰ": 862,
1096
+ "ੱ": 863,
1097
+ "ં": 864,
1098
+ "ઈ": 865,
1099
+ "ક": 866,
1100
+ "ગ": 867,
1101
+ "જ": 868,
1102
+ "ટ": 869,
1103
+ "ઠ": 870,
1104
+ "ડ": 871,
1105
+ "ણ": 872,
1106
+ "ત": 873,
1107
+ "દ": 874,
1108
+ "ન": 875,
1109
+ "પ": 876,
1110
+ "બ": 877,
1111
+ "ભ": 878,
1112
+ "મ": 879,
1113
+ "ય": 880,
1114
+ "ર": 881,
1115
+ "લ": 882,
1116
+ "વ": 883,
1117
+ "શ": 884,
1118
+ "સ": 885,
1119
+ "હ": 886,
1120
+ "ા": 887,
1121
+ "િ": 888,
1122
+ "ી": 889,
1123
+ "ુ": 890,
1124
+ "ે": 891,
1125
+ "ો": 892,
1126
+ "્": 893,
1127
+ "ା": 894,
1128
+ "୍": 895,
1129
+ "அ": 896,
1130
+ "ஆ": 897,
1131
+ "இ": 898,
1132
+ "உ": 899,
1133
+ "எ": 900,
1134
+ "ஒ": 901,
1135
+ "க": 902,
1136
+ "ங": 903,
1137
+ "ச": 904,
1138
+ "ஜ": 905,
1139
+ "ஞ": 906,
1140
+ "ட": 907,
1141
+ "ண": 908,
1142
+ "த": 909,
1143
+ "ந": 910,
1144
+ "ன": 911,
1145
+ "ப": 912,
1146
+ "ம": 913,
1147
+ "ய": 914,
1148
+ "ர": 915,
1149
+ "ற": 916,
1150
+ "ல": 917,
1151
+ "ள": 918,
1152
+ "ழ": 919,
1153
+ "வ": 920,
1154
+ "ஷ": 921,
1155
+ "ஸ": 922,
1156
+ "ஹ": 923,
1157
+ "ா": 924,
1158
+ "ி": 925,
1159
+ "ீ": 926,
1160
+ "ு": 927,
1161
+ "ூ": 928,
1162
+ "ெ": 929,
1163
+ "ே": 930,
1164
+ "ை": 931,
1165
+ "ொ": 932,
1166
+ "ோ": 933,
1167
+ "்": 934,
1168
+ "ం": 935,
1169
+ "అ": 936,
1170
+ "ఆ": 937,
1171
+ "క": 938,
1172
+ "గ": 939,
1173
+ "చ": 940,
1174
+ "జ": 941,
1175
+ "ట": 942,
1176
+ "డ": 943,
1177
+ "ణ": 944,
1178
+ "త": 945,
1179
+ "ద": 946,
1180
+ "ధ": 947,
1181
+ "న": 948,
1182
+ "ప": 949,
1183
+ "బ": 950,
1184
+ "భ": 951,
1185
+ "మ": 952,
1186
+ "య": 953,
1187
+ "ర": 954,
1188
+ "ల": 955,
1189
+ "వ": 956,
1190
+ "శ": 957,
1191
+ "ష": 958,
1192
+ "స": 959,
1193
+ "హ": 960,
1194
+ "ా": 961,
1195
+ "ి": 962,
1196
+ "ీ": 963,
1197
+ "ు": 964,
1198
+ "ూ": 965,
1199
+ "ె": 966,
1200
+ "ే": 967,
1201
+ "ో": 968,
1202
+ "్": 969,
1203
+ "ಂ": 970,
1204
+ "ಌ": 971,
1205
+ "ಕ": 972,
1206
+ "ಗ": 973,
1207
+ "ಜ": 974,
1208
+ "ಟ": 975,
1209
+ "ಡ": 976,
1210
+ "ತ": 977,
1211
+ "ದ": 978,
1212
+ "ನ": 979,
1213
+ "ಪ": 980,
1214
+ "ಬ": 981,
1215
+ "ಮ": 982,
1216
+ "ಯ": 983,
1217
+ "ರ": 984,
1218
+ "ಲ": 985,
1219
+ "ವ": 986,
1220
+ "ಶ": 987,
1221
+ "ಸ": 988,
1222
+ "ಹ": 989,
1223
+ "ಾ": 990,
1224
+ "ಿ": 991,
1225
+ "ೀ": 992,
1226
+ "ು": 993,
1227
+ "ೆ": 994,
1228
+ "ೇ": 995,
1229
+ "ೋ": 996,
1230
+ "್": 997,
1231
+ "ം": 998,
1232
+ "അ": 999,
1233
+ "ആ": 1000,
1234
+ "ഇ": 1001,
1235
+ "ഉ": 1002,
1236
+ "എ": 1003,
1237
+ "ഒ": 1004,
1238
+ "ക": 1005,
1239
+ "ഖ": 1006,
1240
+ "ഗ": 1007,
1241
+ "ങ": 1008,
1242
+ "ച": 1009,
1243
+ "ജ": 1010,
1244
+ "ഞ": 1011,
1245
+ "ട": 1012,
1246
+ "ഡ": 1013,
1247
+ "ണ": 1014,
1248
+ "ത": 1015,
1249
+ "ഥ": 1016,
1250
+ "ദ": 1017,
1251
+ "ധ": 1018,
1252
+ "ന": 1019,
1253
+ "പ": 1020,
1254
+ "ഫ": 1021,
1255
+ "ബ": 1022,
1256
+ "ഭ": 1023,
1257
+ "മ": 1024,
1258
+ "യ": 1025,
1259
+ "ര": 1026,
1260
+ "റ": 1027,
1261
+ "ല": 1028,
1262
+ "ള": 1029,
1263
+ "ഴ": 1030,
1264
+ "വ": 1031,
1265
+ "ശ": 1032,
1266
+ "ഷ": 1033,
1267
+ "സ": 1034,
1268
+ "ഹ": 1035,
1269
+ "ാ": 1036,
1270
+ "ി": 1037,
1271
+ "ീ": 1038,
1272
+ "ു": 1039,
1273
+ "ൂ": 1040,
1274
+ "ൃ": 1041,
1275
+ "െ": 1042,
1276
+ "േ": 1043,
1277
+ "ൈ": 1044,
1278
+ "ൊ": 1045,
1279
+ "ോ": 1046,
1280
+ "്": 1047,
1281
+ "ൺ": 1048,
1282
+ "ൻ": 1049,
1283
+ "ർ": 1050,
1284
+ "ൽ": 1051,
1285
+ "ൾ": 1052,
1286
+ "ං": 1053,
1287
+ "අ": 1054,
1288
+ "ආ": 1055,
1289
+ "ක": 1056,
1290
+ "ග": 1057,
1291
+ "ච": 1058,
1292
+ "ජ": 1059,
1293
+ "ට": 1060,
1294
+ "ඩ": 1061,
1295
+ "ණ": 1062,
1296
+ "ත": 1063,
1297
+ "ද": 1064,
1298
+ "න": 1065,
1299
+ "ප": 1066,
1300
+ "බ": 1067,
1301
+ "ම": 1068,
1302
+ "ය": 1069,
1303
+ "ර": 1070,
1304
+ "ල": 1071,
1305
+ "ව": 1072,
1306
+ "ශ": 1073,
1307
+ "ෂ": 1074,
1308
+ "ස": 1075,
1309
+ "හ": 1076,
1310
+ "්": 1077,
1311
+ "ා": 1078,
1312
+ "ැ": 1079,
1313
+ "ි": 1080,
1314
+ "ී": 1081,
1315
+ "ු": 1082,
1316
+ "ෙ": 1083,
1317
+ "ේ": 1084,
1318
+ "ො": 1085,
1319
+ "ෝ": 1086,
1320
+ "ก": 1087,
1321
+ "ข": 1088,
1322
+ "ค": 1089,
1323
+ "ฆ": 1090,
1324
+ "ง": 1091,
1325
+ "จ": 1092,
1326
+ "ฉ": 1093,
1327
+ "ช": 1094,
1328
+ "ซ": 1095,
1329
+ "ญ": 1096,
1330
+ "ฎ": 1097,
1331
+ "ฏ": 1098,
1332
+ "ฐ": 1099,
1333
+ "ฑ": 1100,
1334
+ "ฒ": 1101,
1335
+ "ณ": 1102,
1336
+ "ด": 1103,
1337
+ "ต": 1104,
1338
+ "ถ": 1105,
1339
+ "ท": 1106,
1340
+ "ธ": 1107,
1341
+ "น": 1108,
1342
+ "บ": 1109,
1343
+ "ป": 1110,
1344
+ "ผ": 1111,
1345
+ "ฝ": 1112,
1346
+ "พ": 1113,
1347
+ "ฟ": 1114,
1348
+ "ภ": 1115,
1349
+ "ม": 1116,
1350
+ "ย": 1117,
1351
+ "ร": 1118,
1352
+ "ฤ": 1119,
1353
+ "ล": 1120,
1354
+ "ว": 1121,
1355
+ "ศ": 1122,
1356
+ "ษ": 1123,
1357
+ "ส": 1124,
1358
+ "ห": 1125,
1359
+ "ฬ": 1126,
1360
+ "อ": 1127,
1361
+ "ฮ": 1128,
1362
+ "ะ": 1129,
1363
+ "ั": 1130,
1364
+ "า": 1131,
1365
+ "ำ": 1132,
1366
+ "ิ": 1133,
1367
+ "ี": 1134,
1368
+ "ึ": 1135,
1369
+ "ื": 1136,
1370
+ "ุ": 1137,
1371
+ "ู": 1138,
1372
+ "ฺ": 1139,
1373
+ "เ": 1140,
1374
+ "แ": 1141,
1375
+ "โ": 1142,
1376
+ "ใ": 1143,
1377
+ "ไ": 1144,
1378
+ "ๆ": 1145,
1379
+ "็": 1146,
1380
+ "่": 1147,
1381
+ "้": 1148,
1382
+ "๊": 1149,
1383
+ "๋": 1150,
1384
+ "์": 1151,
1385
+ "ํ": 1152,
1386
+ "ກ": 1153,
1387
+ "ຄ": 1154,
1388
+ "ງ": 1155,
1389
+ "ຈ": 1156,
1390
+ "ຊ": 1157,
1391
+ "ຍ": 1158,
1392
+ "ດ": 1159,
1393
+ "ຕ": 1160,
1394
+ "ທ": 1161,
1395
+ "ນ": 1162,
1396
+ "ບ": 1163,
1397
+ "ພ": 1164,
1398
+ "ມ": 1165,
1399
+ "ລ": 1166,
1400
+ "ວ": 1167,
1401
+ "ສ": 1168,
1402
+ "ຫ": 1169,
1403
+ "ອ": 1170,
1404
+ "ະ": 1171,
1405
+ "ັ": 1172,
1406
+ "າ": 1173,
1407
+ "ຳ": 1174,
1408
+ "ິ": 1175,
1409
+ "ີ": 1176,
1410
+ "ຸ": 1177,
1411
+ "ົ": 1178,
1412
+ "ເ": 1179,
1413
+ "ແ": 1180,
1414
+ "ໂ": 1181,
1415
+ "ໄ": 1182,
1416
+ "່": 1183,
1417
+ "້": 1184,
1418
+ "ໍ": 1185,
1419
+ "་": 1186,
1420
+ "།": 1187,
1421
+ "ག": 1188,
1422
+ "ང": 1189,
1423
+ "ད": 1190,
1424
+ "ན": 1191,
1425
+ "བ": 1192,
1426
+ "མ": 1193,
1427
+ "འ": 1194,
1428
+ "ར": 1195,
1429
+ "ལ": 1196,
1430
+ "ས": 1197,
1431
+ "ི": 1198,
1432
+ "ུ": 1199,
1433
+ "ེ": 1200,
1434
+ "ོ": 1201,
1435
+ "ྱ": 1202,
1436
+ "က": 1203,
1437
+ "ခ": 1204,
1438
+ "ဂ": 1205,
1439
+ "င": 1206,
1440
+ "စ": 1207,
1441
+ "ဆ": 1208,
1442
+ "ဇ": 1209,
1443
+ "ည": 1210,
1444
+ "တ": 1211,
1445
+ "ထ": 1212,
1446
+ "ဒ": 1213,
1447
+ "န": 1214,
1448
+ "ပ": 1215,
1449
+ "ဖ": 1216,
1450
+ "ဗ": 1217,
1451
+ "ဘ": 1218,
1452
+ "မ": 1219,
1453
+ "ယ": 1220,
1454
+ "ရ": 1221,
1455
+ "လ": 1222,
1456
+ "ဝ": 1223,
1457
+ "သ": 1224,
1458
+ "ဟ": 1225,
1459
+ "အ": 1226,
1460
+ "ဥ": 1227,
1461
+ "ဦ": 1228,
1462
+ "ါ": 1229,
1463
+ "ာ": 1230,
1464
+ "ိ": 1231,
1465
+ "ီ": 1232,
1466
+ "ု": 1233,
1467
+ "ူ": 1234,
1468
+ "ေ": 1235,
1469
+ "ဲ": 1236,
1470
+ "ဳ": 1237,
1471
+ "ဴ": 1238,
1472
+ "ံ": 1239,
1473
+ "့": 1240,
1474
+ "း": 1241,
1475
+ "္": 1242,
1476
+ "်": 1243,
1477
+ "ျ": 1244,
1478
+ "ြ": 1245,
1479
+ "ွ": 1246,
1480
+ "ၥ": 1247,
1481
+ "ၾ": 1248,
1482
+ "ႀ": 1249,
1483
+ "ႊ": 1250,
1484
+ "ႏ": 1251,
1485
+ "ა": 1252,
1486
+ "ბ": 1253,
1487
+ "გ": 1254,
1488
+ "დ": 1255,
1489
+ "ე": 1256,
1490
+ "ვ": 1257,
1491
+ "ზ": 1258,
1492
+ "თ": 1259,
1493
+ "ი": 1260,
1494
+ "კ": 1261,
1495
+ "ლ": 1262,
1496
+ "მ": 1263,
1497
+ "ნ": 1264,
1498
+ "ო": 1265,
1499
+ "პ": 1266,
1500
+ "ჟ": 1267,
1501
+ "რ": 1268,
1502
+ "ს": 1269,
1503
+ "ტ": 1270,
1504
+ "უ": 1271,
1505
+ "ფ": 1272,
1506
+ "ქ": 1273,
1507
+ "ღ": 1274,
1508
+ "ყ": 1275,
1509
+ "შ": 1276,
1510
+ "ჩ": 1277,
1511
+ "ც": 1278,
1512
+ "ძ": 1279,
1513
+ "წ": 1280,
1514
+ "ჭ": 1281,
1515
+ "ხ": 1282,
1516
+ "ჯ": 1283,
1517
+ "ჰ": 1284,
1518
+ "ሀ": 1285,
1519
+ "ሁ": 1286,
1520
+ "ሂ": 1287,
1521
+ "ሃ": 1288,
1522
+ "ሄ": 1289,
1523
+ "ህ": 1290,
1524
+ "ሆ": 1291,
1525
+ "ለ": 1292,
1526
+ "ሉ": 1293,
1527
+ "ሊ": 1294,
1528
+ "ላ": 1295,
1529
+ "ሌ": 1296,
1530
+ "ል": 1297,
1531
+ "ሎ": 1298,
1532
+ "ሏ": 1299,
1533
+ "ሐ": 1300,
1534
+ "ሓ": 1301,
1535
+ "ሔ": 1302,
1536
+ "ሕ": 1303,
1537
+ "መ": 1304,
1538
+ "ሙ": 1305,
1539
+ "ሚ": 1306,
1540
+ "ማ": 1307,
1541
+ "ሜ": 1308,
1542
+ "ም": 1309,
1543
+ "ሞ": 1310,
1544
+ "ሠ": 1311,
1545
+ "ሡ": 1312,
1546
+ "ሣ": 1313,
1547
+ "ሥ": 1314,
1548
+ "ረ": 1315,
1549
+ "ሩ": 1316,
1550
+ "ሪ": 1317,
1551
+ "ራ": 1318,
1552
+ "ሬ": 1319,
1553
+ "ር": 1320,
1554
+ "ሮ": 1321,
1555
+ "ሰ": 1322,
1556
+ "ሱ": 1323,
1557
+ "ሲ": 1324,
1558
+ "ሳ": 1325,
1559
+ "ሴ": 1326,
1560
+ "ስ": 1327,
1561
+ "ሶ": 1328,
1562
+ "ሸ": 1329,
1563
+ "ሺ": 1330,
1564
+ "ሻ": 1331,
1565
+ "ሽ": 1332,
1566
+ "ቀ": 1333,
1567
+ "ቁ": 1334,
1568
+ "ቂ": 1335,
1569
+ "ቃ": 1336,
1570
+ "ቄ": 1337,
1571
+ "ቅ": 1338,
1572
+ "ቆ": 1339,
1573
+ "ቋ": 1340,
1574
+ "በ": 1341,
1575
+ "ቡ": 1342,
1576
+ "ቢ": 1343,
1577
+ "ባ": 1344,
1578
+ "ቤ": 1345,
1579
+ "ብ": 1346,
1580
+ "ቦ": 1347,
1581
+ "ተ": 1348,
1582
+ "ቱ": 1349,
1583
+ "ቲ": 1350,
1584
+ "ታ": 1351,
1585
+ "ቴ": 1352,
1586
+ "ቶ": 1353,
1587
+ "ቷ": 1354,
1588
+ "ቸ": 1355,
1589
+ "ቻ": 1356,
1590
+ "ች": 1357,
1591
+ "ነ": 1358,
1592
+ "ኑ": 1359,
1593
+ "ኒ": 1360,
1594
+ "ና": 1361,
1595
+ "ኔ": 1362,
1596
+ "ን": 1363,
1597
+ "ኖ": 1364,
1598
+ "ኛ": 1365,
1599
+ "ኝ": 1366,
1600
+ "አ": 1367,
1601
+ "ኡ": 1368,
1602
+ "ኢ": 1369,
1603
+ "ኣ": 1370,
1604
+ "ኤ": 1371,
1605
+ "እ": 1372,
1606
+ "ኦ": 1373,
1607
+ "ከ": 1374,
1608
+ "ኩ": 1375,
1609
+ "ኪ": 1376,
1610
+ "ካ": 1377,
1611
+ "ኬ": 1378,
1612
+ "ክ": 1379,
1613
+ "ኮ": 1380,
1614
+ "ኸ": 1381,
1615
+ "ኽ": 1382,
1616
+ "ወ": 1383,
1617
+ "ዉ": 1384,
1618
+ "ዊ": 1385,
1619
+ "ዋ": 1386,
1620
+ "ው": 1387,
1621
+ "ዎ": 1388,
1622
+ "ዑ": 1389,
1623
+ "ዓ": 1390,
1624
+ "ዕ": 1391,
1625
+ "ዘ": 1392,
1626
+ "ዙ": 1393,
1627
+ "ዚ": 1394,
1628
+ "ዛ": 1395,
1629
+ "ዜ": 1396,
1630
+ "ዝ": 1397,
1631
+ "ዞ": 1398,
1632
+ "የ": 1399,
1633
+ "ዩ": 1400,
1634
+ "ያ": 1401,
1635
+ "ዬ": 1402,
1636
+ "ይ": 1403,
1637
+ "ዮ": 1404,
1638
+ "ደ": 1405,
1639
+ "ዱ": 1406,
1640
+ "ዲ": 1407,
1641
+ "ዳ": 1408,
1642
+ "ዴ": 1409,
1643
+ "ድ": 1410,
1644
+ "ዶ": 1411,
1645
+ "ጀ": 1412,
1646
+ "ጂ": 1413,
1647
+ "ጃ": 1414,
1648
+ "ጄ": 1415,
1649
+ "ጅ": 1416,
1650
+ "ጆ": 1417,
1651
+ "ገ": 1418,
1652
+ "ጉ": 1419,
1653
+ "ጊ": 1420,
1654
+ "ጋ": 1421,
1655
+ "ጌ": 1422,
1656
+ "ግ": 1423,
1657
+ "ጎ": 1424,
1658
+ "ጠ": 1425,
1659
+ "ጡ": 1426,
1660
+ "ጣ": 1427,
1661
+ "ጤ": 1428,
1662
+ "ጥ": 1429,
1663
+ "ጦ": 1430,
1664
+ "ጨ": 1431,
1665
+ "ጭ": 1432,
1666
+ "ጸ": 1433,
1667
+ "ጽ": 1434,
1668
+ "ፀ": 1435,
1669
+ "ፅ": 1436,
1670
+ "ፈ": 1437,
1671
+ "ፉ": 1438,
1672
+ "ፊ": 1439,
1673
+ "ፋ": 1440,
1674
+ "ፌ": 1441,
1675
+ "ፍ": 1442,
1676
+ "ፎ": 1443,
1677
+ "፡": 1444,
1678
+ "።": 1445,
1679
+ "ᏸ": 1446,
1680
+ "ᐝ": 1447,
1681
+ "ᐸ": 1448,
1682
+ "ᓲ": 1449,
1683
+ "ᕮ": 1450,
1684
+ "ᕱ": 1451,
1685
+ "ᕼ": 1452,
1686
+ "ᖆ": 1453,
1687
+ "ᖇ": 1454,
1688
+ "ᖱ": 1455,
1689
+ "ᖶ": 1456,
1690
+ "ᖺ": 1457,
1691
+ "ᗅ": 1458,
1692
+ "ᗗ": 1459,
1693
+ "ᗩ": 1460,
1694
+ "ᗰ": 1461,
1695
+ "ᘉ": 1462,
1696
+ "ᘎ": 1463,
1697
+ "ᘙ": 1464,
1698
+ "ᘜ": 1465,
1699
+ "ᙢ": 1466,
1700
+ "ᛁ": 1467,
1701
+ "ᛟ": 1468,
1702
+ "ᜒ": 1469,
1703
+ "᜔": 1470,
1704
+ "ក": 1471,
1705
+ "ខ": 1472,
1706
+ "គ": 1473,
1707
+ "ង": 1474,
1708
+ "ច": 1475,
1709
+ "ឆ": 1476,
1710
+ "ជ": 1477,
1711
+ "ញ": 1478,
1712
+ "ដ": 1479,
1713
+ "ណ": 1480,
1714
+ "ត": 1481,
1715
+ "ថ": 1482,
1716
+ "ទ": 1483,
1717
+ "ធ": 1484,
1718
+ "ន": 1485,
1719
+ "ប": 1486,
1720
+ "ផ": 1487,
1721
+ "ព": 1488,
1722
+ "ភ": 1489,
1723
+ "ម": 1490,
1724
+ "យ": 1491,
1725
+ "រ": 1492,
1726
+ "ល": 1493,
1727
+ "វ": 1494,
1728
+ "ស": 1495,
1729
+ "ហ": 1496,
1730
+ "ឡ": 1497,
1731
+ "អ": 1498,
1732
+ "ា": 1499,
1733
+ "ិ": 1500,
1734
+ "ី": 1501,
1735
+ "ឹ": 1502,
1736
+ "ុ": 1503,
1737
+ "ូ": 1504,
1738
+ "ួ": 1505,
1739
+ "ើ": 1506,
1740
+ "ឿ": 1507,
1741
+ "ៀ": 1508,
1742
+ "េ": 1509,
1743
+ "ែ": 1510,
1744
+ "ោ": 1511,
1745
+ "ៅ": 1512,
1746
+ "ំ": 1513,
1747
+ "ះ": 1514,
1748
+ "៉": 1515,
1749
+ "៊": 1516,
1750
+ "់": 1517,
1751
+ "័": 1518,
1752
+ "្": 1519,
1753
+ "ḁ": 1520,
1754
+ "ḃ": 1521,
1755
+ "ḅ": 1522,
1756
+ "ḇ": 1523,
1757
+ "ḉ": 1524,
1758
+ "ḋ": 1525,
1759
+ "ḍ": 1526,
1760
+ "ḏ": 1527,
1761
+ "ḑ": 1528,
1762
+ "ḓ": 1529,
1763
+ "ḕ": 1530,
1764
+ "ḗ": 1531,
1765
+ "ḛ": 1532,
1766
+ "ḝ": 1533,
1767
+ "ḟ": 1534,
1768
+ "ḡ": 1535,
1769
+ "ḣ": 1536,
1770
+ "ḥ": 1537,
1771
+ "ḧ": 1538,
1772
+ "ḩ": 1539,
1773
+ "ḫ": 1540,
1774
+ "ḭ": 1541,
1775
+ "ḯ": 1542,
1776
+ "ḱ": 1543,
1777
+ "ḳ": 1544,
1778
+ "ḵ": 1545,
1779
+ "ḷ": 1546,
1780
+ "ḻ": 1547,
1781
+ "ḿ": 1548,
1782
+ "ṁ": 1549,
1783
+ "ṃ": 1550,
1784
+ "ṅ": 1551,
1785
+ "ṇ": 1552,
1786
+ "ṉ": 1553,
1787
+ "ṍ": 1554,
1788
+ "ṏ": 1555,
1789
+ "ṓ": 1556,
1790
+ "ṕ": 1557,
1791
+ "ṗ": 1558,
1792
+ "ṙ": 1559,
1793
+ "ṛ": 1560,
1794
+ "ṝ": 1561,
1795
+ "ṟ": 1562,
1796
+ "ṡ": 1563,
1797
+ "ṣ": 1564,
1798
+ "ṥ": 1565,
1799
+ "ṧ": 1566,
1800
+ "ṩ": 1567,
1801
+ "ṫ": 1568,
1802
+ "ṭ": 1569,
1803
+ "ṯ": 1570,
1804
+ "ṱ": 1571,
1805
+ "ṳ": 1572,
1806
+ "ṽ": 1573,
1807
+ "ṿ": 1574,
1808
+ "ẁ": 1575,
1809
+ "ẃ": 1576,
1810
+ "ẅ": 1577,
1811
+ "ẋ": 1578,
1812
+ "ẍ": 1579,
1813
+ "ẏ": 1580,
1814
+ "ẑ": 1581,
1815
+ "ẓ": 1582,
1816
+ "ẕ": 1583,
1817
+ "ẖ": 1584,
1818
+ "ẗ": 1585,
1819
+ "ẙ": 1586,
1820
+ "ạ": 1587,
1821
+ "ả": 1588,
1822
+ "ấ": 1589,
1823
+ "ầ": 1590,
1824
+ "ẩ": 1591,
1825
+ "ẫ": 1592,
1826
+ "ậ": 1593,
1827
+ "ắ": 1594,
1828
+ "ằ": 1595,
1829
+ "ẳ": 1596,
1830
+ "ẵ": 1597,
1831
+ "ặ": 1598,
1832
+ "ẹ": 1599,
1833
+ "ẻ": 1600,
1834
+ "ẽ": 1601,
1835
+ "ế": 1602,
1836
+ "ề": 1603,
1837
+ "ể": 1604,
1838
+ "ễ": 1605,
1839
+ "ệ": 1606,
1840
+ "ỉ": 1607,
1841
+ "ị": 1608,
1842
+ "ọ": 1609,
1843
+ "ỏ": 1610,
1844
+ "���": 1611,
1845
+ "ồ": 1612,
1846
+ "ổ": 1613,
1847
+ "ỗ": 1614,
1848
+ "ộ": 1615,
1849
+ "ớ": 1616,
1850
+ "ờ": 1617,
1851
+ "ở": 1618,
1852
+ "ỡ": 1619,
1853
+ "ợ": 1620,
1854
+ "ụ": 1621,
1855
+ "ủ": 1622,
1856
+ "ứ": 1623,
1857
+ "ừ": 1624,
1858
+ "ử": 1625,
1859
+ "ữ": 1626,
1860
+ "ự": 1627,
1861
+ "ỳ": 1628,
1862
+ "ỵ": 1629,
1863
+ "ỷ": 1630,
1864
+ "ỹ": 1631,
1865
+ "‎": 1632,
1866
+ "‏": 1633,
1867
+ "‐": 1634,
1868
+ "‑": 1635,
1869
+ "–": 1636,
1870
+ "‘": 1637,
1871
+ "’": 1638,
1872
+ "“": 1639,
1873
+ "”": 1640,
1874
+ "…": 1641,
1875
+ "′": 1642,
1876
+ "⃜": 1643,
1877
+ "⃟": 1644,
1878
+ "⃣": 1645,
1879
+ "─": 1646,
1880
+ "│": 1647,
1881
+ "┐": 1648,
1882
+ "┘": 1649,
1883
+ "├": 1650,
1884
+ "┤": 1651,
1885
+ "┼": 1652,
1886
+ "║": 1653,
1887
+ "╗": 1654,
1888
+ "╝": 1655,
1889
+ "╣": 1656,
1890
+ "░": 1657,
1891
+ "▒": 1658,
1892
+ "▓": 1659,
1893
+ "ⱥ": 1660,
1894
+ "ⴰ": 1661,
1895
+ "ⴱ": 1662,
1896
+ "ⴷ": 1663,
1897
+ "ⴻ": 1664,
1898
+ "ⵀ": 1665,
1899
+ "ⵉ": 1666,
1900
+ "ⵍ": 1667,
1901
+ "ⵎ": 1668,
1902
+ "ⵏ": 1669,
1903
+ "ⵓ": 1670,
1904
+ "ⵔ": 1671,
1905
+ "ⵙ": 1672,
1906
+ "ⵣ": 1673,
1907
+ "々": 1674,
1908
+ "ぁ": 1675,
1909
+ "あ": 1676,
1910
+ "ぃ": 1677,
1911
+ "い": 1678,
1912
+ "う": 1679,
1913
+ "ぇ": 1680,
1914
+ "え": 1681,
1915
+ "お": 1682,
1916
+ "か": 1683,
1917
+ "が": 1684,
1918
+ "き": 1685,
1919
+ "ぎ": 1686,
1920
+ "く": 1687,
1921
+ "ぐ": 1688,
1922
+ "け": 1689,
1923
+ "げ": 1690,
1924
+ "こ": 1691,
1925
+ "ご": 1692,
1926
+ "さ": 1693,
1927
+ "ざ": 1694,
1928
+ "し": 1695,
1929
+ "じ": 1696,
1930
+ "す": 1697,
1931
+ "ず": 1698,
1932
+ "せ": 1699,
1933
+ "ぜ": 1700,
1934
+ "そ": 1701,
1935
+ "ぞ": 1702,
1936
+ "た": 1703,
1937
+ "だ": 1704,
1938
+ "ち": 1705,
1939
+ "っ": 1706,
1940
+ "つ": 1707,
1941
+ "づ": 1708,
1942
+ "て": 1709,
1943
+ "で": 1710,
1944
+ "と": 1711,
1945
+ "ど": 1712,
1946
+ "な": 1713,
1947
+ "に": 1714,
1948
+ "ぬ": 1715,
1949
+ "ね": 1716,
1950
+ "の": 1717,
1951
+ "は": 1718,
1952
+ "ば": 1719,
1953
+ "ぱ": 1720,
1954
+ "ひ": 1721,
1955
+ "び": 1722,
1956
+ "ぴ": 1723,
1957
+ "ふ": 1724,
1958
+ "ぶ": 1725,
1959
+ "ぷ": 1726,
1960
+ "へ": 1727,
1961
+ "べ": 1728,
1962
+ "ぺ": 1729,
1963
+ "ほ": 1730,
1964
+ "ぼ": 1731,
1965
+ "ぽ": 1732,
1966
+ "ま": 1733,
1967
+ "み": 1734,
1968
+ "む": 1735,
1969
+ "め": 1736,
1970
+ "も": 1737,
1971
+ "ゃ": 1738,
1972
+ "や": 1739,
1973
+ "ゅ": 1740,
1974
+ "ゆ": 1741,
1975
+ "ょ": 1742,
1976
+ "よ": 1743,
1977
+ "ら": 1744,
1978
+ "り": 1745,
1979
+ "る": 1746,
1980
+ "れ": 1747,
1981
+ "ろ": 1748,
1982
+ "わ": 1749,
1983
+ "を": 1750,
1984
+ "ん": 1751,
1985
+ "ァ": 1752,
1986
+ "ア": 1753,
1987
+ "ィ": 1754,
1988
+ "イ": 1755,
1989
+ "ゥ": 1756,
1990
+ "ウ": 1757,
1991
+ "ェ": 1758,
1992
+ "エ": 1759,
1993
+ "ォ": 1760,
1994
+ "オ": 1761,
1995
+ "カ": 1762,
1996
+ "ガ": 1763,
1997
+ "キ": 1764,
1998
+ "ギ": 1765,
1999
+ "ク": 1766,
2000
+ "グ": 1767,
2001
+ "ケ": 1768,
2002
+ "ゲ": 1769,
2003
+ "コ": 1770,
2004
+ "ゴ": 1771,
2005
+ "サ": 1772,
2006
+ "ザ": 1773,
2007
+ "シ": 1774,
2008
+ "ジ": 1775,
2009
+ "ス": 1776,
2010
+ "ズ": 1777,
2011
+ "セ": 1778,
2012
+ "ゼ": 1779,
2013
+ "ソ": 1780,
2014
+ "ゾ": 1781,
2015
+ "タ": 1782,
2016
+ "ダ": 1783,
2017
+ "チ": 1784,
2018
+ "ヂ": 1785,
2019
+ "ッ": 1786,
2020
+ "ツ": 1787,
2021
+ "ヅ": 1788,
2022
+ "テ": 1789,
2023
+ "デ": 1790,
2024
+ "ト": 1791,
2025
+ "ド": 1792,
2026
+ "ナ": 1793,
2027
+ "ニ": 1794,
2028
+ "ヌ": 1795,
2029
+ "ネ": 1796,
2030
+ "ノ": 1797,
2031
+ "ハ": 1798,
2032
+ "バ": 1799,
2033
+ "パ": 1800,
2034
+ "ヒ": 1801,
2035
+ "ビ": 1802,
2036
+ "ピ": 1803,
2037
+ "フ": 1804,
2038
+ "ブ": 1805,
2039
+ "プ": 1806,
2040
+ "ヘ": 1807,
2041
+ "ベ": 1808,
2042
+ "ペ": 1809,
2043
+ "ホ": 1810,
2044
+ "ボ": 1811,
2045
+ "ポ": 1812,
2046
+ "マ": 1813,
2047
+ "ミ": 1814,
2048
+ "ム": 1815,
2049
+ "メ": 1816,
2050
+ "モ": 1817,
2051
+ "ャ": 1818,
2052
+ "ヤ": 1819,
2053
+ "ュ": 1820,
2054
+ "ユ": 1821,
2055
+ "ョ": 1822,
2056
+ "ヨ": 1823,
2057
+ "ラ": 1824,
2058
+ "リ": 1825,
2059
+ "ル": 1826,
2060
+ "レ": 1827,
2061
+ "ロ": 1828,
2062
+ "ワ": 1829,
2063
+ "ン": 1830,
2064
+ "ヴ": 1831,
2065
+ "ヶ": 1832,
2066
+ "・": 1833,
2067
+ "ー": 1834,
2068
+ "一": 1835,
2069
+ "丁": 1836,
2070
+ "七": 1837,
2071
+ "万": 1838,
2072
+ "丈": 1839,
2073
+ "三": 1840,
2074
+ "上": 1841,
2075
+ "下": 1842,
2076
+ "不": 1843,
2077
+ "与": 1844,
2078
+ "丕": 1845,
2079
+ "世": 1846,
2080
+ "丘": 1847,
2081
+ "丙": 1848,
2082
+ "业": 1849,
2083
+ "丛": 1850,
2084
+ "东": 1851,
2085
+ "丝": 1852,
2086
+ "丞": 1853,
2087
+ "両": 1854,
2088
+ "严": 1855,
2089
+ "並": 1856,
2090
+ "丫": 1857,
2091
+ "中": 1858,
2092
+ "丰": 1859,
2093
+ "串": 1860,
2094
+ "临": 1861,
2095
+ "丸": 1862,
2096
+ "丹": 1863,
2097
+ "为": 1864,
2098
+ "主": 1865,
2099
+ "丽": 1866,
2100
+ "举": 1867,
2101
+ "乃": 1868,
2102
+ "久": 1869,
2103
+ "么": 1870,
2104
+ "义": 1871,
2105
+ "之": 1872,
2106
+ "乌": 1873,
2107
+ "乐": 1874,
2108
+ "乔": 1875,
2109
+ "乗": 1876,
2110
+ "乘": 1877,
2111
+ "乙": 1878,
2112
+ "九": 1879,
2113
+ "也": 1880,
2114
+ "习": 1881,
2115
+ "书": 1882,
2116
+ "买": 1883,
2117
+ "乾": 1884,
2118
+ "亀": 1885,
2119
+ "了": 1886,
2120
+ "予": 1887,
2121
+ "争": 1888,
2122
+ "事": 1889,
2123
+ "二": 1890,
2124
+ "于": 1891,
2125
+ "云": 1892,
2126
+ "五": 1893,
2127
+ "井": 1894,
2128
+ "亘": 1895,
2129
+ "亚": 1896,
2130
+ "亜": 1897,
2131
+ "亞": 1898,
2132
+ "亠": 1899,
2133
+ "交": 1900,
2134
+ "亦": 1901,
2135
+ "亨": 1902,
2136
+ "享": 1903,
2137
+ "京": 1904,
2138
+ "亭": 1905,
2139
+ "亮": 1906,
2140
+ "人": 1907,
2141
+ "亿": 1908,
2142
+ "什": 1909,
2143
+ "仁": 1910,
2144
+ "仇": 1911,
2145
+ "今": 1912,
2146
+ "介": 1913,
2147
+ "从": 1914,
2148
+ "仔": 1915,
2149
+ "仕": 1916,
2150
+ "付": 1917,
2151
+ "仙": 1918,
2152
+ "仟": 1919,
2153
+ "代": 1920,
2154
+ "令": 1921,
2155
+ "以": 1922,
2156
+ "仪": 1923,
2157
+ "仰": 1924,
2158
+ "仲": 1925,
2159
+ "任": 1926,
2160
+ "企": 1927,
2161
+ "伃": 1928,
2162
+ "伊": 1929,
2163
+ "伍": 1930,
2164
+ "伏": 1931,
2165
+ "众": 1932,
2166
+ "优": 1933,
2167
+ "伙": 1934,
2168
+ "会": 1935,
2169
+ "伝": 1936,
2170
+ "伟": 1937,
2171
+ "传": 1938,
2172
+ "伦": 1939,
2173
+ "伯": 1940,
2174
+ "伴": 1941,
2175
+ "伶": 1942,
2176
+ "伸": 1943,
2177
+ "似": 1944,
2178
+ "伽": 1945,
2179
+ "位": 1946,
2180
+ "住": 1947,
2181
+ "佐": 1948,
2182
+ "佑": 1949,
2183
+ "体": 1950,
2184
+ "何": 1951,
2185
+ "余": 1952,
2186
+ "佛": 1953,
2187
+ "作": 1954,
2188
+ "佟": 1955,
2189
+ "佩": 1956,
2190
+ "佰": 1957,
2191
+ "佳": 1958,
2192
+ "佶": 1959,
2193
+ "佾": 1960,
2194
+ "侃": 1961,
2195
+ "來": 1962,
2196
+ "侍": 1963,
2197
+ "侑": 1964,
2198
+ "侖": 1965,
2199
+ "依": 1966,
2200
+ "侠": 1967,
2201
+ "侨": 1968,
2202
+ "侯": 1969,
2203
+ "俊": 1970,
2204
+ "俏": 1971,
2205
+ "俐": 1972,
2206
+ "保": 1973,
2207
+ "俞": 1974,
2208
+ "俠": 1975,
2209
+ "信": 1976,
2210
+ "俣": 1977,
2211
+ "俪": 1978,
2212
+ "俭": 1979,
2213
+ "修": 1980,
2214
+ "俳": 1981,
2215
+ "俵": 1982,
2216
+ "倉": 1983,
2217
+ "個": 1984,
2218
+ "倍": 1985,
2219
+ "倖": 1986,
2220
+ "倚": 1987,
2221
+ "倢": 1988,
2222
+ "倩": 1989,
2223
+ "倪": 1990,
2224
+ "倫": 1991,
2225
+ "倬": 1992,
2226
+ "假": 1993,
2227
+ "偉": 1994,
2228
+ "偌": 1995,
2229
+ "健": 1996,
2230
+ "偲": 1997,
2231
+ "側": 1998,
2232
+ "偵": 1999,
2233
+ "傅": 2000,
2234
+ "傑": 2001,
2235
+ "備": 2002,
2236
+ "傲": 2003,
2237
+ "傳": 2004,
2238
+ "像": 2005,
2239
+ "僑": 2006,
2240
+ "僖": 2007,
2241
+ "僚": 2008,
2242
+ "儀": 2009,
2243
+ "億": 2010,
2244
+ "儉": 2011,
2245
+ "儒": 2012,
2246
+ "優": 2013,
2247
+ "儷": 2014,
2248
+ "儿": 2015,
2249
+ "允": 2016,
2250
+ "元": 2017,
2251
+ "兄": 2018,
2252
+ "充": 2019,
2253
+ "兆": 2020,
2254
+ "先": 2021,
2255
+ "光": 2022,
2256
+ "克": 2023,
2257
+ "児": 2024,
2258
+ "兒": 2025,
2259
+ "兔": 2026,
2260
+ "兜": 2027,
2261
+ "入": 2028,
2262
+ "全": 2029,
2263
+ "兩": 2030,
2264
+ "八": 2031,
2265
+ "公": 2032,
2266
+ "六": 2033,
2267
+ "兰": 2034,
2268
+ "共": 2035,
2269
+ "关": 2036,
2270
+ "兴": 2037,
2271
+ "兵": 2038,
2272
+ "其": 2039,
2273
+ "具": 2040,
2274
+ "典": 2041,
2275
+ "养": 2042,
2276
+ "兼": 2043,
2277
+ "冀": 2044,
2278
+ "内": 2045,
2279
+ "円": 2046,
2280
+ "冉": 2047,
2281
+ "再": 2048,
2282
+ "军": 2049,
2283
+ "农": 2050,
2284
+ "冠": 2051,
2285
+ "冨": 2052,
2286
+ "冬": 2053,
2287
+ "冯": 2054,
2288
+ "冰": 2055,
2289
+ "冲": 2056,
2290
+ "冴": 2057,
2291
+ "冶": 2058,
2292
+ "冷": 2059,
2293
+ "准": 2060,
2294
+ "凉": 2061,
2295
+ "凌": 2062,
2296
+ "凛": 2063,
2297
+ "凜": 2064,
2298
+ "凝": 2065,
2299
+ "凡": 2066,
2300
+ "凤": 2067,
2301
+ "凪": 2068,
2302
+ "凯": 2069,
2303
+ "凰": 2070,
2304
+ "凱": 2071,
2305
+ "出": 2072,
2306
+ "函": 2073,
2307
+ "刀": 2074,
2308
+ "分": 2075,
2309
+ "切": 2076,
2310
+ "刈": 2077,
2311
+ "列": 2078,
2312
+ "刘": 2079,
2313
+ "则": 2080,
2314
+ "刚": 2081,
2315
+ "创": 2082,
2316
+ "初": 2083,
2317
+ "別": 2084,
2318
+ "利": 2085,
2319
+ "到": 2086,
2320
+ "則": 2087,
2321
+ "前": 2088,
2322
+ "剑": 2089,
2323
+ "剛": 2090,
2324
+ "剣": 2091,
2325
+ "副": 2092,
2326
+ "創": 2093,
2327
+ "劉": 2094,
2328
+ "劍": 2095,
2329
+ "力": 2096,
2330
+ "功": 2097,
2331
+ "加": 2098,
2332
+ "动": 2099,
2333
+ "助": 2100,
2334
+ "努": 2101,
2335
+ "劭": 2102,
2336
+ "励": 2103,
2337
+ "劲": 2104,
2338
+ "劼": 2105,
2339
+ "勁": 2106,
2340
+ "勃": 2107,
2341
+ "勇": 2108,
2342
+ "勉": 2109,
2343
+ "勋": 2110,
2344
+ "勒": 2111,
2345
+ "動": 2112,
2346
+ "勘": 2113,
2347
+ "務": 2114,
2348
+ "勛": 2115,
2349
+ "勝": 2116,
2350
+ "勢": 2117,
2351
+ "勤": 2118,
2352
+ "勲": 2119,
2353
+ "勳": 2120,
2354
+ "勵": 2121,
2355
+ "勻": 2122,
2356
+ "包": 2123,
2357
+ "化": 2124,
2358
+ "北": 2125,
2359
+ "匠": 2126,
2360
+ "匡": 2127,
2361
+ "匯": 2128,
2362
+ "區": 2129,
2363
+ "十": 2130,
2364
+ "千": 2131,
2365
+ "升": 2132,
2366
+ "午": 2133,
2367
+ "卉": 2134,
2368
+ "半": 2135,
2369
+ "华": 2136,
2370
+ "协": 2137,
2371
+ "卓": 2138,
2372
+ "協": 2139,
2373
+ "单": 2140,
2374
+ "南": 2141,
2375
+ "博": 2142,
2376
+ "卜": 2143,
2377
+ "占": 2144,
2378
+ "卡": 2145,
2379
+ "卢": 2146,
2380
+ "卫": 2147,
2381
+ "卯": 2148,
2382
+ "印": 2149,
2383
+ "卷": 2150,
2384
+ "卿": 2151,
2385
+ "历": 2152,
2386
+ "厚": 2153,
2387
+ "原": 2154,
2388
+ "又": 2155,
2389
+ "及": 2156,
2390
+ "友": 2157,
2391
+ "双": 2158,
2392
+ "反": 2159,
2393
+ "収": 2160,
2394
+ "发": 2161,
2395
+ "叔": 2162,
2396
+ "取": 2163,
2397
+ "叡": 2164,
2398
+ "口": 2165,
2399
+ "古": 2166,
2400
+ "只": 2167,
2401
+ "召": 2168,
2402
+ "叮": 2169,
2403
+ "可": 2170,
2404
+ "台": 2171,
2405
+ "史": 2172,
2406
+ "右": 2173,
2407
+ "叶": 2174,
2408
+ "号": 2175,
2409
+ "司": 2176,
2410
+ "各": 2177,
2411
+ "合": 2178,
2412
+ "吉": 2179,
2413
+ "同": 2180,
2414
+ "名": 2181,
2415
+ "后": 2182,
2416
+ "吏": 2183,
2417
+ "吐": 2184,
2418
+ "向": 2185,
2419
+ "吕": 2186,
2420
+ "君": 2187,
2421
+ "吟": 2188,
2422
+ "含": 2189,
2423
+ "启": 2190,
2424
+ "吳": 2191,
2425
+ "吴": 2192,
2426
+ "吹": 2193,
2427
+ "吾": 2194,
2428
+ "呂": 2195,
2429
+ "呆": 2196,
2430
+ "呈": 2197,
2431
+ "呉": 2198,
2432
+ "告": 2199,
2433
+ "员": 2200,
2434
+ "周": 2201,
2435
+ "味": 2202,
2436
+ "呼": 2203,
2437
+ "命": 2204,
2438
+ "和": 2205,
2439
+ "咏": 2206,
2440
+ "咖": 2207,
2441
+ "咨": 2208,
2442
+ "咪": 2209,
2443
+ "咲": 2210,
2444
+ "咸": 2211,
2445
+ "品": 2212,
2446
+ "哈": 2213,
2447
+ "哉": 2214,
2448
+ "員": 2215,
2449
+ "哥": 2216,
2450
+ "哲": 2217,
2451
+ "唐": 2218,
2452
+ "唯": 2219,
2453
+ "商": 2220,
2454
+ "問": 2221,
2455
+ "啓": 2222,
2456
+ "啟": 2223,
2457
+ "啦": 2224,
2458
+ "啸": 2225,
2459
+ "善": 2226,
2460
+ "喆": 2227,
2461
+ "喜": 2228,
2462
+ "喬": 2229,
2463
+ "單": 2230,
2464
+ "喵": 2231,
2465
+ "喻": 2232,
2466
+ "嗣": 2233,
2467
+ "嘉": 2234,
2468
+ "嘎": 2235,
2469
+ "嘯": 2236,
2470
+ "嘻": 2237,
2471
+ "器": 2238,
2472
+ "噹": 2239,
2473
+ "嚴": 2240,
2474
+ "四": 2241,
2475
+ "回": 2242,
2476
+ "因": 2243,
2477
+ "团": 2244,
2478
+ "団": 2245,
2479
+ "园": 2246,
2480
+ "固": 2247,
2481
+ "国": 2248,
2482
+ "图": 2249,
2483
+ "囿": 2250,
2484
+ "圃": 2251,
2485
+ "圆": 2252,
2486
+ "圈": 2253,
2487
+ "國": 2254,
2488
+ "園": 2255,
2489
+ "圓": 2256,
2490
+ "圖": 2257,
2491
+ "團": 2258,
2492
+ "土": 2259,
2493
+ "圣": 2260,
2494
+ "在": 2261,
2495
+ "圭": 2262,
2496
+ "地": 2263,
2497
+ "圳": 2264,
2498
+ "圻": 2265,
2499
+ "坂": 2266,
2500
+ "均": 2267,
2501
+ "坊": 2268,
2502
+ "坚": 2269,
2503
+ "坡": 2270,
2504
+ "坤": 2271,
2505
+ "坦": 2272,
2506
+ "坪": 2273,
2507
+ "垂": 2274,
2508
+ "垚": 2275,
2509
+ "垣": 2276,
2510
+ "城": 2277,
2511
+ "埜": 2278,
2512
+ "域": 2279,
2513
+ "執": 2280,
2514
+ "培": 2281,
2515
+ "基": 2282,
2516
+ "堀": 2283,
2517
+ "堂": 2284,
2518
+ "堃": 2285,
2519
+ "堅": 2286,
2520
+ "堆": 2287,
2521
+ "堉": 2288,
2522
+ "堡": 2289,
2523
+ "堤": 2290,
2524
+ "堯": 2291,
2525
+ "場": 2292,
2526
+ "堺": 2293,
2527
+ "塁": 2294,
2528
+ "塏": 2295,
2529
+ "塔": 2296,
2530
+ "塗": 2297,
2531
+ "塚": 2298,
2532
+ "塩": 2299,
2533
+ "塵": 2300,
2534
+ "境": 2301,
2535
+ "墉": 2302,
2536
+ "増": 2303,
2537
+ "增": 2304,
2538
+ "墨": 2305,
2539
+ "壁": 2306,
2540
+ "壕": 2307,
2541
+ "士": 2308,
2542
+ "壬": 2309,
2543
+ "壮": 2310,
2544
+ "壯": 2311,
2545
+ "声": 2312,
2546
+ "壱": 2313,
2547
+ "壹": 2314,
2548
+ "壽": 2315,
2549
+ "夆": 2316,
2550
+ "复": 2317,
2551
+ "夏": 2318,
2552
+ "夕": 2319,
2553
+ "外": 2320,
2554
+ "夙": 2321,
2555
+ "多": 2322,
2556
+ "夜": 2323,
2557
+ "夢": 2324,
2558
+ "大": 2325,
2559
+ "天": 2326,
2560
+ "太": 2327,
2561
+ "夫": 2328,
2562
+ "央": 2329,
2563
+ "夷": 2330,
2564
+ "奇": 2331,
2565
+ "奈": 2332,
2566
+ "奉": 2333,
2567
+ "奋": 2334,
2568
+ "奎": 2335,
2569
+ "奏": 2336,
2570
+ "奐": 2337,
2571
+ "奔": 2338,
2572
+ "奕": 2339,
2573
+ "奥": 2340,
2574
+ "奧": 2341,
2575
+ "奨": 2342,
2576
+ "女": 2343,
2577
+ "奴": 2344,
2578
+ "好": 2345,
2579
+ "如": 2346,
2580
+ "妃": 2347,
2581
+ "妍": 2348,
2582
+ "妏": 2349,
2583
+ "妗": 2350,
2584
+ "妘": 2351,
2585
+ "妙": 2352,
2586
+ "妡": 2353,
2587
+ "妤": 2354,
2588
+ "妮": 2355,
2589
+ "妹": 2356,
2590
+ "妺": 2357,
2591
+ "妻": 2358,
2592
+ "姆": 2359,
2593
+ "始": 2360,
2594
+ "姍": 2361,
2595
+ "姐": 2362,
2596
+ "委": 2363,
2597
+ "姗": 2364,
2598
+ "姚": 2365,
2599
+ "姜": 2366,
2600
+ "姝": 2367,
2601
+ "姣": 2368,
2602
+ "姫": 2369,
2603
+ "姬": 2370,
2604
+ "姮": 2371,
2605
+ "姵": 2372,
2606
+ "姸": 2373,
2607
+ "姿": 2374,
2608
+ "威": 2375,
2609
+ "娃": 2376,
2610
+ "娅": 2377,
2611
+ "娇": 2378,
2612
+ "娉": 2379,
2613
+ "娘": 2380,
2614
+ "娜": 2381,
2615
+ "娟": 2382,
2616
+ "娣": 2383,
2617
+ "娥": 2384,
2618
+ "娴": 2385,
2619
+ "娸": 2386,
2620
+ "婉": 2387,
2621
+ "婕": 2388,
2622
+ "婧": 2389,
2623
+ "婭": 2390,
2624
+ "婵": 2391,
2625
+ "婷": 2392,
2626
+ "媄": 2393,
2627
+ "媖": 2394,
2628
+ "媗": 2395,
2629
+ "媚": 2396,
2630
+ "媛": 2397,
2631
+ "媜": 2398,
2632
+ "媺": 2399,
2633
+ "嫚": 2400,
2634
+ "嫣": 2401,
2635
+ "嫦": 2402,
2636
+ "嫺": 2403,
2637
+ "嫻": 2404,
2638
+ "嬅": 2405,
2639
+ "嬋": 2406,
2640
+ "嬌": 2407,
2641
+ "嬡": 2408,
2642
+ "嬪": 2409,
2643
+ "嬿": 2410,
2644
+ "子": 2411,
2645
+ "孔": 2412,
2646
+ "字": 2413,
2647
+ "存": 2414,
2648
+ "孙": 2415,
2649
+ "孚": 2416,
2650
+ "孜": 2417,
2651
+ "孝": 2418,
2652
+ "孟": 2419,
2653
+ "季": 2420,
2654
+ "学": 2421,
2655
+ "孫": 2422,
2656
+ "學": 2423,
2657
+ "宁": 2424,
2658
+ "宅": 2425,
2659
+ "宇": 2426,
2660
+ "守": 2427,
2661
+ "安": 2428,
2662
+ "宋": 2429,
2663
+ "完": 2430,
2664
+ "宍": 2431,
2665
+ "宏": 2432,
2666
+ "宓": 2433,
2667
+ "宗": 2434,
2668
+ "官": 2435,
2669
+ "宙": 2436,
2670
+ "定": 2437,
2671
+ "宛": 2438,
2672
+ "宜": 2439,
2673
+ "宝": 2440,
2674
+ "实": 2441,
2675
+ "実": 2442,
2676
+ "客": 2443,
2677
+ "宣": 2444,
2678
+ "室": 2445,
2679
+ "宥": 2446,
2680
+ "宪": 2447,
2681
+ "宫": 2448,
2682
+ "宮": 2449,
2683
+ "宰": 2450,
2684
+ "宴": 2451,
2685
+ "宵": 2452,
2686
+ "家": 2453,
2687
+ "宸": 2454,
2688
+ "容": 2455,
2689
+ "宽": 2456,
2690
+ "宾": 2457,
2691
+ "宿": 2458,
2692
+ "寂": 2459,
2693
+ "寄": 2460,
2694
+ "寅": 2461,
2695
+ "密": 2462,
2696
+ "富": 2463,
2697
+ "寒": 2464,
2698
+ "寓": 2465,
2699
+ "寛": 2466,
2700
+ "實": 2467,
2701
+ "寧": 2468,
2702
+ "寬": 2469,
2703
+ "寰": 2470,
2704
+ "寳": 2471,
2705
+ "寶": 2472,
2706
+ "寺": 2473,
2707
+ "寻": 2474,
2708
+ "寿": 2475,
2709
+ "封": 2476,
2710
+ "専": 2477,
2711
+ "将": 2478,
2712
+ "將": 2479,
2713
+ "專": 2480,
2714
+ "尉": 2481,
2715
+ "尊": 2482,
2716
+ "尋": 2483,
2717
+ "對": 2484,
2718
+ "導": 2485,
2719
+ "小": 2486,
2720
+ "少": 2487,
2721
+ "尔": 2488,
2722
+ "尘": 2489,
2723
+ "尚": 2490,
2724
+ "尤": 2491,
2725
+ "尧": 2492,
2726
+ "就": 2493,
2727
+ "尹": 2494,
2728
+ "尻": 2495,
2729
+ "尼": 2496,
2730
+ "尾": 2497,
2731
+ "局": 2498,
2732
+ "居": 2499,
2733
+ "屋": 2500,
2734
+ "屏": 2501,
2735
+ "展": 2502,
2736
+ "屠": 2503,
2737
+ "山": 2504,
2738
+ "屹": 2505,
2739
+ "岐": 2506,
2740
+ "岑": 2507,
2741
+ "岗": 2508,
2742
+ "岚": 2509,
2743
+ "岡": 2510,
2744
+ "岩": 2511,
2745
+ "岫": 2512,
2746
+ "岬": 2513,
2747
+ "岭": 2514,
2748
+ "岱": 2515,
2749
+ "岳": 2516,
2750
+ "岷": 2517,
2751
+ "岸": 2518,
2752
+ "峥": 2519,
2753
+ "峨": 2520,
2754
+ "峯": 2521,
2755
+ "峰": 2522,
2756
+ "島": 2523,
2757
+ "峻": 2524,
2758
+ "崇": 2525,
2759
+ "崎": 2526,
2760
+ "崑": 2527,
2761
+ "崔": 2528,
2762
+ "崙": 2529,
2763
+ "崚": 2530,
2764
+ "崧": 2531,
2765
+ "崴": 2532,
2766
+ "嵐": 2533,
2767
+ "嵘": 2534,
2768
+ "嵜": 2535,
2769
+ "嵩": 2536,
2770
+ "嵯": 2537,
2771
+ "嶋": 2538,
2772
+ "嶌": 2539,
2773
+ "嶸": 2540,
2774
+ "嶺": 2541,
2775
+ "嶽": 2542,
2776
+ "巌": 2543,
2777
+ "巍": 2544,
2778
+ "巖": 2545,
2779
+ "川": 2546,
2780
+ "州": 2547,
2781
+ "工": 2548,
2782
+ "左": 2549,
2783
+ "巧": 2550,
2784
+ "巨": 2551,
2785
+ "巫": 2552,
2786
+ "己": 2553,
2787
+ "已": 2554,
2788
+ "巳": 2555,
2789
+ "巴": 2556,
2790
+ "巻": 2557,
2791
+ "巽": 2558,
2792
+ "市": 2559,
2793
+ "布": 2560,
2794
+ "帅": 2561,
2795
+ "帆": 2562,
2796
+ "师": 2563,
2797
+ "希": 2564,
2798
+ "帕": 2565,
2799
+ "帛": 2566,
2800
+ "帝": 2567,
2801
+ "帥": 2568,
2802
+ "带": 2569,
2803
+ "師": 2570,
2804
+ "席": 2571,
2805
+ "帮": 2572,
2806
+ "帶": 2573,
2807
+ "帷": 2574,
2808
+ "常": 2575,
2809
+ "幃": 2576,
2810
+ "幕": 2577,
2811
+ "幡": 2578,
2812
+ "干": 2579,
2813
+ "平": 2580,
2814
+ "年": 2581,
2815
+ "幸": 2582,
2816
+ "幹": 2583,
2817
+ "幻": 2584,
2818
+ "幼": 2585,
2819
+ "幽": 2586,
2820
+ "幾": 2587,
2821
+ "广": 2588,
2822
+ "広": 2589,
2823
+ "庄": 2590,
2824
+ "庆": 2591,
2825
+ "床": 2592,
2826
+ "序": 2593,
2827
+ "应": 2594,
2828
+ "庚": 2595,
2829
+ "府": 2596,
2830
+ "庠": 2597,
2831
+ "度": 2598,
2832
+ "座": 2599,
2833
+ "庫": 2600,
2834
+ "庭": 2601,
2835
+ "庵": 2602,
2836
+ "康": 2603,
2837
+ "庸": 2604,
2838
+ "廉": 2605,
2839
+ "廖": 2606,
2840
+ "廣": 2607,
2841
+ "延": 2608,
2842
+ "廷": 2609,
2843
+ "廸": 2610,
2844
+ "建": 2611,
2845
+ "开": 2612,
2846
+ "弈": 2613,
2847
+ "弋": 2614,
2848
+ "式": 2615,
2849
+ "弓": 2616,
2850
+ "引": 2617,
2851
+ "弘": 2618,
2852
+ "弟": 2619,
2853
+ "张": 2620,
2854
+ "弥": 2621,
2855
+ "弦": 2622,
2856
+ "張": 2623,
2857
+ "強": 2624,
2858
+ "强": 2625,
2859
+ "弼": 2626,
2860
+ "彌": 2627,
2861
+ "当": 2628,
2862
+ "彗": 2629,
2863
+ "形": 2630,
2864
+ "彣": 2631,
2865
+ "彤": 2632,
2866
+ "彥": 2633,
2867
+ "彦": 2634,
2868
+ "彧": 2635,
2869
+ "彩": 2636,
2870
+ "彪": 2637,
2871
+ "彬": 2638,
2872
+ "彭": 2639,
2873
+ "彰": 2640,
2874
+ "影": 2641,
2875
+ "彼": 2642,
2876
+ "征": 2643,
2877
+ "律": 2644,
2878
+ "後": 2645,
2879
+ "徐": 2646,
2880
+ "徒": 2647,
2881
+ "得": 2648,
2882
+ "從": 2649,
2883
+ "御": 2650,
2884
+ "復": 2651,
2885
+ "循": 2652,
2886
+ "微": 2653,
2887
+ "徳": 2654,
2888
+ "徵": 2655,
2889
+ "德": 2656,
2890
+ "徹": 2657,
2891
+ "徽": 2658,
2892
+ "心": 2659,
2893
+ "必": 2660,
2894
+ "忆": 2661,
2895
+ "忍": 2662,
2896
+ "志": 2663,
2897
+ "忠": 2664,
2898
+ "快": 2665,
2899
+ "念": 2666,
2900
+ "忻": 2667,
2901
+ "怀": 2668,
2902
+ "怜": 2669,
2903
+ "思": 2670,
2904
+ "怡": 2671,
2905
+ "性": 2672,
2906
+ "怪": 2673,
2907
+ "恆": 2674,
2908
+ "恋": 2675,
2909
+ "恒": 2676,
2910
+ "恕": 2677,
2911
+ "恩": 2678,
2912
+ "恬": 2679,
2913
+ "恭": 2680,
2914
+ "恵": 2681,
2915
+ "恺": 2682,
2916
+ "悅": 2683,
2917
+ "悌": 2684,
2918
+ "悟": 2685,
2919
+ "悠": 2686,
2920
+ "悦": 2687,
2921
+ "情": 2688,
2922
+ "惇": 2689,
2923
+ "惜": 2690,
2924
+ "惟": 2691,
2925
+ "惠": 2692,
2926
+ "惣": 2693,
2927
+ "想": 2694,
2928
+ "愉": 2695,
2929
+ "意": 2696,
2930
+ "愚": 2697,
2931
+ "愛": 2698,
2932
+ "愷": 2699,
2933
+ "愿": 2700,
2934
+ "慈": 2701,
2935
+ "慎": 2702,
2936
+ "慕": 2703,
2937
+ "慧": 2704,
2938
+ "慰": 2705,
2939
+ "慶": 2706,
2940
+ "憂": 2707,
2941
+ "憐": 2708,
2942
+ "憬": 2709,
2943
+ "憲": 2710,
2944
+ "憶": 2711,
2945
+ "應": 2712,
2946
+ "懋": 2713,
2947
+ "懷": 2714,
2948
+ "懿": 2715,
2949
+ "戀": 2716,
2950
+ "戈": 2717,
2951
+ "戎": 2718,
2952
+ "成": 2719,
2953
+ "我": 2720,
2954
+ "战": 2721,
2955
+ "戚": 2722,
2956
+ "戰": 2723,
2957
+ "戴": 2724,
2958
+ "戸": 2725,
2959
+ "房": 2726,
2960
+ "所": 2727,
2961
+ "扇": 2728,
2962
+ "手": 2729,
2963
+ "才": 2730,
2964
+ "扎": 2731,
2965
+ "打": 2732,
2966
+ "托": 2733,
2967
+ "扣": 2734,
2968
+ "扬": 2735,
2969
+ "扶": 2736,
2970
+ "承": 2737,
2971
+ "技": 2738,
2972
+ "抒": 2739,
2973
+ "折": 2740,
2974
+ "押": 2741,
2975
+ "拉": 2742,
2976
+ "拓": 2743,
2977
+ "拔": 2744,
2978
+ "招": 2745,
2979
+ "拜": 2746,
2980
+ "拳": 2747,
2981
+ "持": 2748,
2982
+ "指": 2749,
2983
+ "振": 2750,
2984
+ "挺": 2751,
2985
+ "捷": 2752,
2986
+ "授": 2753,
2987
+ "掌": 2754,
2988
+ "掛": 2755,
2989
+ "措": 2756,
2990
+ "提": 2757,
2991
+ "揚": 2758,
2992
+ "揮": 2759,
2993
+ "摘": 2760,
2994
+ "摩": 2761,
2995
+ "播": 2762,
2996
+ "擇": 2763,
2997
+ "操": 2764,
2998
+ "擎": 2765,
2999
+ "攀": 2766,
3000
+ "支": 2767,
3001
+ "收": 2768,
3002
+ "攸": 2769,
3003
+ "改": 2770,
3004
+ "放": 2771,
3005
+ "政": 2772,
3006
+ "效": 2773,
3007
+ "敏": 2774,
3008
+ "敖": 2775,
3009
+ "教": 2776,
3010
+ "敢": 2777,
3011
+ "敦": 2778,
3012
+ "敬": 2779,
3013
+ "数": 2780,
3014
+ "整": 2781,
3015
+ "敷": 2782,
3016
+ "數": 2783,
3017
+ "文": 2784,
3018
+ "斉": 2785,
3019
+ "斌": 2786,
3020
+ "斎": 2787,
3021
+ "斐": 2788,
3022
+ "斗": 2789,
3023
+ "斯": 2790,
3024
+ "新": 2791,
3025
+ "方": 2792,
3026
+ "於": 2793,
3027
+ "施": 2794,
3028
+ "旅": 2795,
3029
+ "旋": 2796,
3030
+ "旎": 2797,
3031
+ "族": 2798,
3032
+ "旖": 2799,
3033
+ "旗": 2800,
3034
+ "日": 2801,
3035
+ "旦": 2802,
3036
+ "旨": 2803,
3037
+ "早": 2804,
3038
+ "旬": 2805,
3039
+ "旭": 2806,
3040
+ "时": 2807,
3041
+ "旸": 2808,
3042
+ "旺": 2809,
3043
+ "旻": 2810,
3044
+ "昀": 2811,
3045
+ "昂": 2812,
3046
+ "昆": 2813,
3047
+ "昇": 2814,
3048
+ "昊": 2815,
3049
+ "昌": 2816,
3050
+ "明": 2817,
3051
+ "易": 2818,
3052
+ "昕": 2819,
3053
+ "星": 2820,
3054
+ "映": 2821,
3055
+ "春": 2822,
3056
+ "昭": 2823,
3057
+ "是": 2824,
3058
+ "昱": 2825,
3059
+ "昶": 2826,
3060
+ "显": 2827,
3061
+ "晁": 2828,
3062
+ "時": 2829,
3063
+ "晃": 2830,
3064
+ "晉": 2831,
3065
+ "晋": 2832,
3066
+ "晏": 2833,
3067
+ "晓": 2834,
3068
+ "晔": 2835,
3069
+ "晖": 2836,
3070
+ "晗": 2837,
3071
+ "晚": 2838,
3072
+ "晞": 2839,
3073
+ "晟": 2840,
3074
+ "晧": 2841,
3075
+ "晨": 2842,
3076
+ "普": 2843,
3077
+ "景": 2844,
3078
+ "晰": 2845,
3079
+ "晴": 2846,
3080
+ "晶": 2847,
3081
+ "智": 2848,
3082
+ "暁": 2849,
3083
+ "暄": 2850,
3084
+ "暉": 2851,
3085
+ "暐": 2852,
3086
+ "暖": 2853,
3087
+ "暘": 2854,
3088
+ "暢": 2855,
3089
+ "暮": 2856,
3090
+ "曄": 2857,
3091
+ "曈": 2858,
3092
+ "曉": 2859,
3093
+ "曙": 2860,
3094
+ "曜": 2861,
3095
+ "曦": 2862,
3096
+ "曰": 2863,
3097
+ "曲": 2864,
3098
+ "更": 2865,
3099
+ "書": 2866,
3100
+ "曹": 2867,
3101
+ "曼": 2868,
3102
+ "曽": 2869,
3103
+ "曾": 2870,
3104
+ "最": 2871,
3105
+ "會": 2872,
3106
+ "月": 2873,
3107
+ "有": 2874,
3108
+ "朋": 2875,
3109
+ "服": 2876,
3110
+ "朔": 2877,
3111
+ "朕": 2878,
3112
+ "朗": 2879,
3113
+ "望": 2880,
3114
+ "朝": 2881,
3115
+ "期": 2882,
3116
+ "木": 2883,
3117
+ "未": 2884,
3118
+ "末": 2885,
3119
+ "本": 2886,
3120
+ "术": 2887,
3121
+ "朱": 2888,
3122
+ "朴": 2889,
3123
+ "朵": 2890,
3124
+ "权": 2891,
3125
+ "杉": 2892,
3126
+ "李": 2893,
3127
+ "杏": 2894,
3128
+ "材": 2895,
3129
+ "村": 2896,
3130
+ "杜": 2897,
3131
+ "杞": 2898,
3132
+ "束": 2899,
3133
+ "条": 2900,
3134
+ "来": 2901,
3135
+ "杨": 2902,
3136
+ "杭": 2903,
3137
+ "杯": 2904,
3138
+ "杰": 2905,
3139
+ "東": 2906,
3140
+ "杵": 2907,
3141
+ "松": 2908,
3142
+ "板": 2909,
3143
+ "林": 2910,
3144
+ "枚": 2911,
3145
+ "果": 2912,
3146
+ "枝": 2913,
3147
+ "枫": 2914,
3148
+ "柄": 2915,
3149
+ "柊": 2916,
3150
+ "柏": 2917,
3151
+ "柑": 2918,
3152
+ "染": 2919,
3153
+ "柔": 2920,
3154
+ "柘": 2921,
3155
+ "柚": 2922,
3156
+ "柠": 2923,
3157
+ "查": 2924,
3158
+ "柯": 2925,
3159
+ "柱": 2926,
3160
+ "柳": 2927,
3161
+ "柴": 2928,
3162
+ "柾": 2929,
3163
+ "柿": 2930,
3164
+ "栁": 2931,
3165
+ "栃": 2932,
3166
+ "栄": 2933,
3167
+ "标": 2934,
3168
+ "栋": 2935,
3169
+ "树": 2936,
3170
+ "栖": 2937,
3171
+ "栗": 2938,
3172
+ "栞": 2939,
3173
+ "校": 2940,
3174
+ "栢": 2941,
3175
+ "栩": 2942,
3176
+ "根": 2943,
3177
+ "格": 2944,
3178
+ "桀": 2945,
3179
+ "桂": 2946,
3180
+ "桃": 2947,
3181
+ "案": 2948,
3182
+ "桐": 2949,
3183
+ "桑": 2950,
3184
+ "桓": 2951,
3185
+ "桔": 2952,
3186
+ "桜": 2953,
3187
+ "桝": 2954,
3188
+ "桢": 2955,
3189
+ "桥": 2956,
3190
+ "桦": 2957,
3191
+ "梁": 2958,
3192
+ "梅": 2959,
3193
+ "梓": 2960,
3194
+ "條": 2961,
3195
+ "梢": 2962,
3196
+ "梦": 2963,
3197
+ "梧": 2964,
3198
+ "梨": 2965,
3199
+ "梵": 2966,
3200
+ "梶": 2967,
3201
+ "棉": 2968,
3202
+ "棋": 2969,
3203
+ "棕": 2970,
3204
+ "棚": 2971,
3205
+ "棟": 2972,
3206
+ "棠": 2973,
3207
+ "棣": 2974,
3208
+ "棨": 2975,
3209
+ "森": 2976,
3210
+ "棻": 2977,
3211
+ "椋": 2978,
3212
+ "植": 2979,
3213
+ "椎": 2980,
3214
+ "椰": 2981,
3215
+ "椿": 2982,
3216
+ "楊": 2983,
3217
+ "楓": 2984,
3218
+ "楚": 2985,
3219
+ "楠": 2986,
3220
+ "楢": 2987,
3221
+ "楨": 2988,
3222
+ "業": 2989,
3223
+ "極": 2990,
3224
+ "楷": 2991,
3225
+ "楹": 2992,
3226
+ "楼": 2993,
3227
+ "楽": 2994,
3228
+ "榆": 2995,
3229
+ "榊": 2996,
3230
+ "榎": 2997,
3231
+ "榕": 2998,
3232
+ "榛": 2999,
3233
+ "榜": 3000,
3234
+ "榤": 3001,
3235
+ "榮": 3002,
3236
+ "槇": 3003,
3237
+ "槐": 3004,
3238
+ "槙": 3005,
3239
+ "槻": 3006,
3240
+ "樂": 3007,
3241
+ "樊": 3008,
3242
+ "樋": 3009,
3243
+ "樑": 3010,
3244
+ "樓": 3011,
3245
+ "標": 3012,
3246
+ "樟": 3013,
3247
+ "模": 3014,
3248
+ "権": 3015,
3249
+ "横": 3016,
3250
+ "樫": 3017,
3251
+ "樱": 3018,
3252
+ "樵": 3019,
3253
+ "樹": 3020,
3254
+ "樺": 3021,
3255
+ "樽": 3022,
3256
+ "橋": 3023,
3257
+ "橘": 3024,
3258
+ "橙": 3025,
3259
+ "機": 3026,
3260
+ "檀": 3027,
3261
+ "檜": 3028,
3262
+ "檬": 3029,
3263
+ "櫛": 3030,
3264
+ "櫻": 3031,
3265
+ "權": 3032,
3266
+ "次": 3033,
3267
+ "欢": 3034,
3268
+ "欣": 3035,
3269
+ "欧": 3036,
3270
+ "欽": 3037,
3271
+ "歆": 3038,
3272
+ "歌": 3039,
3273
+ "歐": 3040,
3274
+ "歡": 3041,
3275
+ "止": 3042,
3276
+ "正": 3043,
3277
+ "此": 3044,
3278
+ "步": 3045,
3279
+ "武": 3046,
3280
+ "歩": 3047,
3281
+ "歪": 3048,
3282
+ "歳": 3049,
3283
+ "歷": 3050,
3284
+ "殊": 3051,
3285
+ "段": 3052,
3286
+ "殷": 3053,
3287
+ "殿": 3054,
3288
+ "毅": 3055,
3289
+ "母": 3056,
3290
+ "毓": 3057,
3291
+ "比": 3058,
3292
+ "毕": 3059,
3293
+ "毛": 3060,
3294
+ "氏": 3061,
3295
+ "民": 3062,
3296
+ "气": 3063,
3297
+ "気": 3064,
3298
+ "氣": 3065,
3299
+ "水": 3066,
3300
+ "氷": 3067,
3301
+ "永": 3068,
3302
+ "汀": 3069,
3303
+ "求": 3070,
3304
+ "汇": 3071,
3305
+ "汉": 3072,
3306
+ "汎": 3073,
3307
+ "汐": 3074,
3308
+ "汗": 3075,
3309
+ "汝": 3076,
3310
+ "江": 3077,
3311
+ "池": 3078,
3312
+ "汤": 3079,
3313
+ "汪": 3080,
3314
+ "汰": 3081,
3315
+ "汶": 3082,
3316
+ "沁": 3083,
3317
+ "沂": 3084,
3318
+ "沃": 3085,
3319
+ "沅": 3086,
3320
+ "沈": 3087,
3321
+ "沉": 3088,
3322
+ "沐": 3089,
3323
+ "沖": 3090,
3324
+ "沙": 3091,
3325
+ "沛": 3092,
3326
+ "沢": 3093,
3327
+ "沫": 3094,
3328
+ "河": 3095,
3329
+ "油": 3096,
3330
+ "治": 3097,
3331
+ "沼": 3098,
3332
+ "沿": 3099,
3333
+ "泉": 3100,
3334
+ "泊": 3101,
3335
+ "泓": 3102,
3336
+ "法": 3103,
3337
+ "波": 3104,
3338
+ "泥": 3105,
3339
+ "泫": 3106,
3340
+ "泯": 3107,
3341
+ "泰": 3108,
3342
+ "泱": 3109,
3343
+ "泳": 3110,
3344
+ "泽": 3111,
3345
+ "洁": 3112,
3346
+ "洋": 3113,
3347
+ "洛": 3114,
3348
+ "洞": 3115,
3349
+ "津": 3116,
3350
+ "洧": 3117,
3351
+ "洪": 3118,
3352
+ "洲": 3119,
3353
+ "洳": 3120,
3354
+ "洵": 3121,
3355
+ "洸": 3122,
3356
+ "洺": 3123,
3357
+ "活": 3124,
3358
+ "洽": 3125,
3359
+ "派": 3126,
3360
+ "流": 3127,
3361
+ "浅": 3128,
3362
+ "济": 3129,
3363
+ "浚": 3130,
3364
+ "浜": 3131,
3365
+ "浠": 3132,
3366
+ "浤": 3133,
3367
+ "浦": 3134,
3368
+ "浩": 3135,
3369
+ "浪": 3136,
3370
+ "浮": 3137,
3371
+ "海": 3138,
3372
+ "涂": 3139,
3373
+ "涌": 3140,
3374
+ "涓": 3141,
3375
+ "涛": 3142,
3376
+ "润": 3143,
3377
+ "涯": 3144,
3378
+ "涵": 3145,
3379
+ "涼": 3146,
3380
+ "淇": 3147,
3381
+ "淋": 3148,
3382
+ "淏": 3149,
3383
+ "淑": 3150,
3384
+ "淘": 3151,
3385
+ "淙": 3152,
3386
+ "淞": 3153,
3387
+ "淡": 3154,
3388
+ "淦": 3155,
3389
+ "淨": 3156,
3390
+ "淩": 3157,
3391
+ "淮": 3158,
3392
+ "淯": 3159,
3393
+ "深": 3160,
3394
+ "淳": 3161,
3395
+ "淵": 3162,
3396
+ "淺": 3163,
3397
+ "添": 3164,
3398
+ "淼": 3165,
3399
+ "清": 3166,
3400
+ "済": 3167,
3401
+ "渉": 3168,
3402
+ "渊": 3169,
3403
+ "渋": 3170,
3404
+ "渓": 3171,
3405
+ "渕": 3172,
3406
+ "渚": 3173,
3407
+ "渝": 3174,
3408
+ "渟": 3175,
3409
+ "渠": 3176,
3410
+ "渡": 3177,
3411
+ "渥": 3178,
3412
+ "温": 3179,
3413
+ "渭": 3180,
3414
+ "港": 3181,
3415
+ "渲": 3182,
3416
+ "游": 3183,
3417
+ "渼": 3184,
3418
+ "湄": 3185,
3419
+ "湊": 3186,
3420
+ "湖": 3187,
3421
+ "湘": 3188,
3422
+ "湛": 3189,
3423
+ "湧": 3190,
3424
+ "湯": 3191,
3425
+ "満": 3192,
3426
+ "源": 3193,
3427
+ "準": 3194,
3428
+ "溝": 3195,
3429
+ "溢": 3196,
3430
+ "溥": 3197,
3431
+ "溪": 3198,
3432
+ "溫": 3199,
3433
+ "溱": 3200,
3434
+ "溶": 3201,
3435
+ "滄": 3202,
3436
+ "滉": 3203,
3437
+ "滋": 3204,
3438
+ "滑": 3205,
3439
+ "滔": 3206,
3440
+ "滕": 3207,
3441
+ "滝": 3208,
3442
+ "满": 3209,
3443
+ "滢": 3210,
3444
+ "滨": 3211,
3445
+ "滴": 3212,
3446
+ "滿": 3213,
3447
+ "漁": 3214,
3448
+ "漆": 3215,
3449
+ "演": 3216,
3450
+ "漢": 3217,
3451
+ "漩": 3218,
3452
+ "漪": 3219,
3453
+ "漫": 3220,
3454
+ "漳": 3221,
3455
+ "漾": 3222,
3456
+ "潁": 3223,
3457
+ "潇": 3224,
3458
+ "潔": 3225,
3459
+ "潘": 3226,
3460
+ "潜": 3227,
3461
+ "潞": 3228,
3462
+ "潤": 3229,
3463
+ "潭": 3230,
3464
+ "潮": 3231,
3465
+ "潼": 3232,
3466
+ "澁": 3233,
3467
+ "澄": 3234,
3468
+ "澍": 3235,
3469
+ "澎": 3236,
3470
+ "澐": 3237,
3471
+ "澔": 3238,
3472
+ "澜": 3239,
3473
+ "澤": 3240,
3474
+ "澧": 3241,
3475
+ "澪": 3242,
3476
+ "澳": 3243,
3477
+ "濂": 3244,
3478
+ "濃": 3245,
3479
+ "濟": 3246,
3480
+ "濠": 3247,
3481
+ "濤": 3248,
3482
+ "濬": 3249,
3483
+ "濰": 3250,
3484
+ "濱": 3251,
3485
+ "濵": 3252,
3486
+ "瀅": 3253,
3487
+ "瀚": 3254,
3488
+ "瀛": 3255,
3489
+ "瀞": 3256,
3490
+ "瀟": 3257,
3491
+ "瀧": 3258,
3492
+ "瀨": 3259,
3493
+ "瀬": 3260,
3494
+ "瀾": 3261,
3495
+ "灃": 3262,
3496
+ "灏": 3263,
3497
+ "灝": 3264,
3498
+ "灣": 3265,
3499
+ "火": 3266,
3500
+ "灯": 3267,
3501
+ "灰": 3268,
3502
+ "灵": 3269,
3503
+ "灶": 3270,
3504
+ "灼": 3271,
3505
+ "灿": 3272,
3506
+ "炎": 3273,
3507
+ "炘": 3274,
3508
+ "炜": 3275,
3509
+ "炤": 3276,
3510
+ "炫": 3277,
3511
+ "炬": 3278,
3512
+ "炮": 3279,
3513
+ "炯": 3280,
3514
+ "炳": 3281,
3515
+ "点": 3282,
3516
+ "為": 3283,
3517
+ "炼": 3284,
3518
+ "炽": 3285,
3519
+ "烁": 3286,
3520
+ "烈": 3287,
3521
+ "烏": 3288,
3522
+ "烜": 3289,
3523
+ "烟": 3290,
3524
+ "烨": 3291,
3525
+ "热": 3292,
3526
+ "烱": 3293,
3527
+ "烽": 3294,
3528
+ "焕": 3295,
3529
+ "焜": 3296,
3530
+ "無": 3297,
3531
+ "焦": 3298,
3532
+ "焯": 3299,
3533
+ "焰": 3300,
3534
+ "焱": 3301,
3535
+ "然": 3302,
3536
+ "煇": 3303,
3537
+ "煊": 3304,
3538
+ "煌": 3305,
3539
+ "煒": 3306,
3540
+ "煙": 3307,
3541
+ "煜": 3308,
3542
+ "煥": 3309,
3543
+ "煦": 3310,
3544
+ "照": 3311,
3545
+ "煬": 3312,
3546
+ "熊": 3313,
3547
+ "熏": 3314,
3548
+ "熒": 3315,
3549
+ "熙": 3316,
3550
+ "熠": 3317,
3551
+ "熱": 3318,
3552
+ "熹": 3319,
3553
+ "熾": 3320,
3554
+ "燁": 3321,
3555
+ "燃": 3322,
3556
+ "燈": 3323,
3557
+ "燊": 3324,
3558
+ "燕": 3325,
3559
+ "營": 3326,
3560
+ "燦": 3327,
3561
+ "燮": 3328,
3562
+ "燿": 3329,
3563
+ "爪": 3330,
3564
+ "爱": 3331,
3565
+ "爵": 3332,
3566
+ "父": 3333,
3567
+ "爺": 3334,
3568
+ "爽": 3335,
3569
+ "爾": 3336,
3570
+ "片": 3337,
3571
+ "牙": 3338,
3572
+ "牛": 3339,
3573
+ "牟": 3340,
3574
+ "牧": 3341,
3575
+ "物": 3342,
3576
+ "特": 3343,
3577
+ "犬": 3344,
3578
+ "狄": 3345,
3579
+ "狩": 3346,
3580
+ "猛": 3347,
3581
+ "猪": 3348,
3582
+ "猫": 3349,
3583
+ "献": 3350,
3584
+ "猴": 3351,
3585
+ "猷": 3352,
3586
+ "猿": 3353,
3587
+ "獅": 3354,
3588
+ "獻": 3355,
3589
+ "玄": 3356,
3590
+ "玉": 3357,
3591
+ "王": 3358,
3592
+ "玖": 3359,
3593
+ "玗": 3360,
3594
+ "玛": 3361,
3595
+ "玟": 3362,
3596
+ "玠": 3363,
3597
+ "玥": 3364,
3598
+ "玨": 3365,
3599
+ "玩": 3366,
3600
+ "玫": 3367,
3601
+ "玮": 3368,
3602
+ "环": 3369,
3603
+ "现": 3370,
3604
+ "玲": 3371,
3605
+ "玳": 3372,
3606
+ "玹": 3373,
3607
+ "玺": 3374,
3608
+ "珀": 3375,
3609
+ "珂": 3376,
3610
+ "珅": 3377,
3611
+ "珈": 3378,
3612
+ "珉": 3379,
3613
+ "珊": 3380,
3614
+ "珍": 3381,
3615
+ "珏": 3382,
3616
+ "珑": 3383,
3617
+ "珞": 3384,
3618
+ "珠": 3385,
3619
+ "珣": 3386,
3620
+ "珩": 3387,
3621
+ "班": 3388,
3622
+ "珮": 3389,
3623
+ "珺": 3390,
3624
+ "珽": 3391,
3625
+ "現": 3392,
3626
+ "琁": 3393,
3627
+ "球": 3394,
3628
+ "理": 3395,
3629
+ "琇": 3396,
3630
+ "琉": 3397,
3631
+ "琍": 3398,
3632
+ "琛": 3399,
3633
+ "琢": 3400,
3634
+ "琥": 3401,
3635
+ "琦": 3402,
3636
+ "琨": 3403,
3637
+ "琪": 3404,
3638
+ "琬": 3405,
3639
+ "琮": 3406,
3640
+ "琰": 3407,
3641
+ "琳": 3408,
3642
+ "琴": 3409,
3643
+ "琼": 3410,
3644
+ "瑀": 3411,
3645
+ "瑄": 3412,
3646
+ "瑋": 3413,
3647
+ "瑗": 3414,
3648
+ "瑚": 3415,
3649
+ "瑛": 3416,
3650
+ "瑜": 3417,
3651
+ "瑞": 3418,
3652
+ "瑟": 3419,
3653
+ "瑠": 3420,
3654
+ "瑢": 3421,
3655
+ "瑤": 3422,
3656
+ "瑩": 3423,
3657
+ "瑪": 3424,
3658
+ "瑰": 3425,
3659
+ "瑱": 3426,
3660
+ "瑶": 3427,
3661
+ "瑾": 3428,
3662
+ "璁": 3429,
3663
+ "璃": 3430,
3664
+ "璇": 3431,
3665
+ "璉": 3432,
3666
+ "璋": 3433,
3667
+ "璐": 3434,
3668
+ "璘": 3435,
3669
+ "璞": 3436,
3670
+ "璟": 3437,
3671
+ "璠": 3438,
3672
+ "璦": 3439,
3673
+ "璧": 3440,
3674
+ "璨": 3441,
3675
+ "環": 3442,
3676
+ "璽": 3443,
3677
+ "璿": 3444,
3678
+ "瓊": 3445,
3679
+ "瓏": 3446,
3680
+ "瓔": 3447,
3681
+ "瓜": 3448,
3682
+ "瓦": 3449,
3683
+ "瓶": 3450,
3684
+ "甄": 3451,
3685
+ "甘": 3452,
3686
+ "甚": 3453,
3687
+ "甜": 3454,
3688
+ "生": 3455,
3689
+ "用": 3456,
3690
+ "甫": 3457,
3691
+ "甯": 3458,
3692
+ "田": 3459,
3693
+ "由": 3460,
3694
+ "甲": 3461,
3695
+ "申": 3462,
3696
+ "男": 3463,
3697
+ "町": 3464,
3698
+ "画": 3465,
3699
+ "畅": 3466,
3700
+ "畇": 3467,
3701
+ "界": 3468,
3702
+ "畑": 3469,
3703
+ "畔": 3470,
3704
+ "留": 3471,
3705
+ "畠": 3472,
3706
+ "番": 3473,
3707
+ "畫": 3474,
3708
+ "畯": 3475,
3709
+ "異": 3476,
3710
+ "當": 3477,
3711
+ "癸": 3478,
3712
+ "登": 3479,
3713
+ "發": 3480,
3714
+ "白": 3481,
3715
+ "百": 3482,
3716
+ "的": 3483,
3717
+ "皆": 3484,
3718
+ "皇": 3485,
3719
+ "皓": 3486,
3720
+ "皖": 3487,
3721
+ "皮": 3488,
3722
+ "盈": 3489,
3723
+ "益": 3490,
3724
+ "盛": 3491,
3725
+ "盟": 3492,
3726
+ "盤": 3493,
3727
+ "盧": 3494,
3728
+ "目": 3495,
3729
+ "直": 3496,
3730
+ "相": 3497,
3731
+ "盼": 3498,
3732
+ "省": 3499,
3733
+ "眉": 3500,
3734
+ "眞": 3501,
3735
+ "真": 3502,
3736
+ "眼": 3503,
3737
+ "睛": 3504,
3738
+ "督": 3505,
3739
+ "睦": 3506,
3740
+ "睿": 3507,
3741
+ "瞬": 3508,
3742
+ "瞳": 3509,
3743
+ "矢": 3510,
3744
+ "知": 3511,
3745
+ "矩": 3512,
3746
+ "石": 3513,
3747
+ "砂": 3514,
3748
+ "研": 3515,
3749
+ "砚": 3516,
3750
+ "破": 3517,
3751
+ "硕": 3518,
3752
+ "硬": 3519,
3753
+ "硯": 3520,
3754
+ "碓": 3521,
3755
+ "碧": 3522,
3756
+ "碩": 3523,
3757
+ "碹": 3524,
3758
+ "磊": 3525,
3759
+ "磐": 3526,
3760
+ "磨": 3527,
3761
+ "磯": 3528,
3762
+ "礒": 3529,
3763
+ "示": 3530,
3764
+ "礼": 3531,
3765
+ "社": 3532,
3766
+ "祁": 3533,
3767
+ "祈": 3534,
3768
+ "祉": 3535,
3769
+ "祎": 3536,
3770
+ "祐": 3537,
3771
+ "祖": 3538,
3772
+ "祚": 3539,
3773
+ "祝": 3540,
3774
+ "神": 3541,
3775
+ "祥": 3542,
3776
+ "祯": 3543,
3777
+ "祺": 3544,
3778
+ "祿": 3545,
3779
+ "禄": 3546,
3780
+ "禅": 3547,
3781
+ "禎": 3548,
3782
+ "福": 3549,
3783
+ "禕": 3550,
3784
+ "禧": 3551,
3785
+ "禮": 3552,
3786
+ "禹": 3553,
3787
+ "禾": 3554,
3788
+ "秀": 3555,
3789
+ "私": 3556,
3790
+ "秉": 3557,
3791
+ "秋": 3558,
3792
+ "科": 3559,
3793
+ "秘": 3560,
3794
+ "秝": 3561,
3795
+ "秦": 3562,
3796
+ "积": 3563,
3797
+ "稀": 3564,
3798
+ "程": 3565,
3799
+ "稔": 3566,
3800
+ "稚": 3567,
3801
+ "稜": 3568,
3802
+ "種": 3569,
3803
+ "稲": 3570,
3804
+ "稳": 3571,
3805
+ "稼": 3572,
3806
+ "穂": 3573,
3807
+ "穆": 3574,
3808
+ "積": 3575,
3809
+ "穎": 3576,
3810
+ "穗": 3577,
3811
+ "穣": 3578,
3812
+ "穩": 3579,
3813
+ "穴": 3580,
3814
+ "空": 3581,
3815
+ "窪": 3582,
3816
+ "立": 3583,
3817
+ "竑": 3584,
3818
+ "竜": 3585,
3819
+ "竞": 3586,
3820
+ "竟": 3587,
3821
+ "章": 3588,
3822
+ "竣": 3589,
3823
+ "童": 3590,
3824
+ "端": 3591,
3825
+ "競": 3592,
3826
+ "竹": 3593,
3827
+ "竺": 3594,
3828
+ "笑": 3595,
3829
+ "笙": 3596,
3830
+ "笛": 3597,
3831
+ "笠": 3598,
3832
+ "符": 3599,
3833
+ "笹": 3600,
3834
+ "筆": 3601,
3835
+ "等": 3602,
3836
+ "筌": 3603,
3837
+ "筑": 3604,
3838
+ "筒": 3605,
3839
+ "策": 3606,
3840
+ "筠": 3607,
3841
+ "筧": 3608,
3842
+ "筱": 3609,
3843
+ "简": 3610,
3844
+ "箕": 3611,
3845
+ "管": 3612,
3846
+ "箱": 3613,
3847
+ "箴": 3614,
3848
+ "節": 3615,
3849
+ "範": 3616,
3850
+ "築": 3617,
3851
+ "篠": 3618,
3852
+ "篤": 3619,
3853
+ "簡": 3620,
3854
+ "籠": 3621,
3855
+ "米": 3622,
3856
+ "籽": 3623,
3857
+ "粉": 3624,
3858
+ "粒": 3625,
3859
+ "粟": 3626,
3860
+ "粤": 3627,
3861
+ "精": 3628,
3862
+ "糸": 3629,
3863
+ "紀": 3630,
3864
+ "約": 3631,
3865
+ "紅": 3632,
3866
+ "紋": 3633,
3867
+ "納": 3634,
3868
+ "純": 3635,
3869
+ "紗": 3636,
3870
+ "紘": 3637,
3871
+ "紙": 3638,
3872
+ "紜": 3639,
3873
+ "素": 3640,
3874
+ "索": 3641,
3875
+ "紫": 3642,
3876
+ "細": 3643,
3877
+ "紳": 3644,
3878
+ "紹": 3645,
3879
+ "紺": 3646,
3880
+ "絃": 3647,
3881
+ "経": 3648,
3882
+ "結": 3649,
3883
+ "絜": 3650,
3884
+ "絢": 3651,
3885
+ "絨": 3652,
3886
+ "絮": 3653,
3887
+ "統": 3654,
3888
+ "絲": 3655,
3889
+ "絵": 3656,
3890
+ "絹": 3657,
3891
+ "綉": 3658,
3892
+ "經": 3659,
3893
+ "継": 3660,
3894
+ "綜": 3661,
3895
+ "綠": 3662,
3896
+ "維": 3663,
3897
+ "綱": 3664,
3898
+ "網": 3665,
3899
+ "綵": 3666,
3900
+ "綸": 3667,
3901
+ "綺": 3668,
3902
+ "綽": 3669,
3903
+ "綾": 3670,
3904
+ "綿": 3671,
3905
+ "緁": 3672,
3906
+ "緋": 3673,
3907
+ "総": 3674,
3908
+ "緑": 3675,
3909
+ "緒": 3676,
3910
+ "緗": 3677,
3911
+ "緣": 3678,
3912
+ "緯": 3679,
3913
+ "練": 3680,
3914
+ "緹": 3681,
3915
+ "緻": 3682,
3916
+ "縄": 3683,
3917
+ "縈": 3684,
3918
+ "縉": 3685,
3919
+ "縣": 3686,
3920
+ "總": 3687,
3921
+ "繁": 3688,
3922
+ "織": 3689,
3923
+ "繡": 3690,
3924
+ "繹": 3691,
3925
+ "繼": 3692,
3926
+ "红": 3693,
3927
+ "约": 3694,
3928
+ "纪": 3695,
3929
+ "纬": 3696,
3930
+ "纯": 3697,
3931
+ "纳": 3698,
3932
+ "纹": 3699,
3933
+ "练": 3700,
3934
+ "细": 3701,
3935
+ "绍": 3702,
3936
+ "经": 3703,
3937
+ "结": 3704,
3938
+ "统": 3705,
3939
+ "绣": 3706,
3940
+ "继": 3707,
3941
+ "绪": 3708,
3942
+ "绮": 3709,
3943
+ "维": 3710,
3944
+ "绵": 3711,
3945
+ "绿": 3712,
3946
+ "缘": 3713,
3947
+ "罗": 3714,
3948
+ "罡": 3715,
3949
+ "置": 3716,
3950
+ "羅": 3717,
3951
+ "羊": 3718,
3952
+ "美": 3719,
3953
+ "羚": 3720,
3954
+ "羡": 3721,
3955
+ "群": 3722,
3956
+ "義": 3723,
3957
+ "羲": 3724,
3958
+ "羽": 3725,
3959
+ "羿": 3726,
3960
+ "翀": 3727,
3961
+ "翁": 3728,
3962
+ "翃": 3729,
3963
+ "翊": 3730,
3964
+ "翌": 3731,
3965
+ "翎": 3732,
3966
+ "習": 3733,
3967
+ "翔": 3734,
3968
+ "翟": 3735,
3969
+ "翠": 3736,
3970
+ "翰": 3737,
3971
+ "翹": 3738,
3972
+ "翼": 3739,
3973
+ "耀": 3740,
3974
+ "老": 3741,
3975
+ "考": 3742,
3976
+ "者": 3743,
3977
+ "而": 3744,
3978
+ "耐": 3745,
3979
+ "耕": 3746,
3980
+ "耘": 3747,
3981
+ "耳": 3748,
3982
+ "耶": 3749,
3983
+ "耿": 3750,
3984
+ "聆": 3751,
3985
+ "联": 3752,
3986
+ "聖": 3753,
3987
+ "聘": 3754,
3988
+ "聚": 3755,
3989
+ "聞": 3756,
3990
+ "聡": 3757,
3991
+ "聪": 3758,
3992
+ "聯": 3759,
3993
+ "聰": 3760,
3994
+ "聲": 3761,
3995
+ "聿": 3762,
3996
+ "肇": 3763,
3997
+ "肖": 3764,
3998
+ "股": 3765,
3999
+ "肥": 3766,
4000
+ "肯": 3767,
4001
+ "育": 3768,
4002
+ "背": 3769,
4003
+ "胖": 3770,
4004
+ "胜": 3771,
4005
+ "胡": 3772,
4006
+ "胤": 3773,
4007
+ "能": 3774,
4008
+ "脇": 3775,
4009
+ "脩": 3776,
4010
+ "腰": 3777,
4011
+ "腾": 3778,
4012
+ "臣": 3779,
4013
+ "臧": 3780,
4014
+ "臨": 3781,
4015
+ "自": 3782,
4016
+ "至": 3783,
4017
+ "致": 3784,
4018
+ "臺": 3785,
4019
+ "臻": 3786,
4020
+ "臼": 3787,
4021
+ "與": 3788,
4022
+ "興": 3789,
4023
+ "舉": 3790,
4024
+ "舒": 3791,
4025
+ "舘": 3792,
4026
+ "舛": 3793,
4027
+ "舜": 3794,
4028
+ "舞": 3795,
4029
+ "舟": 3796,
4030
+ "舩": 3797,
4031
+ "航": 3798,
4032
+ "舫": 3799,
4033
+ "船": 3800,
4034
+ "艇": 3801,
4035
+ "良": 3802,
4036
+ "色": 3803,
4037
+ "艳": 3804,
4038
+ "艶": 3805,
4039
+ "艷": 3806,
4040
+ "艺": 3807,
4041
+ "艾": 3808,
4042
+ "芃": 3809,
4043
+ "芊": 3810,
4044
+ "芋": 3811,
4045
+ "芙": 3812,
4046
+ "芝": 3813,
4047
+ "芥": 3814,
4048
+ "芦": 3815,
4049
+ "芩": 3816,
4050
+ "芫": 3817,
4051
+ "芬": 3818,
4052
+ "芮": 3819,
4053
+ "芯": 3820,
4054
+ "花": 3821,
4055
+ "芳": 3822,
4056
+ "芷": 3823,
4057
+ "芸": 3824,
4058
+ "芹": 3825,
4059
+ "芽": 3826,
4060
+ "苅": 3827,
4061
+ "苇": 3828,
4062
+ "苏": 3829,
4063
+ "苑": 3830,
4064
+ "苓": 3831,
4065
+ "苗": 3832,
4066
+ "苡": 3833,
4067
+ "若": 3834,
4068
+ "苦": 3835,
4069
+ "英": 3836,
4070
+ "苹": 3837,
4071
+ "茂": 3838,
4072
+ "范": 3839,
4073
+ "茅": 3840,
4074
+ "茉": 3841,
4075
+ "茗": 3842,
4076
+ "茜": 3843,
4077
+ "茨": 3844,
4078
+ "茱": 3845,
4079
+ "茲": 3846,
4080
+ "茵": 3847,
4081
+ "茶": 3848,
4082
+ "茹": 3849,
4083
+ "荃": 3850,
4084
+ "草": 3851,
4085
+ "荏": 3852,
4086
+ "荒": 3853,
4087
+ "荔": 3854,
4088
+ "荘": 3855,
4089
+ "荣": 3856,
4090
+ "荧": 3857,
4091
+ "荷": 3858,
4092
+ "荻": 3859,
4093
+ "莉": 3860,
4094
+ "莊": 3861,
4095
+ "莎": 3862,
4096
+ "莓": 3863,
4097
+ "莘": 3864,
4098
+ "莛": 3865,
4099
+ "莞": 3866,
4100
+ "莫": 3867,
4101
+ "莱": 3868,
4102
+ "莲": 3869,
4103
+ "莹": 3870,
4104
+ "莺": 3871,
4105
+ "菀": 3872,
4106
+ "菁": 3873,
4107
+ "菅": 3874,
4108
+ "菇": 3875,
4109
+ "菊": 3876,
4110
+ "菖": 3877,
4111
+ "菘": 3878,
4112
+ "菜": 3879,
4113
+ "菡": 3880,
4114
+ "華": 3881,
4115
+ "菱": 3882,
4116
+ "菲": 3883,
4117
+ "萊": 3884,
4118
+ "萌": 3885,
4119
+ "萍": 3886,
4120
+ "营": 3887,
4121
+ "萧": 3888,
4122
+ "萨": 3889,
4123
+ "萩": 3890,
4124
+ "萬": 3891,
4125
+ "萱": 3892,
4126
+ "落": 3893,
4127
+ "葆": 3894,
4128
+ "葉": 3895,
4129
+ "著": 3896,
4130
+ "葛": 3897,
4131
+ "董": 3898,
4132
+ "葦": 3899,
4133
+ "葳": 3900,
4134
+ "葵": 3901,
4135
+ "葶": 3902,
4136
+ "蒂": 3903,
4137
+ "蒋": 3904,
4138
+ "蒔": 3905,
4139
+ "蒙": 3906,
4140
+ "蒨": 3907,
4141
+ "蒲": 3908,
4142
+ "蒼": 3909,
4143
+ "蓁": 3910,
4144
+ "蓉": 3911,
4145
+ "蓑": 3912,
4146
+ "蓓": 3913,
4147
+ "蓝": 3914,
4148
+ "蓬": 3915,
4149
+ "蓮": 3916,
4150
+ "蔓": 3917,
4151
+ "蔚": 3918,
4152
+ "蔡": 3919,
4153
+ "蔣": 3920,
4154
+ "蔭": 3921,
4155
+ "蔵": 3922,
4156
+ "蕊": 3923,
4157
+ "蕎": 3924,
4158
+ "蕓": 3925,
4159
+ "蕙": 3926,
4160
+ "蕭": 3927,
4161
+ "蕴": 3928,
4162
+ "蕾": 3929,
4163
+ "薄": 3930,
4164
+ "薇": 3931,
4165
+ "薏": 3932,
4166
+ "薗": 3933,
4167
+ "薙": 3934,
4168
+ "薛": 3935,
4169
+ "薩": 3936,
4170
+ "薪": 3937,
4171
+ "薫": 3938,
4172
+ "薬": 3939,
4173
+ "薮": 3940,
4174
+ "薰": 3941,
4175
+ "藍": 3942,
4176
+ "藏": 3943,
4177
+ "藝": 3944,
4178
+ "藤": 3945,
4179
+ "藩": 3946,
4180
+ "藪": 3947,
4181
+ "蘇": 3948,
4182
+ "蘊": 3949,
4183
+ "蘋": 3950,
4184
+ "蘭": 3951,
4185
+ "蘿": 3952,
4186
+ "虎": 3953,
4187
+ "虔": 3954,
4188
+ "虞": 3955,
4189
+ "虹": 3956,
4190
+ "蛋": 3957,
4191
+ "蛯": 3958,
4192
+ "蜀": 3959,
4193
+ "蜂": 3960,
4194
+ "蜜": 3961,
4195
+ "蝦": 3962,
4196
+ "蝶": 3963,
4197
+ "融": 3964,
4198
+ "螢": 3965,
4199
+ "蟹": 3966,
4200
+ "行": 3967,
4201
+ "衍": 3968,
4202
+ "衛": 3969,
4203
+ "衞": 3970,
4204
+ "衡": 3971,
4205
+ "衣": 3972,
4206
+ "表": 3973,
4207
+ "衿": 3974,
4208
+ "袁": 3975,
4209
+ "袋": 3976,
4210
+ "袖": 3977,
4211
+ "裔": 3978,
4212
+ "裕": 3979,
4213
+ "裘": 3980,
4214
+ "裴": 3981,
4215
+ "襄": 3982,
4216
+ "西": 3983,
4217
+ "覀": 3984,
4218
+ "要": 3985,
4219
+ "見": 3986,
4220
+ "規": 3987,
4221
+ "視": 3988,
4222
+ "覚": 3989,
4223
+ "親": 3990,
4224
+ "観": 3991,
4225
+ "覺": 3992,
4226
+ "觀": 3993,
4227
+ "见": 3994,
4228
+ "观": 3995,
4229
+ "觉": 3996,
4230
+ "角": 3997,
4231
+ "解": 3998,
4232
+ "言": 3999,
4233
+ "計": 4000,
4234
+ "訓": 4001,
4235
+ "記": 4002,
4236
+ "訪": 4003,
4237
+ "設": 4004,
4238
+ "許": 4005,
4239
+ "証": 4006,
4240
+ "詒": 4007,
4241
+ "詔": 4008,
4242
+ "評": 4009,
4243
+ "詞": 4010,
4244
+ "詠": 4011,
4245
+ "詣": 4012,
4246
+ "詩": 4013,
4247
+ "詮": 4014,
4248
+ "詰": 4015,
4249
+ "詳": 4016,
4250
+ "詹": 4017,
4251
+ "誉": 4018,
4252
+ "誌": 4019,
4253
+ "誓": 4020,
4254
+ "語": 4021,
4255
+ "誠": 4022,
4256
+ "誼": 4023,
4257
+ "調": 4024,
4258
+ "諄": 4025,
4259
+ "諏": 4026,
4260
+ "諒": 4027,
4261
+ "論": 4028,
4262
+ "諠": 4029,
4263
+ "諦": 4030,
4264
+ "諭": 4031,
4265
+ "諸": 4032,
4266
+ "諺": 4033,
4267
+ "諾": 4034,
4268
+ "謀": 4035,
4269
+ "謙": 4036,
4270
+ "謝": 4037,
4271
+ "謹": 4038,
4272
+ "證": 4039,
4273
+ "識": 4040,
4274
+ "譚": 4041,
4275
+ "譯": 4042,
4276
+ "議": 4043,
4277
+ "譲": 4044,
4278
+ "護": 4045,
4279
+ "譽": 4046,
4280
+ "讚": 4047,
4281
+ "计": 4048,
4282
+ "训": 4049,
4283
+ "记": 4050,
4284
+ "许": 4051,
4285
+ "译": 4052,
4286
+ "诗": 4053,
4287
+ "诚": 4054,
4288
+ "语": 4055,
4289
+ "诸": 4056,
4290
+ "诺": 4057,
4291
+ "谊": 4058,
4292
+ "谢": 4059,
4293
+ "谦": 4060,
4294
+ "谨": 4061,
4295
+ "谭": 4062,
4296
+ "谷": 4063,
4297
+ "豆": 4064,
4298
+ "豈": 4065,
4299
+ "豊": 4066,
4300
+ "豐": 4067,
4301
+ "豔": 4068,
4302
+ "象": 4069,
4303
+ "豪": 4070,
4304
+ "豫": 4071,
4305
+ "豬": 4072,
4306
+ "貓": 4073,
4307
+ "貝": 4074,
4308
+ "貞": 4075,
4309
+ "財": 4076,
4310
+ "貢": 4077,
4311
+ "貫": 4078,
4312
+ "貳": 4079,
4313
+ "貴": 4080,
4314
+ "費": 4081,
4315
+ "貽": 4082,
4316
+ "貿": 4083,
4317
+ "賀": 4084,
4318
+ "資": 4085,
4319
+ "賈": 4086,
4320
+ "賓": 4087,
4321
+ "賜": 4088,
4322
+ "賞": 4089,
4323
+ "賢": 4090,
4324
+ "賦": 4091,
4325
+ "質": 4092,
4326
+ "賴": 4093,
4327
+ "賽": 4094,
4328
+ "贊": 4095,
4329
+ "贏": 4096,
4330
+ "贝": 4097,
4331
+ "贞": 4098,
4332
+ "财": 4099,
4333
+ "贤": 4100,
4334
+ "贵": 4101,
4335
+ "费": 4102,
4336
+ "贺": 4103,
4337
+ "贻": 4104,
4338
+ "贾": 4105,
4339
+ "赐": 4106,
4340
+ "赖": 4107,
4341
+ "赛": 4108,
4342
+ "赞": 4109,
4343
+ "赟": 4110,
4344
+ "赤": 4111,
4345
+ "赫": 4112,
4346
+ "走": 4113,
4347
+ "赵": 4114,
4348
+ "起": 4115,
4349
+ "超": 4116,
4350
+ "越": 4117,
4351
+ "趙": 4118,
4352
+ "足": 4119,
4353
+ "跃": 4120,
4354
+ "路": 4121,
4355
+ "躍": 4122,
4356
+ "身": 4123,
4357
+ "車": 4124,
4358
+ "軍": 4125,
4359
+ "軒": 4126,
4360
+ "軽": 4127,
4361
+ "輔": 4128,
4362
+ "輝": 4129,
4363
+ "輪": 4130,
4364
+ "輿": 4131,
4365
+ "轉": 4132,
4366
+ "轟": 4133,
4367
+ "车": 4134,
4368
+ "轩": 4135,
4369
+ "轶": 4136,
4370
+ "辉": 4137,
4371
+ "辛": 4138,
4372
+ "辰": 4139,
4373
+ "農": 4140,
4374
+ "辺": 4141,
4375
+ "辻": 4142,
4376
+ "込": 4143,
4377
+ "达": 4144,
4378
+ "迅": 4145,
4379
+ "过": 4146,
4380
+ "迎": 4147,
4381
+ "运": 4148,
4382
+ "近": 4149,
4383
+ "进": 4150,
4384
+ "远": 4151,
4385
+ "连": 4152,
4386
+ "迟": 4153,
4387
+ "迦": 4154,
4388
+ "迪": 4155,
4389
+ "迫": 4156,
4390
+ "述": 4157,
4391
+ "迷": 4158,
4392
+ "迺": 4159,
4393
+ "追": 4160,
4394
+ "送": 4161,
4395
+ "选": 4162,
4396
+ "逊": 4163,
4397
+ "逍": 4164,
4398
+ "透": 4165,
4399
+ "通": 4166,
4400
+ "速": 4167,
4401
+ "造": 4168,
4402
+ "逢": 4169,
4403
+ "連": 4170,
4404
+ "���": 4171,
4405
+ "逵": 4172,
4406
+ "逸": 4173,
4407
+ "遂": 4174,
4408
+ "遇": 4175,
4409
+ "遊": 4176,
4410
+ "運": 4177,
4411
+ "過": 4178,
4412
+ "道": 4179,
4413
+ "達": 4180,
4414
+ "遙": 4181,
4415
+ "遠": 4182,
4416
+ "遥": 4183,
4417
+ "適": 4184,
4418
+ "遵": 4185,
4419
+ "選": 4186,
4420
+ "遼": 4187,
4421
+ "邉": 4188,
4422
+ "邊": 4189,
4423
+ "邑": 4190,
4424
+ "邓": 4191,
4425
+ "邢": 4192,
4426
+ "那": 4193,
4427
+ "邦": 4194,
4428
+ "邨": 4195,
4429
+ "邱": 4196,
4430
+ "邵": 4197,
4431
+ "邹": 4198,
4432
+ "郁": 4199,
4433
+ "郎": 4200,
4434
+ "郑": 4201,
4435
+ "郝": 4202,
4436
+ "郡": 4203,
4437
+ "部": 4204,
4438
+ "郭": 4205,
4439
+ "郷": 4206,
4440
+ "都": 4207,
4441
+ "鄉": 4208,
4442
+ "鄒": 4209,
4443
+ "鄧": 4210,
4444
+ "鄭": 4211,
4445
+ "酉": 4212,
4446
+ "配": 4213,
4447
+ "酒": 4214,
4448
+ "酸": 4215,
4449
+ "醇": 4216,
4450
+ "醒": 4217,
4451
+ "采": 4218,
4452
+ "释": 4219,
4453
+ "釋": 4220,
4454
+ "里": 4221,
4455
+ "重": 4222,
4456
+ "野": 4223,
4457
+ "量": 4224,
4458
+ "金": 4225,
4459
+ "釗": 4226,
4460
+ "釘": 4227,
4461
+ "釜": 4228,
4462
+ "針": 4229,
4463
+ "釧": 4230,
4464
+ "鈞": 4231,
4465
+ "鈴": 4232,
4466
+ "鈺": 4233,
4467
+ "鈿": 4234,
4468
+ "鉄": 4235,
4469
+ "鉅": 4236,
4470
+ "鉉": 4237,
4471
+ "鉦": 4238,
4472
+ "鉴": 4239,
4473
+ "銀": 4240,
4474
+ "銅": 4241,
4475
+ "銓": 4242,
4476
+ "銘": 4243,
4477
+ "銜": 4244,
4478
+ "銨": 4245,
4479
+ "銮": 4246,
4480
+ "銳": 4247,
4481
+ "鋆": 4248,
4482
+ "鋐": 4249,
4483
+ "鋒": 4250,
4484
+ "鋭": 4251,
4485
+ "鋼": 4252,
4486
+ "錄": 4253,
4487
+ "錕": 4254,
4488
+ "錚": 4255,
4489
+ "錞": 4256,
4490
+ "錠": 4257,
4491
+ "錡": 4258,
4492
+ "錢": 4259,
4493
+ "錦": 4260,
4494
+ "錩": 4261,
4495
+ "錫": 4262,
4496
+ "鍇": 4263,
4497
+ "鍋": 4264,
4498
+ "鍛": 4265,
4499
+ "鍬": 4266,
4500
+ "鍵": 4267,
4501
+ "鍾": 4268,
4502
+ "鎂": 4269,
4503
+ "鎌": 4270,
4504
+ "鎔": 4271,
4505
+ "鎧": 4272,
4506
+ "鎮": 4273,
4507
+ "鎰": 4274,
4508
+ "鏑": 4275,
4509
+ "鏗": 4276,
4510
+ "鏞": 4277,
4511
+ "鏡": 4278,
4512
+ "鏵": 4279,
4513
+ "鐘": 4280,
4514
+ "鐵": 4281,
4515
+ "鐸": 4282,
4516
+ "鑑": 4283,
4517
+ "鑫": 4284,
4518
+ "鑽": 4285,
4519
+ "鑾": 4286,
4520
+ "钊": 4287,
4521
+ "钟": 4288,
4522
+ "钢": 4289,
4523
+ "钦": 4290,
4524
+ "钧": 4291,
4525
+ "钰": 4292,
4526
+ "钱": 4293,
4527
+ "钿": 4294,
4528
+ "铁": 4295,
4529
+ "铃": 4296,
4530
+ "铎": 4297,
4531
+ "铖": 4298,
4532
+ "铨": 4299,
4533
+ "铭": 4300,
4534
+ "铮": 4301,
4535
+ "银": 4302,
4536
+ "铿": 4303,
4537
+ "锋": 4304,
4538
+ "锐": 4305,
4539
+ "锟": 4306,
4540
+ "锡": 4307,
4541
+ "锦": 4308,
4542
+ "键": 4309,
4543
+ "锴": 4310,
4544
+ "镇": 4311,
4545
+ "镜": 4312,
4546
+ "長": 4313,
4547
+ "长": 4314,
4548
+ "門": 4315,
4549
+ "開": 4316,
4550
+ "閎": 4317,
4551
+ "閑": 4318,
4552
+ "閒": 4319,
4553
+ "間": 4320,
4554
+ "閔": 4321,
4555
+ "関": 4322,
4556
+ "閣": 4323,
4557
+ "閩": 4324,
4558
+ "閻": 4325,
4559
+ "關": 4326,
4560
+ "门": 4327,
4561
+ "闫": 4328,
4562
+ "问": 4329,
4563
+ "闻": 4330,
4564
+ "阎": 4331,
4565
+ "阡": 4332,
4566
+ "阪": 4333,
4567
+ "阮": 4334,
4568
+ "阳": 4335,
4569
+ "阿": 4336,
4570
+ "际": 4337,
4571
+ "陆": 4338,
4572
+ "陈": 4339,
4573
+ "陌": 4340,
4574
+ "降": 4341,
4575
+ "陞": 4342,
4576
+ "院": 4343,
4577
+ "陣": 4344,
4578
+ "陳": 4345,
4579
+ "陵": 4346,
4580
+ "陶": 4347,
4581
+ "陸": 4348,
4582
+ "陽": 4349,
4583
+ "隅": 4350,
4584
+ "隆": 4351,
4585
+ "隈": 4352,
4586
+ "階": 4353,
4587
+ "際": 4354,
4588
+ "隨": 4355,
4589
+ "隱": 4356,
4590
+ "隻": 4357,
4591
+ "隼": 4358,
4592
+ "隽": 4359,
4593
+ "雀": 4360,
4594
+ "雁": 4361,
4595
+ "雄": 4362,
4596
+ "雅": 4363,
4597
+ "集": 4364,
4598
+ "雋": 4365,
4599
+ "雍": 4366,
4600
+ "雙": 4367,
4601
+ "雛": 4368,
4602
+ "難": 4369,
4603
+ "雨": 4370,
4604
+ "雪": 4371,
4605
+ "雯": 4372,
4606
+ "雲": 4373,
4607
+ "零": 4374,
4608
+ "雷": 4375,
4609
+ "電": 4376,
4610
+ "霄": 4377,
4611
+ "霆": 4378,
4612
+ "震": 4379,
4613
+ "霈": 4380,
4614
+ "霊": 4381,
4615
+ "霍": 4382,
4616
+ "霏": 4383,
4617
+ "霓": 4384,
4618
+ "霖": 4385,
4619
+ "霙": 4386,
4620
+ "霜": 4387,
4621
+ "霞": 4388,
4622
+ "霧": 4389,
4623
+ "露": 4390,
4624
+ "霸": 4391,
4625
+ "霽": 4392,
4626
+ "靄": 4393,
4627
+ "靈": 4394,
4628
+ "青": 4395,
4629
+ "靓": 4396,
4630
+ "靖": 4397,
4631
+ "静": 4398,
4632
+ "靚": 4399,
4633
+ "靜": 4400,
4634
+ "非": 4401,
4635
+ "面": 4402,
4636
+ "革": 4403,
4637
+ "鞠": 4404,
4638
+ "韋": 4405,
4639
+ "韓": 4406,
4640
+ "韜": 4407,
4641
+ "韦": 4408,
4642
+ "韩": 4409,
4643
+ "韬": 4410,
4644
+ "音": 4411,
4645
+ "韵": 4412,
4646
+ "韶": 4413,
4647
+ "韻": 4414,
4648
+ "響": 4415,
4649
+ "頂": 4416,
4650
+ "順": 4417,
4651
+ "須": 4418,
4652
+ "頌": 4419,
4653
+ "頎": 4420,
4654
+ "頓": 4421,
4655
+ "領": 4422,
4656
+ "頡": 4423,
4657
+ "頤": 4424,
4658
+ "頭": 4425,
4659
+ "頴": 4426,
4660
+ "頻": 4427,
4661
+ "頼": 4428,
4662
+ "額": 4429,
4663
+ "顏": 4430,
4664
+ "顕": 4431,
4665
+ "顗": 4432,
4666
+ "願": 4433,
4667
+ "類": 4434,
4668
+ "顥": 4435,
4669
+ "顧": 4436,
4670
+ "顯": 4437,
4671
+ "项": 4438,
4672
+ "顺": 4439,
4673
+ "顾": 4440,
4674
+ "顿": 4441,
4675
+ "颂": 4442,
4676
+ "领": 4443,
4677
+ "颐": 4444,
4678
+ "颖": 4445,
4679
+ "颜": 4446,
4680
+ "颢": 4447,
4681
+ "風": 4448,
4682
+ "颯": 4449,
4683
+ "飄": 4450,
4684
+ "风": 4451,
4685
+ "飘": 4452,
4686
+ "飛": 4453,
4687
+ "飞": 4454,
4688
+ "飯": 4455,
4689
+ "飼": 4456,
4690
+ "餅": 4457,
4691
+ "養": 4458,
4692
+ "餘": 4459,
4693
+ "館": 4460,
4694
+ "饶": 4461,
4695
+ "首": 4462,
4696
+ "香": 4463,
4697
+ "馥": 4464,
4698
+ "馨": 4465,
4699
+ "馬": 4466,
4700
+ "馮": 4467,
4701
+ "馳": 4468,
4702
+ "駒": 4469,
4703
+ "駱": 4470,
4704
+ "駿": 4471,
4705
+ "騎": 4472,
4706
+ "騏": 4473,
4707
+ "騫": 4474,
4708
+ "騰": 4475,
4709
+ "驊": 4476,
4710
+ "驛": 4477,
4711
+ "马": 4478,
4712
+ "驰": 4479,
4713
+ "驹": 4480,
4714
+ "骁": 4481,
4715
+ "骅": 4482,
4716
+ "骆": 4483,
4717
+ "骏": 4484,
4718
+ "骥": 4485,
4719
+ "骨": 4486,
4720
+ "高": 4487,
4721
+ "髙": 4488,
4722
+ "鬼": 4489,
4723
+ "魁": 4490,
4724
+ "魂": 4491,
4725
+ "魏": 4492,
4726
+ "魚": 4493,
4727
+ "魯": 4494,
4728
+ "鮎": 4495,
4729
+ "鮫": 4496,
4730
+ "鮮": 4497,
4731
+ "鯉": 4498,
4732
+ "鯨": 4499,
4733
+ "鲁": 4500,
4734
+ "鲍": 4501,
4735
+ "鲜": 4502,
4736
+ "鳥": 4503,
4737
+ "鳩": 4504,
4738
+ "鳯": 4505,
4739
+ "鳳": 4506,
4740
+ "鳴": 4507,
4741
+ "鴨": 4508,
4742
+ "鴻": 4509,
4743
+ "鵜": 4510,
4744
+ "鵬": 4511,
4745
+ "鶯": 4512,
4746
+ "鶴": 4513,
4747
+ "鷲": 4514,
4748
+ "鷹": 4515,
4749
+ "鸞": 4516,
4750
+ "鸣": 4517,
4751
+ "鸥": 4518,
4752
+ "鸽": 4519,
4753
+ "鸾": 4520,
4754
+ "鸿": 4521,
4755
+ "鹏": 4522,
4756
+ "鹤": 4523,
4757
+ "鹰": 4524,
4758
+ "鹿": 4525,
4759
+ "麒": 4526,
4760
+ "麗": 4527,
4761
+ "麟": 4528,
4762
+ "麥": 4529,
4763
+ "麦": 4530,
4764
+ "麻": 4531,
4765
+ "麿": 4532,
4766
+ "黃": 4533,
4767
+ "黄": 4534,
4768
+ "黎": 4535,
4769
+ "黑": 4536,
4770
+ "黒": 4537,
4771
+ "默": 4538,
4772
+ "黛": 4539,
4773
+ "點": 4540,
4774
+ "鼎": 4541,
4775
+ "鼻": 4542,
4776
+ "齊": 4543,
4777
+ "齋": 4544,
4778
+ "齐": 4545,
4779
+ "齡": 4546,
4780
+ "龄": 4547,
4781
+ "龍": 4548,
4782
+ "龐": 4549,
4783
+ "龔": 4550,
4784
+ "龙": 4551,
4785
+ "龚": 4552,
4786
+ "ꙮ": 4553,
4787
+ "ꧾ": 4554,
4788
+ "ꭰ": 4555,
4789
+ "ꭱ": 4556,
4790
+ "ꭵ": 4557,
4791
+ "ꭶ": 4558,
4792
+ "ꭷ": 4559,
4793
+ "ꭹ": 4560,
4794
+ "ꭺ": 4561,
4795
+ "ꭼ": 4562,
4796
+ "ꭿ": 4563,
4797
+ "ꮀ": 4564,
4798
+ "ꮄ": 4565,
4799
+ "ꮆ": 4566,
4800
+ "ꮇ": 4567,
4801
+ "ꮋ": 4568,
4802
+ "ꮍ": 4569,
4803
+ "ꮎ": 4570,
4804
+ "ꮏ": 4571,
4805
+ "ꮑ": 4572,
4806
+ "ꮒ": 4573,
4807
+ "ꮓ": 4574,
4808
+ "ꮙ": 4575,
4809
+ "ꮛ": 4576,
4810
+ "ꮜ": 4577,
4811
+ "ꮢ": 4578,
4812
+ "ꮤ": 4579,
4813
+ "ꮥ": 4580,
4814
+ "ꮦ": 4581,
4815
+ "ꮧ": 4582,
4816
+ "ꮪ": 4583,
4817
+ "ꮭ": 4584,
4818
+ "ꮮ": 4585,
4819
+ "ꮲ": 4586,
4820
+ "ꮶ": 4587,
4821
+ "ꮸ": 4588,
4822
+ "ꮻ": 4589,
4823
+ "ꮼ": 4590,
4824
+ "가": 4591,
4825
+ "각": 4592,
4826
+ "감": 4593,
4827
+ "갑": 4594,
4828
+ "강": 4595,
4829
+ "거": 4596,
4830
+ "건": 4597,
4831
+ "걸": 4598,
4832
+ "결": 4599,
4833
+ "겸": 4600,
4834
+ "경": 4601,
4835
+ "계": 4602,
4836
+ "고": 4603,
4837
+ "곤": 4604,
4838
+ "공": 4605,
4839
+ "곽": 4606,
4840
+ "관": 4607,
4841
+ "광": 4608,
4842
+ "교": 4609,
4843
+ "구": 4610,
4844
+ "국": 4611,
4845
+ "군": 4612,
4846
+ "궁": 4613,
4847
+ "권": 4614,
4848
+ "귀": 4615,
4849
+ "규": 4616,
4850
+ "균": 4617,
4851
+ "그": 4618,
4852
+ "극": 4619,
4853
+ "근": 4620,
4854
+ "금": 4621,
4855
+ "기": 4622,
4856
+ "길": 4623,
4857
+ "김": 4624,
4858
+ "나": 4625,
4859
+ "낙": 4626,
4860
+ "난": 4627,
4861
+ "남": 4628,
4862
+ "내": 4629,
4863
+ "네": 4630,
4864
+ "녀": 4631,
4865
+ "년": 4632,
4866
+ "녕": 4633,
4867
+ "노": 4634,
4868
+ "농": 4635,
4869
+ "누": 4636,
4870
+ "늘": 4637,
4871
+ "능": 4638,
4872
+ "니": 4639,
4873
+ "님": 4640,
4874
+ "다": 4641,
4875
+ "단": 4642,
4876
+ "달": 4643,
4877
+ "담": 4644,
4878
+ "대": 4645,
4879
+ "더": 4646,
4880
+ "덕": 4647,
4881
+ "도": 4648,
4882
+ "돈": 4649,
4883
+ "동": 4650,
4884
+ "두": 4651,
4885
+ "드": 4652,
4886
+ "득": 4653,
4887
+ "디": 4654,
4888
+ "라": 4655,
4889
+ "락": 4656,
4890
+ "란": 4657,
4891
+ "람": 4658,
4892
+ "랑": 4659,
4893
+ "래": 4660,
4894
+ "량": 4661,
4895
+ "레": 4662,
4896
+ "련": 4663,
4897
+ "렬": 4664,
4898
+ "령": 4665,
4899
+ "례": 4666,
4900
+ "로": 4667,
4901
+ "록": 4668,
4902
+ "룡": 4669,
4903
+ "루": 4670,
4904
+ "류": 4671,
4905
+ "륜": 4672,
4906
+ "률": 4673,
4907
+ "르": 4674,
4908
+ "름": 4675,
4909
+ "리": 4676,
4910
+ "린": 4677,
4911
+ "림": 4678,
4912
+ "립": 4679,
4913
+ "마": 4680,
4914
+ "만": 4681,
4915
+ "말": 4682,
4916
+ "매": 4683,
4917
+ "맹": 4684,
4918
+ "면": 4685,
4919
+ "명": 4686,
4920
+ "모": 4687,
4921
+ "목": 4688,
4922
+ "몽": 4689,
4923
+ "무": 4690,
4924
+ "묵": 4691,
4925
+ "문": 4692,
4926
+ "미": 4693,
4927
+ "민": 4694,
4928
+ "바": 4695,
4929
+ "박": 4696,
4930
+ "반": 4697,
4931
+ "방": 4698,
4932
+ "배": 4699,
4933
+ "백": 4700,
4934
+ "범": 4701,
4935
+ "법": 4702,
4936
+ "변": 4703,
4937
+ "별": 4704,
4938
+ "병": 4705,
4939
+ "보": 4706,
4940
+ "복": 4707,
4941
+ "본": 4708,
4942
+ "봉": 4709,
4943
+ "부": 4710,
4944
+ "분": 4711,
4945
+ "브": 4712,
4946
+ "비": 4713,
4947
+ "빈": 4714,
4948
+ "사": 4715,
4949
+ "산": 4716,
4950
+ "삼": 4717,
4951
+ "상": 4718,
4952
+ "새": 4719,
4953
+ "생": 4720,
4954
+ "서": 4721,
4955
+ "석": 4722,
4956
+ "선": 4723,
4957
+ "설": 4724,
4958
+ "섭": 4725,
4959
+ "성": 4726,
4960
+ "세": 4727,
4961
+ "소": 4728,
4962
+ "손": 4729,
4963
+ "솔": 4730,
4964
+ "송": 4731,
4965
+ "수": 4732,
4966
+ "숙": 4733,
4967
+ "순": 4734,
4968
+ "술": 4735,
4969
+ "숭": 4736,
4970
+ "스": 4737,
4971
+ "슬": 4738,
4972
+ "승": 4739,
4973
+ "시": 4740,
4974
+ "식": 4741,
4975
+ "신": 4742,
4976
+ "실": 4743,
4977
+ "심": 4744,
4978
+ "아": 4745,
4979
+ "악": 4746,
4980
+ "안": 4747,
4981
+ "알": 4748,
4982
+ "암": 4749,
4983
+ "애": 4750,
4984
+ "야": 4751,
4985
+ "양": 4752,
4986
+ "어": 4753,
4987
+ "억": 4754,
4988
+ "언": 4755,
4989
+ "엄": 4756,
4990
+ "업": 4757,
4991
+ "에": 4758,
4992
+ "엘": 4759,
4993
+ "여": 4760,
4994
+ "연": 4761,
4995
+ "열": 4762,
4996
+ "염": 4763,
4997
+ "엽": 4764,
4998
+ "영": 4765,
4999
+ "예": 4766,
5000
+ "오": 4767,
5001
+ "옥": 4768,
5002
+ "온": 4769,
5003
+ "완": 4770,
5004
+ "왕": 4771,
5005
+ "외": 4772,
5006
+ "요": 4773,
5007
+ "용": 4774,
5008
+ "우": 4775,
5009
+ "욱": 4776,
5010
+ "운": 4777,
5011
+ "울": 4778,
5012
+ "웅": 4779,
5013
+ "원": 4780,
5014
+ "월": 4781,
5015
+ "위": 4782,
5016
+ "유": 4783,
5017
+ "육": 4784,
5018
+ "윤": 4785,
5019
+ "율": 4786,
5020
+ "은": 4787,
5021
+ "을": 4788,
5022
+ "음": 4789,
5023
+ "응": 4790,
5024
+ "의": 4791,
5025
+ "이": 4792,
5026
+ "익": 4793,
5027
+ "인": 4794,
5028
+ "일": 4795,
5029
+ "임": 4796,
5030
+ "자": 4797,
5031
+ "작": 4798,
5032
+ "장": 4799,
5033
+ "재": 4800,
5034
+ "전": 4801,
5035
+ "점": 4802,
5036
+ "정": 4803,
5037
+ "제": 4804,
5038
+ "조": 4805,
5039
+ "종": 4806,
5040
+ "좌": 4807,
5041
+ "주": 4808,
5042
+ "준": 4809,
5043
+ "중": 4810,
5044
+ "즈": 4811,
5045
+ "증": 4812,
5046
+ "지": 4813,
5047
+ "직": 4814,
5048
+ "진": 4815,
5049
+ "집": 4816,
5050
+ "차": 4817,
5051
+ "찬": 4818,
5052
+ "창": 4819,
5053
+ "채": 4820,
5054
+ "천": 4821,
5055
+ "철": 4822,
5056
+ "청": 4823,
5057
+ "초": 4824,
5058
+ "최": 4825,
5059
+ "추": 4826,
5060
+ "춘": 4827,
5061
+ "출": 4828,
5062
+ "충": 4829,
5063
+ "치": 4830,
5064
+ "칠": 4831,
5065
+ "카": 4832,
5066
+ "케": 4833,
5067
+ "크": 4834,
5068
+ "키": 4835,
5069
+ "타": 4836,
5070
+ "탁": 4837,
5071
+ "태": 4838,
5072
+ "택": 4839,
5073
+ "터": 4840,
5074
+ "트": 4841,
5075
+ "티": 4842,
5076
+ "파": 4843,
5077
+ "판": 4844,
5078
+ "팔": 4845,
5079
+ "평": 4846,
5080
+ "포": 4847,
5081
+ "표": 4848,
5082
+ "풍": 4849,
5083
+ "피": 4850,
5084
+ "필": 4851,
5085
+ "하": 4852,
5086
+ "학": 4853,
5087
+ "한": 4854,
5088
+ "함": 4855,
5089
+ "항": 4856,
5090
+ "해": 4857,
5091
+ "행": 4858,
5092
+ "향": 4859,
5093
+ "허": 4860,
5094
+ "헌": 4861,
5095
+ "혁": 4862,
5096
+ "현": 4863,
5097
+ "협": 4864,
5098
+ "형": 4865,
5099
+ "혜": 4866,
5100
+ "호": 4867,
5101
+ "홍": 4868,
5102
+ "화": 4869,
5103
+ "환": 4870,
5104
+ "황": 4871,
5105
+ "회": 4872,
5106
+ "효": 4873,
5107
+ "후": 4874,
5108
+ "훈": 4875,
5109
+ "휘": 4876,
5110
+ "휴": 4877,
5111
+ "흔": 4878,
5112
+ "흠": 4879,
5113
+ "흥": 4880,
5114
+ "희": 4881,
5115
+ "히": 4882,
5116
+ "﨑": 4883,
5117
+ "ﭐ": 4884,
5118
+ "ﭑ": 4885,
5119
+ "ﭔ": 4886,
5120
+ "ﭕ": 4887,
5121
+ "ﭘ": 4888,
5122
+ "ﭡ": 4889,
5123
+ "ﭤ": 4890,
5124
+ "ﭭ": 4891,
5125
+ "ﭱ": 4892,
5126
+ "ﭼ": 4893,
5127
+ "ﭽ": 4894,
5128
+ "ﮉ": 4895,
5129
+ "ﮊ": 4896,
5130
+ "ﮍ": 4897,
5131
+ "ﮏ": 4898,
5132
+ "ﮐ": 4899,
5133
+ "ﮑ": 4900,
5134
+ "ﮒ": 4901,
5135
+ "ﮓ": 4902,
5136
+ "ﮔ": 4903,
5137
+ "ﮕ": 4904,
5138
+ "ﮥ": 4905,
5139
+ "ﮧ": 4906,
5140
+ "ﮨ": 4907,
5141
+ "ﮩ": 4908,
5142
+ "ﮪ": 4909,
5143
+ "ﮫ": 4910,
5144
+ "ﮭ": 4911,
5145
+ "ﮮ": 4912,
5146
+ "ﮯ": 4913,
5147
+ "ﮰ": 4914,
5148
+ "ﮱ": 4915,
5149
+ "ﯚ": 4916,
5150
+ "ﯛ": 4917,
5151
+ "ﯜ": 4918,
5152
+ "ﯝ": 4919,
5153
+ "ﯞ": 4920,
5154
+ "ﯠ": 4921,
5155
+ "ﯡ": 4922,
5156
+ "ﯢ": 4923,
5157
+ "ﯥ": 4924,
5158
+ "ﯧ": 4925,
5159
+ "ﯼ": 4926,
5160
+ "ﯽ": 4927,
5161
+ "ﯾ": 4928,
5162
+ "ﯿ": 4929,
5163
+ "ﱞ": 4930,
5164
+ "ﱟ": 4931,
5165
+ "﴾": 4932,
5166
+ "﴿": 4933,
5167
+ "ﷻ": 4934,
5168
+ "︠": 4935,
5169
+ "︡": 4936,
5170
+ "ﹷ": 4937,
5171
+ "ﹺ": 4938,
5172
+ "ﹻ": 4939,
5173
+ "ﹾ": 4940,
5174
+ "ﺀ": 4941,
5175
+ "ﺁ": 4942,
5176
+ "ﺂ": 4943,
5177
+ "ﺃ": 4944,
5178
+ "ﺄ": 4945,
5179
+ "ﺅ": 4946,
5180
+ "ﺆ": 4947,
5181
+ "ﺇ": 4948,
5182
+ "ﺈ": 4949,
5183
+ "ﺉ": 4950,
5184
+ "ﺊ": 4951,
5185
+ "ﺋ": 4952,
5186
+ "ﺌ": 4953,
5187
+ "ﺍ": 4954,
5188
+ "ﺎ": 4955,
5189
+ "ﺏ": 4956,
5190
+ "ﺐ": 4957,
5191
+ "ﺑ": 4958,
5192
+ "ﺒ": 4959,
5193
+ "ﺓ": 4960,
5194
+ "ﺔ": 4961,
5195
+ "ﺕ": 4962,
5196
+ "ﺖ": 4963,
5197
+ "ﺗ": 4964,
5198
+ "ﺘ": 4965,
5199
+ "ﺙ": 4966,
5200
+ "ﺚ": 4967,
5201
+ "ﺛ": 4968,
5202
+ "ﺜ": 4969,
5203
+ "ﺝ": 4970,
5204
+ "ﺞ": 4971,
5205
+ "ﺟ": 4972,
5206
+ "ﺠ": 4973,
5207
+ "ﺡ": 4974,
5208
+ "ﺢ": 4975,
5209
+ "ﺣ": 4976,
5210
+ "ﺤ": 4977,
5211
+ "ﺥ": 4978,
5212
+ "ﺦ": 4979,
5213
+ "ﺧ": 4980,
5214
+ "ﺨ": 4981,
5215
+ "ﺩ": 4982,
5216
+ "ﺪ": 4983,
5217
+ "ﺫ": 4984,
5218
+ "ﺬ": 4985,
5219
+ "ﺭ": 4986,
5220
+ "ﺮ": 4987,
5221
+ "ﺯ": 4988,
5222
+ "ﺰ": 4989,
5223
+ "ﺱ": 4990,
5224
+ "ﺲ": 4991,
5225
+ "ﺳ": 4992,
5226
+ "ﺴ": 4993,
5227
+ "ﺵ": 4994,
5228
+ "ﺶ": 4995,
5229
+ "ﺷ": 4996,
5230
+ "ﺸ": 4997,
5231
+ "ﺹ": 4998,
5232
+ "ﺺ": 4999,
5233
+ "ﺻ": 5000,
5234
+ "ﺼ": 5001,
5235
+ "ﺽ": 5002,
5236
+ "ﺾ": 5003,
5237
+ "ﺿ": 5004,
5238
+ "ﻀ": 5005,
5239
+ "ﻁ": 5006,
5240
+ "ﻂ": 5007,
5241
+ "ﻃ": 5008,
5242
+ "ﻄ": 5009,
5243
+ "ﻆ": 5010,
5244
+ "ﻇ": 5011,
5245
+ "ﻈ": 5012,
5246
+ "ﻉ": 5013,
5247
+ "ﻊ": 5014,
5248
+ "ﻋ": 5015,
5249
+ "ﻌ": 5016,
5250
+ "ﻏ": 5017,
5251
+ "ﻐ": 5018,
5252
+ "ﻑ": 5019,
5253
+ "ﻒ": 5020,
5254
+ "ﻓ": 5021,
5255
+ "ﻔ": 5022,
5256
+ "ﻕ": 5023,
5257
+ "ﻖ": 5024,
5258
+ "ﻗ": 5025,
5259
+ "ﻘ": 5026,
5260
+ "ﻙ": 5027,
5261
+ "ﻚ": 5028,
5262
+ "ﻛ": 5029,
5263
+ "ﻜ": 5030,
5264
+ "ﻝ": 5031,
5265
+ "ﻞ": 5032,
5266
+ "ﻟ": 5033,
5267
+ "ﻠ": 5034,
5268
+ "ﻡ": 5035,
5269
+ "ﻢ": 5036,
5270
+ "ﻣ": 5037,
5271
+ "ﻤ": 5038,
5272
+ "ﻥ": 5039,
5273
+ "ﻦ": 5040,
5274
+ "ﻧ": 5041,
5275
+ "ﻨ": 5042,
5276
+ "ﻩ": 5043,
5277
+ "ﻪ": 5044,
5278
+ "ﻫ": 5045,
5279
+ "ﻬ": 5046,
5280
+ "ﻭ": 5047,
5281
+ "ﻮ": 5048,
5282
+ "ﻯ": 5049,
5283
+ "ﻰ": 5050,
5284
+ "ﻱ": 5051,
5285
+ "ﻲ": 5052,
5286
+ "ﻳ": 5053,
5287
+ "ﻴ": 5054,
5288
+ "ﻵ": 5055,
5289
+ "ﻶ": 5056,
5290
+ "ﻷ": 5057,
5291
+ "ﻹ": 5058,
5292
+ "ﻻ": 5059,
5293
+ "ﻼ": 5060,
5294
+ "a": 5061,
5295
+ "i": 5062,
5296
+ "�": 5063
5297
+ }
5298
+ }
inference.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """genderize (cora / ultra) — standalone inference for the released weights.
3
+
4
+ What the model is
5
+ -----------------
6
+ A byte-level dual-head convolutional classifier. A personal name is normalised
7
+ (Unicode NFC, lowercase, whitespace collapsed), UTF-8 encoded and truncated to 48 bytes for legacy weights, or to the configured
8
+ ``maxlen``. Each byte is embedded (256 x 64), projected to `ch` channels and passed
9
+ through four residual 1-D convolution blocks (kernels 3, 5, 7, 3; BatchNorm +
10
+ GELU). Masked mean-pooling and max-pooling over the byte positions are
11
+ concatenated and fed to a shared 512-unit layer, from which two linear heads
12
+ read out: gender (2 classes, M/F) and country (226 ISO-3166 alpha-2 codes).
13
+ `cora` uses ch=160 (~0.77M parameters), `ultra` uses ch=384 (~3.2M).
14
+ Logits are divided by a per-head temperature (calibration.json) before softmax.
15
+
16
+ Files expected next to this script (or pass --models-dir):
17
+ genderize_<variant>.pt state_dict (PyTorch)
18
+ genderize_<variant>.config.json {"ch": 160 | 384}
19
+ genderize_<variant>.calibration.json {"temp_gender": t, "temp_country": t}
20
+ maps.json {"gender": {"M":0,"F":1}, "country": {"AD":0, ...}}
21
+
22
+ Usage
23
+ -----
24
+ python genderize_infer.py --variant ultra "Andrea Rossi" "Yuki Tanaka" "María García"
25
+ python genderize_infer.py --variant cora --top 3 --json "Chen Wei"
26
+
27
+ Requires only torch and numpy. CPU is enough.
28
+ """
29
+ from __future__ import annotations
30
+
31
+ import argparse
32
+ import json
33
+ import sys
34
+ import unicodedata
35
+ from pathlib import Path
36
+
37
+ import numpy as np
38
+ import torch
39
+ import torch.nn as nn
40
+ import torch.nn.functional as F
41
+
42
+ MAXLEN = 48
43
+
44
+
45
+ class _GBlock(nn.Module):
46
+ def __init__(self, ch: int, k: int):
47
+ super().__init__()
48
+ self.conv = nn.Conv1d(ch, ch, k, padding=k // 2)
49
+ self.norm = nn.BatchNorm1d(ch)
50
+
51
+ def forward(self, x):
52
+ return x + F.gelu(self.norm(self.conv(x)))
53
+
54
+
55
+ class NameModel(nn.Module):
56
+ """Byte/codepoint classifier: gender (2) + country (n_countries)."""
57
+
58
+ def __init__(self, n_countries: int, emb: int = 64, ch: int = 160,
59
+ vocab_size: int = 256):
60
+ super().__init__()
61
+ self.emb = nn.Embedding(vocab_size, emb, padding_idx=0)
62
+ self.proj = nn.Conv1d(emb, ch, 1)
63
+ self.blocks = nn.Sequential(_GBlock(ch, 3), _GBlock(ch, 5), _GBlock(ch, 7), _GBlock(ch, 3))
64
+ self.shared = nn.Sequential(nn.Linear(ch * 2, 512), nn.GELU(), nn.Dropout(0.15))
65
+ self.head_g = nn.Linear(512, 2)
66
+ self.head_c = nn.Linear(512, n_countries)
67
+
68
+ def forward(self, x):
69
+ mask = (x != 0).float().unsqueeze(1)
70
+ h = self.proj(self.emb(x.long()).transpose(1, 2))
71
+ h = self.blocks(h) * mask
72
+ mean = h.sum(-1) / mask.sum(-1).clamp(min=1)
73
+ mx = h.masked_fill(mask == 0, -1e9).max(-1).values
74
+ z = self.shared(torch.cat([mean, mx], -1))
75
+ return self.head_g(z), self.head_c(z)
76
+
77
+
78
+ def normalise(name: str) -> str:
79
+ """NFC + lowercase + collapse whitespace. Must match what the weights saw."""
80
+ return " ".join(unicodedata.normalize("NFC", (name or "").lower()).split())
81
+
82
+
83
+ def encode(texts: list[str], maxlen: int = MAXLEN,
84
+ vocab_codepoint: dict[str, int] | None = None) -> torch.Tensor:
85
+ """Codifica byte legacy oppure codepoint (0=pad, 1=unk)."""
86
+ dtype = np.uint8 if vocab_codepoint is None else np.int64
87
+ X = np.zeros((len(texts), maxlen), dtype=dtype)
88
+ for i, t in enumerate(texts):
89
+ if vocab_codepoint is None:
90
+ b = t.encode("utf-8")[:maxlen]
91
+ X[i, : len(b)] = np.frombuffer(b, dtype=np.uint8)
92
+ else:
93
+ ids = [vocab_codepoint.get(c, 1) for c in t[:maxlen]]
94
+ X[i, : len(ids)] = ids
95
+ return torch.from_numpy(X)
96
+
97
+
98
+ class Genderize:
99
+ def __init__(self, variant: str = "ultra", models_dir: str | Path | None = None):
100
+ md = Path(models_dir) if models_dir else Path(__file__).resolve().parent
101
+ maps = json.loads((md / "maps.json").read_text())
102
+ self.vocab_codepoint = maps.get("vocab_codepoint")
103
+ self.inv_country = {v: k for k, v in maps["country"].items()}
104
+ self.idx_m = maps["gender"].get("M", 0)
105
+ cfg = json.loads((md / f"genderize_{variant}.config.json").read_text())
106
+ self.maxlen = int(cfg.get("maxlen", maps.get("maxlen", MAXLEN)))
107
+ cal_path = md / f"genderize_{variant}.calibration.json"
108
+ self.cal = json.loads(cal_path.read_text()) if cal_path.exists() else {}
109
+ vocab_size = len(self.vocab_codepoint) + 2 if self.vocab_codepoint is not None else 256
110
+ self.model = NameModel(len(maps["country"]), ch=int(cfg.get("ch", 160)),
111
+ vocab_size=vocab_size)
112
+ self.model.load_state_dict(torch.load(md / f"genderize_{variant}.pt", map_location="cpu"))
113
+ self.model.eval()
114
+ self.variant = variant
115
+
116
+ @torch.no_grad()
117
+ def predict(self, names: list[str], top: int = 5) -> list[dict]:
118
+ texts = [normalise(n) for n in names]
119
+ lg, lc = self.model(encode(texts, maxlen=self.maxlen,
120
+ vocab_codepoint=self.vocab_codepoint))
121
+ pg = F.softmax(lg / self.cal.get("temp_gender", 1.0), dim=-1)
122
+ pc = F.softmax(lc / self.cal.get("temp_country", 1.0), dim=-1)
123
+ vals, idx = pc.topk(min(top, pc.shape[-1]), dim=-1)
124
+ out = []
125
+ for i, name in enumerate(names):
126
+ pm = float(pg[i, self.idx_m])
127
+ gender = "male" if pm >= 0.5 else "female"
128
+ out.append({
129
+ "name": name,
130
+ "gender": gender,
131
+ "probability": round(pm if gender == "male" else 1.0 - pm, 4),
132
+ "countries": [{"code": self.inv_country.get(int(j), "??"), "probability": round(float(v), 4)}
133
+ for v, j in zip(vals[i].tolist(), idx[i].tolist())],
134
+ "model": self.variant,
135
+ })
136
+ return out
137
+
138
+
139
+ def main() -> int:
140
+ ap = argparse.ArgumentParser(description="genderize cora/ultra — gender + nationality from a name")
141
+ ap.add_argument("names", nargs="+")
142
+ ap.add_argument("--variant", choices=["cora", "ultra"], default="ultra")
143
+ ap.add_argument("--models-dir", default=None)
144
+ ap.add_argument("--top", type=int, default=5)
145
+ ap.add_argument("--json", action="store_true", help="print JSON instead of a table")
146
+ a = ap.parse_args()
147
+ g = Genderize(a.variant, a.models_dir)
148
+ rows = g.predict(a.names, top=a.top)
149
+ if a.json:
150
+ print(json.dumps(rows, ensure_ascii=False, indent=1))
151
+ else:
152
+ for r in rows:
153
+ cs = ", ".join(f"{c['code']} {c['probability']:.2f}" for c in r["countries"])
154
+ print(f"{r['name']:<28} {r['gender']:<7} {r['probability']:.3f} {cs}")
155
+ return 0
156
+
157
+
158
+ if __name__ == "__main__":
159
+ sys.exit(main())
inference_fuso.py ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """genderize v2 «fuso» — un solo modello, due reti interne (v1 ultra + v2 distillata D2).
2
+
3
+ Uso:
4
+ g = GenderizeFuso('models/genderize_fuso_v2')
5
+ g.predict(['Maria Rossi', 'Nguyen Van An']) # -> [{'gender','p_male','country','p_country','top5'}]
6
+
7
+ Regole (DECISIONI 25/09): p(M) = media delle p(M) calibrate delle due reti; «M» se p(M) >= soglia
8
+ (0,60: scelta sui banchi, verificata su 6 insiemi freschi); paese = 0,7·v1 + 0,3·v2 sulle probabilità.
9
+ Ogni rete riceve il nome con la propria codifica (v1 byte maxlen 48, v2 codepoint maxlen 32).
10
+
11
+ T1 — instradamento per scrittura con traslitterazione (DOM-102, 27/09): la scrittura del nome
12
+ viene riconosciuta dai blocchi Unicode e si applica la regola misurata in
13
+ reports/trainer/g3_traslit_T1.json (scelta solo sulla metà di validazione, nessun parametro
14
+ appreso; totale test 85,82 contro 78,11 fuso e 74,31 v1): «nativo» classifica il nome originale,
15
+ «anyascii» la sua traslitterazione, «mix» la media delle probabilità delle due forme; le scritture
16
+ latine e quelle non mappate restano nativo. Il paese è sempre calcolato sul nome originale.
17
+ anyascii è una dipendenza runtime (licenza ISC) richiesta solo quando serve traslitterare.
18
+ Disambiguazioni: kana → giapponese (senza kana il solo Han va in cinese); lettere persiane
19
+ specifiche (پ چ ژ گ ک ی) distinguono il farsi dall'arabo; lettere kazake specifiche
20
+ (ә ғ қ ң ө ұ ү һ) e ucraine (ї є ґ і) distinguono i cirillici, altrimenti russo.
21
+
22
+ v2.1 (DOM-112, 28/09) — testa paese e selettore per paese:
23
+ • logit adjustment β=0,75 della testa paese: log(p_c) − β·log(π), dove p_c è la probabilità
24
+ fusa (0,7·v1 + 0,3·v2) sul nome originale e π è la frequenza empirica del corpus v2 letta da
25
+ models/genderize_fuso_v2/country_prior.json (accanto ai pesi, SHA nel manifest); β scelto solo
26
+ sulla validation in DOM-105. La distribuzione restituita è rinormalizzata; l'argmax decide
27
+ il paese.
28
+ • selettore per paese: se il paese predetto (dopo l'aggiustamento) è in S {AM GE MM TG TD WS},
29
+ la decisione di genere usa il ramo scelto solo sui banchi VECCHI (residuo 226 v1 + nativo;
30
+ mai il banco 226 v2): v1@0,5 oppure fuso a soglia diversa. Per quelle righe il p(M) restituito
31
+ è il punteggio del ramo rimappato in modo che il taglio 0,60 riproduca esattamente la
32
+ decisione del ramo (p_ramo + 0,60 − soglia_ramo, limitato a [0,1]); per tutte le altre righe
33
+ resta fuso@0,60. «gender» e «p_male» restano sempre coerenti con la stessa regola di taglio.
34
+
35
+ v2.2 (DOM-113, 28/09) — rimedio «tratti + massa» per GE MM TG TD (WS escluso):
36
+ • se la decisione v2.1 e v1@0,50 discordano E il nome ha tratti tipici di quei paesi, la
37
+ decisione di genere (e il punteggio, rimappato come il selettore: p_v1 + 0,60 − 0,50) viene
38
+ dal ramo v1. Ambito: SOLO nomi di scritture latine (la validazione che ha scelto il rimedio
39
+ è latina; sulle scritture native il ramo v1 leggerebbe byte fuori distribuzione e il trigger
40
+ non è mai stato misurato). Tratti scelti SOLO sul banco di validazione DOM-113 (Wikidata CC0,
41
+ congelato; mai il 226 v2) e vincolati a non danneggiare il residuo 226 v1 (−0,023 pp
42
+ misurati):
43
+ (i) token esatto del lessico del paese (supporto ≥ 2 in validazione, ovunque nel nome);
44
+ (ii) onorifico birmano iniziale {Maung, Mg, Saw, Sao, U} con almeno 2 token;
45
+ (iii) somma delle p_paese aggiustate su {AM GE MM TG TD WS} ≥ 0,15 con il paese a p massima
46
+ tra {GE MM TG TD WS} attivo. Configurazione in models/genderize_fuso_v2/dom113_rimedio.json
47
+ (SHA nel manifest del verdetto); se il file manca, il comportamento resta v2.1.
48
+ """
49
+ from __future__ import annotations
50
+ import json
51
+ from pathlib import Path
52
+ import torch, torch.nn.functional as F
53
+ from inference import NameModel, encode, normalise
54
+
55
+ try:
56
+ from anyascii import anyascii as _anyascii
57
+ except ImportError:
58
+ _anyascii = None
59
+
60
+ REGOLA_T1 = {
61
+ 'zh': 'nativo', 'ja': 'nativo', 'ko': 'nativo', 'ar': 'nativo', 'he': 'nativo',
62
+ 'th': 'nativo', 'el': 'nativo', 'uk': 'nativo',
63
+ 'ka': 'anyascii', 'hy': 'anyascii', 'kk': 'anyascii', 'ru': 'anyascii',
64
+ 'fa': 'mix', 'bn': 'mix', 'hi': 'mix',
65
+ }
66
+
67
+ _BLOCCHI = (
68
+ ('ka', 0x10A0, 0x10FF), ('hy', 0x0530, 0x058F), ('he', 0x0590, 0x05FF),
69
+ ('ar', 0x0600, 0x06FF), ('bn', 0x0980, 0x09FF), ('hi', 0x0900, 0x097F),
70
+ ('th', 0x0E00, 0x0E7F), ('el', 0x0370, 0x03FF), ('han', 0x3400, 0x9FFF),
71
+ ('hangul', 0xAC00, 0xD7AF), ('hiragana', 0x3040, 0x309F), ('katakana', 0x30A0, 0x30FF),
72
+ ('cyrillic', 0x0400, 0x052F), ('latino', 0x0041, 0x024F),
73
+ )
74
+ _PERSIANO = frozenset('پچژگکی')
75
+ _KAZAKO = frozenset('әғқңөұүһӘҒҚҢӨҰҮҺ')
76
+ _UCRAINO = frozenset('їєґіЇЄҐІ')
77
+
78
+
79
+ def script_t1(testo: str):
80
+ conteggi: dict[str, int] = {}
81
+ for c in testo:
82
+ cp = ord(c)
83
+ for nome, a, b in _BLOCCHI:
84
+ if a <= cp <= b:
85
+ conteggi[nome] = conteggi.get(nome, 0) + 1
86
+ break
87
+ if not conteggi:
88
+ return None
89
+ if 'hiragana' in conteggi or 'katakana' in conteggi:
90
+ return 'ja'
91
+ if 'hangul' in conteggi:
92
+ return 'ko'
93
+ if 'han' in conteggi:
94
+ return 'zh'
95
+ dominante = max(conteggi, key=lambda k: (conteggi[k], k != 'latino'))
96
+ if dominante == 'latino':
97
+ return None
98
+ if dominante == 'ar':
99
+ return 'fa' if _PERSIANO & set(testo) else 'ar'
100
+ if dominante == 'cyrillic':
101
+ if _KAZAKO & set(testo):
102
+ return 'kk'
103
+ if _UCRAINO & set(testo):
104
+ return 'uk'
105
+ return 'ru'
106
+ return dominante
107
+
108
+
109
+ def _cap(s: str) -> str:
110
+ return ' '.join(w[:1].upper() + w[1:] for w in s.split())
111
+
112
+
113
+ def _traslittera(nome: str) -> str:
114
+ if _anyascii is None:
115
+ raise RuntimeError('anyascii è richiesto per le scritture traslitterate: pip install anyascii (licenza ISC)')
116
+ return _cap(_anyascii(nome)) or nome
117
+
118
+
119
+ def varianti_t1(nome: str) -> list[str]:
120
+ regola = REGOLA_T1.get(script_t1(nome))
121
+ if regola in (None, 'nativo'):
122
+ return [nome]
123
+ tr = _traslittera(nome)
124
+ return [nome, tr] if regola == 'mix' else [tr]
125
+
126
+
127
+ class GenderizeFuso:
128
+ def __init__(self, cartella: str, device: str = 'cpu', batch_size: int = 256):
129
+ if batch_size < 1:
130
+ raise ValueError('batch_size deve essere positivo')
131
+ self.batch_size = batch_size
132
+ base = Path(cartella); cfg = json.loads((base / 'fuso.json').read_text())
133
+ self.soglia, self.peso_paese_v1, self.dev = float(cfg['soglia_M']), float(cfg['peso_paese_v1']), device
134
+ self.reti = []
135
+ for sub in ('v1', 'v2'):
136
+ d = base / sub; c = json.loads((d / 'genderize_ultra.config.json').read_text())
137
+ cal = json.loads((d / 'genderize_ultra.calibration.json').read_text()); mp = json.loads((d / 'maps.json').read_text())
138
+ vc = mp.get('vocab_codepoint') if sub == 'v2' else None
139
+ m = NameModel(len(mp['country']), ch=int(c['ch']), vocab_size=len(vc) + 2 if vc else 256)
140
+ st = torch.load(d / 'genderize_ultra.pt', map_location='cpu', weights_only=True)
141
+ m.load_state_dict(st.get('state_dict', st)); m.eval().to(device)
142
+ paesi = mp['country'] if isinstance(mp['country'], list) else [k for k, _ in sorted(mp['country'].items(), key=lambda x: x[1])]
143
+ self.reti.append((m, cal, vc, int(c.get('maxlen', mp.get('maxlen', 48))), paesi))
144
+ self.paesi = self.reti[1][4]
145
+ self.perm = torch.tensor([self.reti[0][4].index(p) for p in self.paesi]) # v1 -> ordine v2
146
+ pri = json.loads((base / 'country_prior.json').read_text())
147
+ self.beta = float(pri['beta'])
148
+ pr = pri['prior']; assert len(pr) == len(self.paesi) and set(pr) == set(self.paesi)
149
+ self.log_prior = torch.tensor([float(pr[p]) for p in self.paesi], dtype=torch.float64)
150
+ sc = pri['selettore']['scelte']
151
+ self._sel_v1 = torch.zeros(len(self.paesi), dtype=torch.bool)
152
+ self._sel_off = torch.zeros(len(self.paesi))
153
+ for c, b in sc.items():
154
+ i = self.paesi.index(c)
155
+ self._sel_v1[i] = b['ramo'] == 'v1'
156
+ self._sel_off[i] = self.soglia - float(b['soglia'])
157
+ # v2.2 (DOM-113): rimedio «tratti + massa»; senza config resta v2.1
158
+ self._rim_lessico: frozenset[str] = frozenset()
159
+ self._rim_onorifici: frozenset[str] = frozenset()
160
+ self._rim_tau = 1.0
161
+ rp = base / 'dom113_rimedio.json'
162
+ if rp.exists():
163
+ rim = json.loads(rp.read_text())
164
+ lessico = set()
165
+ for c in rim['paesi_attivi']:
166
+ lessico.update(rim['lessico'][c])
167
+ self._rim_lessico = frozenset(lessico)
168
+ self._rim_onorifici = frozenset(rim['onorifici_mm'])
169
+ self._rim_tau = float(rim['tau_massa'])
170
+ s6 = ['AM', 'GE', 'MM', 'TG', 'TD', 'WS'] # somma di massa (come DOM-113)
171
+ s5 = ['GE', 'MM', 'TG', 'TD', 'WS'] # argmax di massa (senza AM)
172
+ self._rim_s6 = torch.tensor([self.paesi.index(c) for c in s6])
173
+ self._rim_s5 = torch.tensor([self.paesi.index(c) for c in s5])
174
+ self._rim_attivi = torch.zeros(len(self.paesi), dtype=torch.bool)
175
+ for c in rim['paesi_attivi']:
176
+ self._rim_attivi[self.paesi.index(c)] = True
177
+
178
+ @torch.no_grad()
179
+ def probabilita(self, nomi: list[str]):
180
+ if not nomi:
181
+ return torch.empty(0), torch.empty((0, len(self.paesi)))
182
+ # One normalized work list shared by both networks. Only selected rows
183
+ # add a transliteration; equal forms and repeated names reuse inference.
184
+ piatti, righe, indice = [], [], {}
185
+ def aggiungi(nome):
186
+ testo = normalise(nome)
187
+ if testo not in indice:
188
+ indice[testo] = len(piatti)
189
+ piatti.append(testo)
190
+ return indice[testo]
191
+ for n in nomi:
192
+ regola = REGOLA_T1.get(script_t1(n))
193
+ a = aggiungi(n)
194
+ b = aggiungi(_traslittera(n)) if regola in ('anyascii', 'mix') else None
195
+ righe.append((a, b, regola))
196
+ pm_reti, pc_reti = [], []
197
+ for m, cal, vc, ml, _ in self.reti:
198
+ lg_all, lc_all = [], []
199
+ for i in range(0, len(piatti), self.batch_size):
200
+ lg, lc = m(encode(piatti[i:i + self.batch_size], maxlen=ml, vocab_codepoint=vc).to(self.dev))
201
+ lg_all.append(lg / cal.get('temp_gender', 1.0)); lc_all.append(lc / cal.get('temp_country', 1.0))
202
+ pm_reti.append(F.softmax(torch.cat(lg_all), -1)[:, 0].cpu())
203
+ pc_reti.append(F.softmax(torch.cat(lc_all), -1).cpu())
204
+ a_t = torch.tensor([a for a, _, _ in righe])
205
+ b_t = torch.tensor([b if b is not None else 0 for _, b, _ in righe])
206
+ aa_m = torch.tensor([regola == 'anyascii' for _, _, regola in righe], dtype=torch.bool)
207
+ mix_m = torch.tensor([regola == 'mix' for _, _, regola in righe], dtype=torch.bool)
208
+ pn = (pm_reti[0][a_t] + pm_reti[1][a_t]) / 2
209
+ pt = (pm_reti[0][b_t] + pm_reti[1][b_t]) / 2
210
+ p_m = torch.where(aa_m, pt, torch.where(mix_m, (pn + pt) / 2, pn))
211
+ p_c = self.peso_paese_v1 * pc_reti[0][a_t][:, self.perm] + (1 - self.peso_paese_v1) * pc_reti[1][a_t]
212
+ # v2.1: logit adjustment della testa paese — log(p_c) − β·log(π), float64 come DOM-105;
213
+ # la distribuzione restituita è rinormalizzata e l'argmax decide il paese.
214
+ lg_c = torch.log(p_c.to(torch.float64)) - self.beta * self.log_prior
215
+ paese = lg_c.argmax(-1)
216
+ p_c = torch.softmax(lg_c, -1).to(p_m.dtype)
217
+ # v2.1: selettore per paese — per i paesi di S il punteggio del ramo scelto è rimappato
218
+ # perché il taglio self.soglia (0,60) riproduca esattamente la decisione del ramo.
219
+ base = torch.where(self._sel_v1[paese], pm_reti[0][a_t], p_m)
220
+ p_m = torch.clamp(base + self._sel_off[paese], 0.0, 1.0)
221
+ # v2.2: rimedio DOM-113 — se v2.1 e v1 discordano e il nome ha tratti tipici
222
+ # (lessico / onorifico birmano / massa del paese), decide il ramo v1
223
+ # (punteggio rimappato: p_v1 + 0,60 − 0,50), come il selettore DOM-112.
224
+ if self._rim_lessico:
225
+ s6 = p_c[:, self._rim_s6].sum(-1)
226
+ cS = self._rim_s5[p_c[:, self._rim_s5].argmax(-1)]
227
+ massa = (s6 >= self._rim_tau) & self._rim_attivi[cS]
228
+ # il rimedio vale solo per nomi latini: la validazione DOM-113 che lo ha
229
+ # scelto è latina; sulle scritture native il ramo v1 girerebbe sui byte
230
+ # originali (fuori distribuzione) e il trigger non è stato mai misurato
231
+ tratti = torch.tensor(
232
+ [script_t1(n) is None and (bool(massa[j]) or
233
+ any(t in self._rim_lessico for t in n.split())
234
+ or (len(n.split()) >= 2 and n.split()[0] in self._rim_onorifici))
235
+ for j, n in enumerate(nomi)], dtype=torch.bool)
236
+ pv1 = pm_reti[0][a_t]
237
+ discorda = (p_m >= self.soglia) != (pv1 >= 0.5)
238
+ p_m = torch.where(tratti & discorda,
239
+ torch.clamp(pv1 + self.soglia - 0.50, 0.0, 1.0), p_m)
240
+ return p_m, p_c
241
+
242
+ def predict(self, nomi: list[str]):
243
+ out = []
244
+ for i in range(0, len(nomi), self.batch_size):
245
+ p_m, p_c = self.probabilita(nomi[i:i + self.batch_size]); top = p_c.topk(5, -1)
246
+ for j in range(len(p_m)):
247
+ out.append({'gender': 'M' if p_m[j] >= self.soglia else 'F', 'p_male': round(float(p_m[j]), 4),
248
+ 'country': self.paesi[int(top.indices[j, 0])], 'p_country': round(float(top.values[j, 0]), 4),
249
+ 'top5': [self.paesi[int(k)] for k in top.indices[j]]})
250
+ return out