Spaces:
Sleeping
Sleeping
Upload name_change.py with huggingface_hub
Browse files- name_change.py +60 -0
name_change.py
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from OldHangeul import text_to_jamo
|
2 |
+
import torch
|
3 |
+
import string
|
4 |
+
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
# 한글 자모의 로마자 대응 값
|
9 |
+
initials = {
|
10 |
+
'ᄀ': 'K', 'ᄁ': 'KK', 'ᄂ': 'N', 'ᄃ': 'T', 'ᄄ': 'TT', 'ᄅ': 'R', 'ᄆ': 'M', 'ᄇ': 'P', 'ᄈ': 'PP', 'ᄉ': 'S', 'ᄊ': 'SS',
|
11 |
+
'ᄋ': 'NG', 'ᄌ': 'C', 'ᄍ': 'CC', 'ᄎ': 'CH', 'ᄏ': 'KH', 'ᄐ': 'TH', 'ᄑ': 'PH', 'ᄒ': 'H'
|
12 |
+
}
|
13 |
+
|
14 |
+
medials = {
|
15 |
+
'ᅡ': 'a', 'ᅢ': 'ae', 'ᅣ': 'ya', 'ᅤ': 'yae', 'ᅥ': 'eo', 'ᅦ': 'e', 'ᅧ': 'yeo', 'ᅨ': 'ye', 'ᅩ': 'o', 'ᅪ': 'wa',
|
16 |
+
'ᅫ': 'wae', 'ᅬ': 'oe', 'ᅭ': 'yo', 'ᅮ': 'u', 'ᅯ': 'wo', 'ᅰ': 'we', 'ᅱ': 'wi', 'ᅲ': 'yu', 'ᅳ': 'eu', 'ᅴ': 'ui', 'ᅵ': 'i'
|
17 |
+
}
|
18 |
+
|
19 |
+
finals = {
|
20 |
+
'': '', 'ᆨ': 'k', 'ᆩ': 'kk', 'ᆪ': 'ks', 'ᆫ': 'n', 'ᆬ': 'nj', 'ᆭ': 'nh', 'ᆮ': 't', 'ᆯ': 'r', 'ᆰ': 'rk', 'ᆱ': 'rm',
|
21 |
+
'ᆲ': 'rb', 'ᆳ': 'rs', 'ᆴ': 'rt', 'ᆵ': 'rp', 'ᆶ': 'rh', 'ᆷ': 'm', 'ᆸ': 'p', 'ᆹ': 'ps', 'ᆺ': 's', 'ᆻ': 'ss', 'ᆼ': 'ng',
|
22 |
+
'ᆽ': 'c', 'ᆾ': 'ch', 'ᆿ': 'kh', 'ᇀ': 'th', 'ᇁ': 'ph', 'ᇂ': 'h'
|
23 |
+
}
|
24 |
+
|
25 |
+
# 역방향 매핑을 위한 사전 생성
|
26 |
+
rev_initials = {v: k for k, v in initials.items()}
|
27 |
+
rev_medials = {v: k for k, v in medials.items()}
|
28 |
+
rev_finals = {v: k for k, v in finals.items()}
|
29 |
+
|
30 |
+
def hangul_to_roman(hangul):
|
31 |
+
result = []
|
32 |
+
for char in hangul:
|
33 |
+
if '가' <= char <= '힣':
|
34 |
+
jamos=text_to_jamo(char, Compatibility=False, spacing=False)
|
35 |
+
initial = initials[jamos[0]]
|
36 |
+
medial = medials[jamos[2]]
|
37 |
+
final = finals[jamos[4]] if len(jamos) == 5 else ''
|
38 |
+
result.append(initial + medial + final)
|
39 |
+
else:
|
40 |
+
result.append(char)
|
41 |
+
return ''.join(result)
|
42 |
+
|
43 |
+
|
44 |
+
|
45 |
+
|
46 |
+
all_letters = string.ascii_letters + " .,;'"
|
47 |
+
n_letters = len(all_letters)
|
48 |
+
|
49 |
+
# all_letters 로 문자의 주소 찾기, 예시 "a" = 0
|
50 |
+
def letterToIndex(letter):
|
51 |
+
return all_letters.find(letter)
|
52 |
+
|
53 |
+
|
54 |
+
# 한 줄(이름)을 <line_length x 1 x n_letters>,
|
55 |
+
# 또는 One-Hot 문자 벡터의 Array로 변경
|
56 |
+
def lineToTensor(line):
|
57 |
+
tensor = torch.zeros(len(line), 1, n_letters)
|
58 |
+
for li, letter in enumerate(line):
|
59 |
+
tensor[li][0][letterToIndex(letter)] = 1
|
60 |
+
return tensor
|