xinference 1.2.0__py3-none-any.whl → 1.2.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of xinference might be problematic. Click here for more details.
- xinference/_version.py +3 -3
- xinference/api/restful_api.py +4 -7
- xinference/client/handlers.py +3 -0
- xinference/core/chat_interface.py +6 -1
- xinference/core/model.py +2 -0
- xinference/core/scheduler.py +4 -7
- xinference/core/supervisor.py +114 -23
- xinference/core/worker.py +70 -4
- xinference/deploy/local.py +2 -1
- xinference/model/audio/core.py +11 -0
- xinference/model/audio/cosyvoice.py +16 -5
- xinference/model/audio/kokoro.py +139 -0
- xinference/model/audio/melotts.py +110 -0
- xinference/model/audio/model_spec.json +80 -0
- xinference/model/audio/model_spec_modelscope.json +18 -0
- xinference/model/audio/whisper.py +35 -10
- xinference/model/llm/llama_cpp/core.py +21 -14
- xinference/model/llm/llm_family.json +527 -1
- xinference/model/llm/llm_family.py +4 -1
- xinference/model/llm/llm_family_modelscope.json +495 -3
- xinference/model/llm/memory.py +1 -1
- xinference/model/llm/mlx/core.py +24 -6
- xinference/model/llm/transformers/core.py +9 -1
- xinference/model/llm/transformers/qwen2_audio.py +3 -1
- xinference/model/llm/transformers/qwen2_vl.py +20 -3
- xinference/model/llm/transformers/utils.py +22 -11
- xinference/model/llm/utils.py +115 -1
- xinference/model/llm/vllm/core.py +14 -4
- xinference/model/llm/vllm/xavier/block.py +3 -4
- xinference/model/llm/vllm/xavier/block_tracker.py +71 -58
- xinference/model/llm/vllm/xavier/collective.py +74 -0
- xinference/model/llm/vllm/xavier/collective_manager.py +147 -0
- xinference/model/llm/vllm/xavier/executor.py +18 -16
- xinference/model/llm/vllm/xavier/scheduler.py +79 -63
- xinference/model/llm/vllm/xavier/test/test_xavier.py +60 -35
- xinference/model/llm/vllm/xavier/transfer.py +53 -32
- xinference/thirdparty/cosyvoice/bin/spk2info.pt +0 -0
- xinference/thirdparty/melo/__init__.py +0 -0
- xinference/thirdparty/melo/api.py +135 -0
- xinference/thirdparty/melo/app.py +61 -0
- xinference/thirdparty/melo/attentions.py +459 -0
- xinference/thirdparty/melo/commons.py +160 -0
- xinference/thirdparty/melo/configs/config.json +94 -0
- xinference/thirdparty/melo/data/example/metadata.list +20 -0
- xinference/thirdparty/melo/data_utils.py +413 -0
- xinference/thirdparty/melo/download_utils.py +67 -0
- xinference/thirdparty/melo/infer.py +25 -0
- xinference/thirdparty/melo/init_downloads.py +14 -0
- xinference/thirdparty/melo/losses.py +58 -0
- xinference/thirdparty/melo/main.py +36 -0
- xinference/thirdparty/melo/mel_processing.py +174 -0
- xinference/thirdparty/melo/models.py +1030 -0
- xinference/thirdparty/melo/modules.py +598 -0
- xinference/thirdparty/melo/monotonic_align/__init__.py +16 -0
- xinference/thirdparty/melo/monotonic_align/core.py +46 -0
- xinference/thirdparty/melo/preprocess_text.py +135 -0
- xinference/thirdparty/melo/split_utils.py +174 -0
- xinference/thirdparty/melo/text/__init__.py +35 -0
- xinference/thirdparty/melo/text/chinese.py +199 -0
- xinference/thirdparty/melo/text/chinese_bert.py +107 -0
- xinference/thirdparty/melo/text/chinese_mix.py +253 -0
- xinference/thirdparty/melo/text/cleaner.py +36 -0
- xinference/thirdparty/melo/text/cleaner_multiling.py +110 -0
- xinference/thirdparty/melo/text/cmudict.rep +129530 -0
- xinference/thirdparty/melo/text/cmudict_cache.pickle +0 -0
- xinference/thirdparty/melo/text/english.py +284 -0
- xinference/thirdparty/melo/text/english_bert.py +39 -0
- xinference/thirdparty/melo/text/english_utils/__init__.py +0 -0
- xinference/thirdparty/melo/text/english_utils/abbreviations.py +35 -0
- xinference/thirdparty/melo/text/english_utils/number_norm.py +97 -0
- xinference/thirdparty/melo/text/english_utils/time_norm.py +47 -0
- xinference/thirdparty/melo/text/es_phonemizer/__init__.py +0 -0
- xinference/thirdparty/melo/text/es_phonemizer/base.py +140 -0
- xinference/thirdparty/melo/text/es_phonemizer/cleaner.py +109 -0
- xinference/thirdparty/melo/text/es_phonemizer/es_symbols.json +79 -0
- xinference/thirdparty/melo/text/es_phonemizer/es_symbols.txt +1 -0
- xinference/thirdparty/melo/text/es_phonemizer/es_symbols_v2.json +83 -0
- xinference/thirdparty/melo/text/es_phonemizer/es_to_ipa.py +12 -0
- xinference/thirdparty/melo/text/es_phonemizer/example_ipa.txt +400 -0
- xinference/thirdparty/melo/text/es_phonemizer/gruut_wrapper.py +253 -0
- xinference/thirdparty/melo/text/es_phonemizer/punctuation.py +174 -0
- xinference/thirdparty/melo/text/es_phonemizer/spanish_symbols.txt +1 -0
- xinference/thirdparty/melo/text/es_phonemizer/test.ipynb +124 -0
- xinference/thirdparty/melo/text/fr_phonemizer/__init__.py +0 -0
- xinference/thirdparty/melo/text/fr_phonemizer/base.py +140 -0
- xinference/thirdparty/melo/text/fr_phonemizer/cleaner.py +122 -0
- xinference/thirdparty/melo/text/fr_phonemizer/en_symbols.json +78 -0
- xinference/thirdparty/melo/text/fr_phonemizer/example_ipa.txt +1 -0
- xinference/thirdparty/melo/text/fr_phonemizer/fr_symbols.json +89 -0
- xinference/thirdparty/melo/text/fr_phonemizer/fr_to_ipa.py +30 -0
- xinference/thirdparty/melo/text/fr_phonemizer/french_abbreviations.py +48 -0
- xinference/thirdparty/melo/text/fr_phonemizer/french_symbols.txt +1 -0
- xinference/thirdparty/melo/text/fr_phonemizer/gruut_wrapper.py +258 -0
- xinference/thirdparty/melo/text/fr_phonemizer/punctuation.py +172 -0
- xinference/thirdparty/melo/text/french.py +94 -0
- xinference/thirdparty/melo/text/french_bert.py +39 -0
- xinference/thirdparty/melo/text/japanese.py +647 -0
- xinference/thirdparty/melo/text/japanese_bert.py +49 -0
- xinference/thirdparty/melo/text/ko_dictionary.py +44 -0
- xinference/thirdparty/melo/text/korean.py +192 -0
- xinference/thirdparty/melo/text/opencpop-strict.txt +429 -0
- xinference/thirdparty/melo/text/spanish.py +122 -0
- xinference/thirdparty/melo/text/spanish_bert.py +39 -0
- xinference/thirdparty/melo/text/symbols.py +290 -0
- xinference/thirdparty/melo/text/tone_sandhi.py +769 -0
- xinference/thirdparty/melo/train.py +635 -0
- xinference/thirdparty/melo/train.sh +19 -0
- xinference/thirdparty/melo/transforms.py +209 -0
- xinference/thirdparty/melo/utils.py +424 -0
- xinference/types.py +2 -0
- xinference/web/ui/build/asset-manifest.json +3 -3
- xinference/web/ui/build/index.html +1 -1
- xinference/web/ui/build/static/js/{main.1eb206d1.js → main.b0936c54.js} +3 -3
- xinference/web/ui/build/static/js/main.b0936c54.js.map +1 -0
- xinference/web/ui/node_modules/.cache/babel-loader/a3ff866acddf34917a7ee399e0e571a4dfd8ba66d5057db885f243e16a6eb17d.json +1 -0
- {xinference-1.2.0.dist-info → xinference-1.2.2.dist-info}/METADATA +37 -27
- {xinference-1.2.0.dist-info → xinference-1.2.2.dist-info}/RECORD +122 -45
- xinference/web/ui/build/static/js/main.1eb206d1.js.map +0 -1
- xinference/web/ui/node_modules/.cache/babel-loader/2213d49de260e1f67c888081b18f120f5225462b829ae57c9e05a05cec83689d.json +0 -1
- /xinference/web/ui/build/static/js/{main.1eb206d1.js.LICENSE.txt → main.b0936c54.js.LICENSE.txt} +0 -0
- {xinference-1.2.0.dist-info → xinference-1.2.2.dist-info}/LICENSE +0 -0
- {xinference-1.2.0.dist-info → xinference-1.2.2.dist-info}/WHEEL +0 -0
- {xinference-1.2.0.dist-info → xinference-1.2.2.dist-info}/entry_points.txt +0 -0
- {xinference-1.2.0.dist-info → xinference-1.2.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import torch
|
|
2
|
+
from transformers import AutoTokenizer, AutoModelForMaskedLM
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
models = {}
|
|
7
|
+
tokenizers = {}
|
|
8
|
+
def get_bert_feature(text, word2ph, device=None, model_id='tohoku-nlp/bert-base-japanese-v3'):
|
|
9
|
+
global model
|
|
10
|
+
global tokenizer
|
|
11
|
+
|
|
12
|
+
if (
|
|
13
|
+
sys.platform == "darwin"
|
|
14
|
+
and torch.backends.mps.is_available()
|
|
15
|
+
and device == "cpu"
|
|
16
|
+
):
|
|
17
|
+
device = "mps"
|
|
18
|
+
if not device:
|
|
19
|
+
device = "cuda"
|
|
20
|
+
if model_id not in models:
|
|
21
|
+
model = AutoModelForMaskedLM.from_pretrained(model_id).to(
|
|
22
|
+
device
|
|
23
|
+
)
|
|
24
|
+
models[model_id] = model
|
|
25
|
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
|
26
|
+
tokenizers[model_id] = tokenizer
|
|
27
|
+
else:
|
|
28
|
+
model = models[model_id]
|
|
29
|
+
tokenizer = tokenizers[model_id]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
with torch.no_grad():
|
|
33
|
+
inputs = tokenizer(text, return_tensors="pt")
|
|
34
|
+
tokenized = tokenizer.tokenize(text)
|
|
35
|
+
for i in inputs:
|
|
36
|
+
inputs[i] = inputs[i].to(device)
|
|
37
|
+
res = model(**inputs, output_hidden_states=True)
|
|
38
|
+
res = torch.cat(res["hidden_states"][-3:-2], -1)[0].cpu()
|
|
39
|
+
|
|
40
|
+
assert inputs["input_ids"].shape[-1] == len(word2ph), f"{inputs['input_ids'].shape[-1]}/{len(word2ph)}"
|
|
41
|
+
word2phone = word2ph
|
|
42
|
+
phone_level_feature = []
|
|
43
|
+
for i in range(len(word2phone)):
|
|
44
|
+
repeat_feature = res[i].repeat(word2phone[i], 1)
|
|
45
|
+
phone_level_feature.append(repeat_feature)
|
|
46
|
+
|
|
47
|
+
phone_level_feature = torch.cat(phone_level_feature, dim=0)
|
|
48
|
+
|
|
49
|
+
return phone_level_feature.T
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
# Add the word you want to the dictionary.
|
|
3
|
+
etc_dictionary = {"1+1": "원플러스원", "2+1": "투플러스원"}
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
english_dictionary = {
|
|
7
|
+
"KOREA": "코리아",
|
|
8
|
+
"IDOL": "아이돌",
|
|
9
|
+
"IT": "아이티",
|
|
10
|
+
"IQ": "아이큐",
|
|
11
|
+
"UP": "업",
|
|
12
|
+
"DOWN": "다운",
|
|
13
|
+
"PC": "피씨",
|
|
14
|
+
"CCTV": "씨씨티비",
|
|
15
|
+
"SNS": "에스엔에스",
|
|
16
|
+
"AI": "에이아이",
|
|
17
|
+
"CEO": "씨이오",
|
|
18
|
+
"A": "에이",
|
|
19
|
+
"B": "비",
|
|
20
|
+
"C": "씨",
|
|
21
|
+
"D": "디",
|
|
22
|
+
"E": "이",
|
|
23
|
+
"F": "에프",
|
|
24
|
+
"G": "지",
|
|
25
|
+
"H": "에이치",
|
|
26
|
+
"I": "아이",
|
|
27
|
+
"J": "제이",
|
|
28
|
+
"K": "케이",
|
|
29
|
+
"L": "엘",
|
|
30
|
+
"M": "엠",
|
|
31
|
+
"N": "엔",
|
|
32
|
+
"O": "오",
|
|
33
|
+
"P": "피",
|
|
34
|
+
"Q": "큐",
|
|
35
|
+
"R": "알",
|
|
36
|
+
"S": "에스",
|
|
37
|
+
"T": "티",
|
|
38
|
+
"U": "유",
|
|
39
|
+
"V": "브이",
|
|
40
|
+
"W": "더블유",
|
|
41
|
+
"X": "엑스",
|
|
42
|
+
"Y": "와이",
|
|
43
|
+
"Z": "제트",
|
|
44
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Convert Japanese text to phonemes which is
|
|
2
|
+
# compatible with Julius https://github.com/julius-speech/segmentation-kit
|
|
3
|
+
import re
|
|
4
|
+
import unicodedata
|
|
5
|
+
|
|
6
|
+
from transformers import AutoTokenizer
|
|
7
|
+
|
|
8
|
+
from . import punctuation, symbols
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
from num2words import num2words
|
|
12
|
+
from melo.text.ko_dictionary import english_dictionary, etc_dictionary
|
|
13
|
+
from anyascii import anyascii
|
|
14
|
+
from jamo import hangul_to_jamo
|
|
15
|
+
|
|
16
|
+
def normalize(text):
|
|
17
|
+
text = text.strip()
|
|
18
|
+
text = re.sub("[⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〺〻㐀-䶵一-鿃豈-鶴侮-頻並-龎]", "", text)
|
|
19
|
+
text = normalize_with_dictionary(text, etc_dictionary)
|
|
20
|
+
text = normalize_english(text)
|
|
21
|
+
text = text.lower()
|
|
22
|
+
return text
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def normalize_with_dictionary(text, dic):
|
|
26
|
+
if any(key in text for key in dic.keys()):
|
|
27
|
+
pattern = re.compile("|".join(re.escape(key) for key in dic.keys()))
|
|
28
|
+
return pattern.sub(lambda x: dic[x.group()], text)
|
|
29
|
+
return text
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def normalize_english(text):
|
|
33
|
+
def fn(m):
|
|
34
|
+
word = m.group()
|
|
35
|
+
if word in english_dictionary:
|
|
36
|
+
return english_dictionary.get(word)
|
|
37
|
+
return word
|
|
38
|
+
|
|
39
|
+
text = re.sub("([A-Za-z]+)", fn, text)
|
|
40
|
+
return text
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
g2p_kr = None
|
|
44
|
+
def korean_text_to_phonemes(text, character: str = "hangeul") -> str:
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
The input and output values look the same, but they are different in Unicode.
|
|
48
|
+
|
|
49
|
+
example :
|
|
50
|
+
|
|
51
|
+
input = '하늘' (Unicode : \ud558\ub298), (하 + 늘)
|
|
52
|
+
output = '하늘' (Unicode :\u1112\u1161\u1102\u1173\u11af), (ᄒ + ᅡ + ᄂ + ᅳ + ᆯ)
|
|
53
|
+
|
|
54
|
+
"""
|
|
55
|
+
global g2p_kr # pylint: disable=global-statement
|
|
56
|
+
if g2p_kr is None:
|
|
57
|
+
from g2pkk import G2p
|
|
58
|
+
|
|
59
|
+
g2p_kr = G2p()
|
|
60
|
+
|
|
61
|
+
if character == "english":
|
|
62
|
+
from anyascii import anyascii
|
|
63
|
+
text = normalize(text)
|
|
64
|
+
text = g2p_kr(text)
|
|
65
|
+
text = anyascii(text)
|
|
66
|
+
return text
|
|
67
|
+
|
|
68
|
+
text = normalize(text)
|
|
69
|
+
text = g2p_kr(text)
|
|
70
|
+
text = list(hangul_to_jamo(text)) # '하늘' --> ['ᄒ', 'ᅡ', 'ᄂ', 'ᅳ', 'ᆯ']
|
|
71
|
+
return "".join(text)
|
|
72
|
+
|
|
73
|
+
def text_normalize(text):
|
|
74
|
+
# res = unicodedata.normalize("NFKC", text)
|
|
75
|
+
# res = japanese_convert_numbers_to_words(res)
|
|
76
|
+
# # res = "".join([i for i in res if is_japanese_character(i)])
|
|
77
|
+
# res = replace_punctuation(res)
|
|
78
|
+
text = normalize(text)
|
|
79
|
+
return text
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def distribute_phone(n_phone, n_word):
|
|
83
|
+
phones_per_word = [0] * n_word
|
|
84
|
+
for task in range(n_phone):
|
|
85
|
+
min_tasks = min(phones_per_word)
|
|
86
|
+
min_index = phones_per_word.index(min_tasks)
|
|
87
|
+
phones_per_word[min_index] += 1
|
|
88
|
+
return phones_per_word
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# tokenizer = AutoTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-v3')
|
|
93
|
+
|
|
94
|
+
model_id = 'kykim/bert-kor-base'
|
|
95
|
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
|
96
|
+
|
|
97
|
+
def g2p(norm_text):
|
|
98
|
+
tokenized = tokenizer.tokenize(norm_text)
|
|
99
|
+
phs = []
|
|
100
|
+
ph_groups = []
|
|
101
|
+
for t in tokenized:
|
|
102
|
+
if not t.startswith("#"):
|
|
103
|
+
ph_groups.append([t])
|
|
104
|
+
else:
|
|
105
|
+
ph_groups[-1].append(t.replace("#", ""))
|
|
106
|
+
word2ph = []
|
|
107
|
+
for group in ph_groups:
|
|
108
|
+
text = ""
|
|
109
|
+
for ch in group:
|
|
110
|
+
text += ch
|
|
111
|
+
if text == '[UNK]':
|
|
112
|
+
phs += ['_']
|
|
113
|
+
word2ph += [1]
|
|
114
|
+
continue
|
|
115
|
+
elif text in punctuation:
|
|
116
|
+
phs += [text]
|
|
117
|
+
word2ph += [1]
|
|
118
|
+
continue
|
|
119
|
+
# import pdb; pdb.set_trace()
|
|
120
|
+
# phonemes = japanese_text_to_phonemes(text)
|
|
121
|
+
# text = g2p_kr(text)
|
|
122
|
+
phonemes = korean_text_to_phonemes(text)
|
|
123
|
+
# import pdb; pdb.set_trace()
|
|
124
|
+
# # phonemes = [i for i in phonemes if i in symbols]
|
|
125
|
+
# for i in phonemes:
|
|
126
|
+
# assert i in symbols, (group, norm_text, tokenized, i)
|
|
127
|
+
phone_len = len(phonemes)
|
|
128
|
+
word_len = len(group)
|
|
129
|
+
|
|
130
|
+
aaa = distribute_phone(phone_len, word_len)
|
|
131
|
+
assert len(aaa) == word_len
|
|
132
|
+
word2ph += aaa
|
|
133
|
+
|
|
134
|
+
phs += phonemes
|
|
135
|
+
phones = ["_"] + phs + ["_"]
|
|
136
|
+
tones = [0 for i in phones]
|
|
137
|
+
word2ph = [1] + word2ph + [1]
|
|
138
|
+
assert len(word2ph) == len(tokenized) + 2
|
|
139
|
+
return phones, tones, word2ph
|
|
140
|
+
|
|
141
|
+
def get_bert_feature(text, word2ph, device='cuda'):
|
|
142
|
+
from . import japanese_bert
|
|
143
|
+
return japanese_bert.get_bert_feature(text, word2ph, device=device, model_id=model_id)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
if __name__ == "__main__":
|
|
147
|
+
# tokenizer = AutoTokenizer.from_pretrained("./bert/bert-base-japanese-v3")
|
|
148
|
+
from text.symbols import symbols
|
|
149
|
+
text = "전 제 일의 가치와 폰타인 대중들이 한 일의 의미를 잘 압니다. 앞으로도 전 제 일에 자부심을 갖고 살아갈 겁니다"
|
|
150
|
+
import json
|
|
151
|
+
|
|
152
|
+
# genshin_data = json.load(open('/data/zwl/workspace/StarRail_Datasets/Index & Scripts/Index/1.3/Korean.json'))
|
|
153
|
+
genshin_data = json.load(open('/data/zwl/workspace/Genshin_Datasets/Index & Script/AI Hobbyist Version/Index/4.1/KR_output.json'))
|
|
154
|
+
from tqdm import tqdm
|
|
155
|
+
new_symbols = []
|
|
156
|
+
for key, item in tqdm(genshin_data.items()):
|
|
157
|
+
texts = item.get('voiceContent', '')
|
|
158
|
+
if isinstance(texts, list):
|
|
159
|
+
texts = ','.join(texts)
|
|
160
|
+
if texts is None:
|
|
161
|
+
continue
|
|
162
|
+
if len(texts) == 0:
|
|
163
|
+
continue
|
|
164
|
+
|
|
165
|
+
text = text_normalize(text)
|
|
166
|
+
phones, tones, word2ph = g2p(text)
|
|
167
|
+
bert = get_bert_feature(text, word2ph)
|
|
168
|
+
import pdb; pdb.set_trace()
|
|
169
|
+
for ph in phones:
|
|
170
|
+
if ph not in symbols and ph not in new_symbols:
|
|
171
|
+
new_symbols.append(ph)
|
|
172
|
+
print('update!, now symbols:')
|
|
173
|
+
print(new_symbols)
|
|
174
|
+
with open('korean_symbol.txt', 'w') as f:
|
|
175
|
+
f.write(f'{new_symbols}')
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
# if __name__ == '__main__':
|
|
180
|
+
# from pykakasi import kakasi
|
|
181
|
+
# # Initialize kakasi object
|
|
182
|
+
# kakasi = kakasi()
|
|
183
|
+
|
|
184
|
+
# # Set options for converting Chinese characters to Katakana
|
|
185
|
+
# kakasi.setMode("J", "H") # Chinese to Katakana
|
|
186
|
+
# kakasi.setMode("K", "H") # Hiragana to Katakana
|
|
187
|
+
|
|
188
|
+
# # Convert Chinese characters to Katakana
|
|
189
|
+
# conv = kakasi.getConverter()
|
|
190
|
+
# katakana_text = conv.do('ええ、僕はおきなと申します。こちらの小さいわらべは杏子。ご挨拶が遅れてしまいすみません。あなたの名は?') # Replace with your Chinese text
|
|
191
|
+
|
|
192
|
+
# print(katakana_text) # Output: ニーハオセカイ
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
a AA a
|
|
2
|
+
ai AA ai
|
|
3
|
+
an AA an
|
|
4
|
+
ang AA ang
|
|
5
|
+
ao AA ao
|
|
6
|
+
ba b a
|
|
7
|
+
bai b ai
|
|
8
|
+
ban b an
|
|
9
|
+
bang b ang
|
|
10
|
+
bao b ao
|
|
11
|
+
bei b ei
|
|
12
|
+
ben b en
|
|
13
|
+
beng b eng
|
|
14
|
+
bi b i
|
|
15
|
+
bian b ian
|
|
16
|
+
biao b iao
|
|
17
|
+
bie b ie
|
|
18
|
+
bin b in
|
|
19
|
+
bing b ing
|
|
20
|
+
bo b o
|
|
21
|
+
bu b u
|
|
22
|
+
ca c a
|
|
23
|
+
cai c ai
|
|
24
|
+
can c an
|
|
25
|
+
cang c ang
|
|
26
|
+
cao c ao
|
|
27
|
+
ce c e
|
|
28
|
+
cei c ei
|
|
29
|
+
cen c en
|
|
30
|
+
ceng c eng
|
|
31
|
+
cha ch a
|
|
32
|
+
chai ch ai
|
|
33
|
+
chan ch an
|
|
34
|
+
chang ch ang
|
|
35
|
+
chao ch ao
|
|
36
|
+
che ch e
|
|
37
|
+
chen ch en
|
|
38
|
+
cheng ch eng
|
|
39
|
+
chi ch ir
|
|
40
|
+
chong ch ong
|
|
41
|
+
chou ch ou
|
|
42
|
+
chu ch u
|
|
43
|
+
chua ch ua
|
|
44
|
+
chuai ch uai
|
|
45
|
+
chuan ch uan
|
|
46
|
+
chuang ch uang
|
|
47
|
+
chui ch ui
|
|
48
|
+
chun ch un
|
|
49
|
+
chuo ch uo
|
|
50
|
+
ci c i0
|
|
51
|
+
cong c ong
|
|
52
|
+
cou c ou
|
|
53
|
+
cu c u
|
|
54
|
+
cuan c uan
|
|
55
|
+
cui c ui
|
|
56
|
+
cun c un
|
|
57
|
+
cuo c uo
|
|
58
|
+
da d a
|
|
59
|
+
dai d ai
|
|
60
|
+
dan d an
|
|
61
|
+
dang d ang
|
|
62
|
+
dao d ao
|
|
63
|
+
de d e
|
|
64
|
+
dei d ei
|
|
65
|
+
den d en
|
|
66
|
+
deng d eng
|
|
67
|
+
di d i
|
|
68
|
+
dia d ia
|
|
69
|
+
dian d ian
|
|
70
|
+
diao d iao
|
|
71
|
+
die d ie
|
|
72
|
+
ding d ing
|
|
73
|
+
diu d iu
|
|
74
|
+
dong d ong
|
|
75
|
+
dou d ou
|
|
76
|
+
du d u
|
|
77
|
+
duan d uan
|
|
78
|
+
dui d ui
|
|
79
|
+
dun d un
|
|
80
|
+
duo d uo
|
|
81
|
+
e EE e
|
|
82
|
+
ei EE ei
|
|
83
|
+
en EE en
|
|
84
|
+
eng EE eng
|
|
85
|
+
er EE er
|
|
86
|
+
fa f a
|
|
87
|
+
fan f an
|
|
88
|
+
fang f ang
|
|
89
|
+
fei f ei
|
|
90
|
+
fen f en
|
|
91
|
+
feng f eng
|
|
92
|
+
fo f o
|
|
93
|
+
fou f ou
|
|
94
|
+
fu f u
|
|
95
|
+
ga g a
|
|
96
|
+
gai g ai
|
|
97
|
+
gan g an
|
|
98
|
+
gang g ang
|
|
99
|
+
gao g ao
|
|
100
|
+
ge g e
|
|
101
|
+
gei g ei
|
|
102
|
+
gen g en
|
|
103
|
+
geng g eng
|
|
104
|
+
gong g ong
|
|
105
|
+
gou g ou
|
|
106
|
+
gu g u
|
|
107
|
+
gua g ua
|
|
108
|
+
guai g uai
|
|
109
|
+
guan g uan
|
|
110
|
+
guang g uang
|
|
111
|
+
gui g ui
|
|
112
|
+
gun g un
|
|
113
|
+
guo g uo
|
|
114
|
+
ha h a
|
|
115
|
+
hai h ai
|
|
116
|
+
han h an
|
|
117
|
+
hang h ang
|
|
118
|
+
hao h ao
|
|
119
|
+
he h e
|
|
120
|
+
hei h ei
|
|
121
|
+
hen h en
|
|
122
|
+
heng h eng
|
|
123
|
+
hong h ong
|
|
124
|
+
hou h ou
|
|
125
|
+
hu h u
|
|
126
|
+
hua h ua
|
|
127
|
+
huai h uai
|
|
128
|
+
huan h uan
|
|
129
|
+
huang h uang
|
|
130
|
+
hui h ui
|
|
131
|
+
hun h un
|
|
132
|
+
huo h uo
|
|
133
|
+
ji j i
|
|
134
|
+
jia j ia
|
|
135
|
+
jian j ian
|
|
136
|
+
jiang j iang
|
|
137
|
+
jiao j iao
|
|
138
|
+
jie j ie
|
|
139
|
+
jin j in
|
|
140
|
+
jing j ing
|
|
141
|
+
jiong j iong
|
|
142
|
+
jiu j iu
|
|
143
|
+
ju j v
|
|
144
|
+
jv j v
|
|
145
|
+
juan j van
|
|
146
|
+
jvan j van
|
|
147
|
+
jue j ve
|
|
148
|
+
jve j ve
|
|
149
|
+
jun j vn
|
|
150
|
+
jvn j vn
|
|
151
|
+
ka k a
|
|
152
|
+
kai k ai
|
|
153
|
+
kan k an
|
|
154
|
+
kang k ang
|
|
155
|
+
kao k ao
|
|
156
|
+
ke k e
|
|
157
|
+
kei k ei
|
|
158
|
+
ken k en
|
|
159
|
+
keng k eng
|
|
160
|
+
kong k ong
|
|
161
|
+
kou k ou
|
|
162
|
+
ku k u
|
|
163
|
+
kua k ua
|
|
164
|
+
kuai k uai
|
|
165
|
+
kuan k uan
|
|
166
|
+
kuang k uang
|
|
167
|
+
kui k ui
|
|
168
|
+
kun k un
|
|
169
|
+
kuo k uo
|
|
170
|
+
la l a
|
|
171
|
+
lai l ai
|
|
172
|
+
lan l an
|
|
173
|
+
lang l ang
|
|
174
|
+
lao l ao
|
|
175
|
+
le l e
|
|
176
|
+
lei l ei
|
|
177
|
+
leng l eng
|
|
178
|
+
li l i
|
|
179
|
+
lia l ia
|
|
180
|
+
lian l ian
|
|
181
|
+
liang l iang
|
|
182
|
+
liao l iao
|
|
183
|
+
lie l ie
|
|
184
|
+
lin l in
|
|
185
|
+
ling l ing
|
|
186
|
+
liu l iu
|
|
187
|
+
lo l o
|
|
188
|
+
long l ong
|
|
189
|
+
lou l ou
|
|
190
|
+
lu l u
|
|
191
|
+
luan l uan
|
|
192
|
+
lun l un
|
|
193
|
+
luo l uo
|
|
194
|
+
lv l v
|
|
195
|
+
lve l ve
|
|
196
|
+
ma m a
|
|
197
|
+
mai m ai
|
|
198
|
+
man m an
|
|
199
|
+
mang m ang
|
|
200
|
+
mao m ao
|
|
201
|
+
me m e
|
|
202
|
+
mei m ei
|
|
203
|
+
men m en
|
|
204
|
+
meng m eng
|
|
205
|
+
mi m i
|
|
206
|
+
mian m ian
|
|
207
|
+
miao m iao
|
|
208
|
+
mie m ie
|
|
209
|
+
min m in
|
|
210
|
+
ming m ing
|
|
211
|
+
miu m iu
|
|
212
|
+
mo m o
|
|
213
|
+
mou m ou
|
|
214
|
+
mu m u
|
|
215
|
+
na n a
|
|
216
|
+
nai n ai
|
|
217
|
+
nan n an
|
|
218
|
+
nang n ang
|
|
219
|
+
nao n ao
|
|
220
|
+
ne n e
|
|
221
|
+
nei n ei
|
|
222
|
+
nen n en
|
|
223
|
+
neng n eng
|
|
224
|
+
ni n i
|
|
225
|
+
nian n ian
|
|
226
|
+
niang n iang
|
|
227
|
+
niao n iao
|
|
228
|
+
nie n ie
|
|
229
|
+
nin n in
|
|
230
|
+
ning n ing
|
|
231
|
+
niu n iu
|
|
232
|
+
nong n ong
|
|
233
|
+
nou n ou
|
|
234
|
+
nu n u
|
|
235
|
+
nuan n uan
|
|
236
|
+
nun n un
|
|
237
|
+
nuo n uo
|
|
238
|
+
nv n v
|
|
239
|
+
nve n ve
|
|
240
|
+
o OO o
|
|
241
|
+
ou OO ou
|
|
242
|
+
pa p a
|
|
243
|
+
pai p ai
|
|
244
|
+
pan p an
|
|
245
|
+
pang p ang
|
|
246
|
+
pao p ao
|
|
247
|
+
pei p ei
|
|
248
|
+
pen p en
|
|
249
|
+
peng p eng
|
|
250
|
+
pi p i
|
|
251
|
+
pian p ian
|
|
252
|
+
piao p iao
|
|
253
|
+
pie p ie
|
|
254
|
+
pin p in
|
|
255
|
+
ping p ing
|
|
256
|
+
po p o
|
|
257
|
+
pou p ou
|
|
258
|
+
pu p u
|
|
259
|
+
qi q i
|
|
260
|
+
qia q ia
|
|
261
|
+
qian q ian
|
|
262
|
+
qiang q iang
|
|
263
|
+
qiao q iao
|
|
264
|
+
qie q ie
|
|
265
|
+
qin q in
|
|
266
|
+
qing q ing
|
|
267
|
+
qiong q iong
|
|
268
|
+
qiu q iu
|
|
269
|
+
qu q v
|
|
270
|
+
qv q v
|
|
271
|
+
quan q van
|
|
272
|
+
qvan q van
|
|
273
|
+
que q ve
|
|
274
|
+
qve q ve
|
|
275
|
+
qun q vn
|
|
276
|
+
qvn q vn
|
|
277
|
+
ran r an
|
|
278
|
+
rang r ang
|
|
279
|
+
rao r ao
|
|
280
|
+
re r e
|
|
281
|
+
ren r en
|
|
282
|
+
reng r eng
|
|
283
|
+
ri r ir
|
|
284
|
+
rong r ong
|
|
285
|
+
rou r ou
|
|
286
|
+
ru r u
|
|
287
|
+
rua r ua
|
|
288
|
+
ruan r uan
|
|
289
|
+
rui r ui
|
|
290
|
+
run r un
|
|
291
|
+
ruo r uo
|
|
292
|
+
sa s a
|
|
293
|
+
sai s ai
|
|
294
|
+
san s an
|
|
295
|
+
sang s ang
|
|
296
|
+
sao s ao
|
|
297
|
+
se s e
|
|
298
|
+
sen s en
|
|
299
|
+
seng s eng
|
|
300
|
+
sha sh a
|
|
301
|
+
shai sh ai
|
|
302
|
+
shan sh an
|
|
303
|
+
shang sh ang
|
|
304
|
+
shao sh ao
|
|
305
|
+
she sh e
|
|
306
|
+
shei sh ei
|
|
307
|
+
shen sh en
|
|
308
|
+
sheng sh eng
|
|
309
|
+
shi sh ir
|
|
310
|
+
shou sh ou
|
|
311
|
+
shu sh u
|
|
312
|
+
shua sh ua
|
|
313
|
+
shuai sh uai
|
|
314
|
+
shuan sh uan
|
|
315
|
+
shuang sh uang
|
|
316
|
+
shui sh ui
|
|
317
|
+
shun sh un
|
|
318
|
+
shuo sh uo
|
|
319
|
+
si s i0
|
|
320
|
+
song s ong
|
|
321
|
+
sou s ou
|
|
322
|
+
su s u
|
|
323
|
+
suan s uan
|
|
324
|
+
sui s ui
|
|
325
|
+
sun s un
|
|
326
|
+
suo s uo
|
|
327
|
+
ta t a
|
|
328
|
+
tai t ai
|
|
329
|
+
tan t an
|
|
330
|
+
tang t ang
|
|
331
|
+
tao t ao
|
|
332
|
+
te t e
|
|
333
|
+
tei t ei
|
|
334
|
+
teng t eng
|
|
335
|
+
ti t i
|
|
336
|
+
tian t ian
|
|
337
|
+
tiao t iao
|
|
338
|
+
tie t ie
|
|
339
|
+
ting t ing
|
|
340
|
+
tong t ong
|
|
341
|
+
tou t ou
|
|
342
|
+
tu t u
|
|
343
|
+
tuan t uan
|
|
344
|
+
tui t ui
|
|
345
|
+
tun t un
|
|
346
|
+
tuo t uo
|
|
347
|
+
wa w a
|
|
348
|
+
wai w ai
|
|
349
|
+
wan w an
|
|
350
|
+
wang w ang
|
|
351
|
+
wei w ei
|
|
352
|
+
wen w en
|
|
353
|
+
weng w eng
|
|
354
|
+
wo w o
|
|
355
|
+
wu w u
|
|
356
|
+
xi x i
|
|
357
|
+
xia x ia
|
|
358
|
+
xian x ian
|
|
359
|
+
xiang x iang
|
|
360
|
+
xiao x iao
|
|
361
|
+
xie x ie
|
|
362
|
+
xin x in
|
|
363
|
+
xing x ing
|
|
364
|
+
xiong x iong
|
|
365
|
+
xiu x iu
|
|
366
|
+
xu x v
|
|
367
|
+
xv x v
|
|
368
|
+
xuan x van
|
|
369
|
+
xvan x van
|
|
370
|
+
xue x ve
|
|
371
|
+
xve x ve
|
|
372
|
+
xun x vn
|
|
373
|
+
xvn x vn
|
|
374
|
+
ya y a
|
|
375
|
+
yan y En
|
|
376
|
+
yang y ang
|
|
377
|
+
yao y ao
|
|
378
|
+
ye y E
|
|
379
|
+
yi y i
|
|
380
|
+
yin y in
|
|
381
|
+
ying y ing
|
|
382
|
+
yo y o
|
|
383
|
+
yong y ong
|
|
384
|
+
you y ou
|
|
385
|
+
yu y v
|
|
386
|
+
yv y v
|
|
387
|
+
yuan y van
|
|
388
|
+
yvan y van
|
|
389
|
+
yue y ve
|
|
390
|
+
yve y ve
|
|
391
|
+
yun y vn
|
|
392
|
+
yvn y vn
|
|
393
|
+
za z a
|
|
394
|
+
zai z ai
|
|
395
|
+
zan z an
|
|
396
|
+
zang z ang
|
|
397
|
+
zao z ao
|
|
398
|
+
ze z e
|
|
399
|
+
zei z ei
|
|
400
|
+
zen z en
|
|
401
|
+
zeng z eng
|
|
402
|
+
zha zh a
|
|
403
|
+
zhai zh ai
|
|
404
|
+
zhan zh an
|
|
405
|
+
zhang zh ang
|
|
406
|
+
zhao zh ao
|
|
407
|
+
zhe zh e
|
|
408
|
+
zhei zh ei
|
|
409
|
+
zhen zh en
|
|
410
|
+
zheng zh eng
|
|
411
|
+
zhi zh ir
|
|
412
|
+
zhong zh ong
|
|
413
|
+
zhou zh ou
|
|
414
|
+
zhu zh u
|
|
415
|
+
zhua zh ua
|
|
416
|
+
zhuai zh uai
|
|
417
|
+
zhuan zh uan
|
|
418
|
+
zhuang zh uang
|
|
419
|
+
zhui zh ui
|
|
420
|
+
zhun zh un
|
|
421
|
+
zhuo zh uo
|
|
422
|
+
zi z i0
|
|
423
|
+
zong z ong
|
|
424
|
+
zou z ou
|
|
425
|
+
zu z u
|
|
426
|
+
zuan z uan
|
|
427
|
+
zui z ui
|
|
428
|
+
zun z un
|
|
429
|
+
zuo z uo
|