WolframAlpha.com
WolframCloud.com
All Sites & Public Resources...
Products & Services
Wolfram|One
Mathematica
Wolfram|Alpha Notebook Edition
Finance Platform
System Modeler
Wolfram Player
Wolfram Engine
WolframScript
Enterprise Private Cloud
Application Server
Enterprise Mathematica
Wolfram|Alpha Appliance
Enterprise Solutions
Corporate Consulting
Technical Consulting
Wolfram|Alpha Business Solutions
Resource System
Data Repository
Neural Net Repository
Function Repository
Wolfram|Alpha
Wolfram|Alpha Pro
Problem Generator
API
Data Drop
Products for Education
Mobile Apps
Wolfram Player
Wolfram Cloud App
Wolfram|Alpha for Mobile
Wolfram|Alpha-Powered Apps
Services
Paid Project Support
Wolfram U
Summer Programs
All Products & Services »
Technologies
Wolfram Language
Revolutionary knowledge-based programming language.
Wolfram Cloud
Central infrastructure for Wolfram's cloud products & services.
Wolfram Science
Technology-enabling science of the computational universe.
Wolfram Notebooks
The preeminent environment for any technical workflows.
Wolfram Engine
Software engine implementing the Wolfram Language.
Wolfram Natural Language Understanding System
Knowledge-based broadly deployed natural language.
Wolfram Data Framework
Semantic framework for real-world data.
Wolfram Universal Deployment System
Instant deployment across cloud, desktop, mobile, and more.
Wolfram Knowledgebase
Curated computable knowledge powering Wolfram|Alpha.
All Technologies »
Solutions
Engineering, R&D
Aerospace & Defense
Chemical Engineering
Control Systems
Electrical Engineering
Image Processing
Industrial Engineering
Mechanical Engineering
Operations Research
More...
Finance, Statistics & Business Analysis
Actuarial Sciences
Bioinformatics
Data Science
Econometrics
Financial Risk Management
Statistics
More...
Education
All Solutions for Education
Trends
Machine Learning
Multiparadigm Data Science
Internet of Things
High-Performance Computing
Hackathons
Software & Web
Software Development
Authoring & Publishing
Interface Development
Web Development
Sciences
Astronomy
Biology
Chemistry
More...
All Solutions »
Learning & Support
Learning
Wolfram Language Documentation
Fast Introduction for Programmers
Wolfram U
Videos & Screencasts
Wolfram Language Introductory Book
Webinars & Training
Summer Programs
Books
Need Help?
Support FAQ
Wolfram Community
Contact Support
Premium Support
Paid Project Support
Technical Consulting
All Learning & Support »
Company
About
Company Background
Wolfram Blog
Events
Contact Us
Work with Us
Careers at Wolfram
Internships
Other Wolfram Language Jobs
Initiatives
Wolfram Foundation
MathWorld
Computer-Based Math
A New Kind of Science
Wolfram Technology for Hackathons
Student Ambassador Program
Wolfram for Startups
Demonstrations Project
Wolfram Innovator Awards
Wolfram + Raspberry Pi
Summer Programs
More...
All Company »
Search
WOLFRAM COMMUNITY
Connect with users of Wolfram technologies to learn, solve problems and share ideas
Join
Sign In
Dashboard
Groups
People
Message Boards
Answer
(
Unmark
)
Mark as an Answer
GROUPS:
Staff Picks
Data Science
Wolfram Language
Computational Linguistics
Natural Language Processing
Wolfram High School Summer Camp
Computational Humanities
7
Emily Do
[WSC22] Exploring the divergence in pronunciations of Chinese characters
Emily Do
Posted
21 days ago
400 Views
|
1 Reply
|
7 Total Likes
Follow this post
|
Exploring the divergence in pronunciations of Chinese characters
By
Emily Do
In this project, I explored the divergence of the pronunciations of Chinese characters in the modern Chinese, Japanese, and Korean languages by creating a data table where each Chinese character was listed next to its Romanized pronunciations in all three languages (Romanized pronunciation meaning the closest equivalent sound to the actual pronunciation using the Roman alphabet). I did this by scraping online dictionaries of all three languages and parsing their pronunciation keys, and in the case of Korean, systematically converting Korean characters to their Romanized pronunciations. From the data table, I found the distances between each of the languages' pronunciations of Chinese characters, and compared all of the homonyms. Further patterns in the divergence of these pronunciations can be found using this work.
Introduction
Finding patterns in changes in pronunciations of Chinese characters between Chinese, Japanese, and Korean can help one better understand the connections between these languages. Such patterns can also make it easier for one to learn one of these languages if they already know another.
Background Information
Before learning about the history of Chinese, Japanese, and Korean, it is important to note that language is separate from writing system. The word “language” only refers to the communication in the form of speech rather than both spoken and written communication, which both the Japanese and Koreans had before they started using Chinese characters. However, they both initially used Chinese characters to express the sounds in their languages because they did not have their own writing systems.
Out of the Chinese, Japanese, and Korean writing systems, Chinese script is the oldest and heavily influenced both Japanese and Korean vocabularies which went along with the spread of their soft and hard power. [7] About 60% of the Japanese vocabulary and about 75% of the Korean vocabulary originated from Chinese. [36, 40] Chinese also greatly influenced the Vietnamese vocabulary. [18] The Chinese writing system is made up of more than 50,000 characters, each of which are logograms, meaning they each have individual meanings. [7] Some modern Chinese characters trace back to around 1200 BC during the Shang Dynasty, but the process of the creation of characters started even earlier. [38] However the Chinese writing system’s standard written form was only created in 1913. [7]
The Japanese first adopted Chinese characters for their own language, and later developed their own writing scripts, katakana and hiragana, created around the 9th century.[7, 23] Katakana and hiragana are both syllabaries, meaning each character represents a syllable. [23, 24]
Koreans initially also had their own spoken language but not writing system, so they wrote with Chinese characters. [7] Most of the ancient Korean texts were written in Chinese script. [18] In the 15th century, Korea created its own written language, but Chinese characters were still used for some time. [7] Vocabulary derived from Chinese characters is still heavily used, but now the sounds are expressed with the Korean script.
Although both the Japanese and Koreans now have their individual writing systems for expressing sounds, their vocabularies derived from Chinese are still in use and retain much of the original pronunciations. [7] In this project, I studied the Romanized versions of those pronunciations (romaji for Japanese), alongside the Romanized pronunciations of Chinese characters, called pinyin. [9]
Compiling a List of Traditional Chinese Characters and Pronunciations
First, I found an online Chinese dictionary, and I wanted to create a list of traditional Chinese characters together with their pronunciations. [10]
I took the standard URL for the website so that you could add on the English word you wanted the dictionary entry for, then import the data from that entry.
I
n
[
]
:
=
s
t
a
n
d
a
r
d
c
=
"
h
t
t
p
s
:
/
/
c
h
i
n
e
s
e
d
i
c
t
i
o
n
a
r
y
.
n
e
t
/
t
r
a
n
s
l
a
t
e
-
e
n
g
l
i
s
h
/
"
;
The URL and data from entering the word "search":
I
n
[
]
:
=
e
x
a
m
p
l
e
c
=
S
t
r
i
n
g
J
o
i
n
[
s
t
a
n
d
a
r
d
c
,
"
s
e
a
r
c
h
"
]
O
u
t
[
]
=
h
t
t
p
s
:
/
/
c
h
i
n
e
s
e
d
i
c
t
i
o
n
a
r
y
.
n
e
t
/
t
r
a
n
s
l
a
t
e
-
e
n
g
l
i
s
h
/
s
e
a
r
c
h
e
x
a
m
p
l
e
c
d
a
t
a
=
I
m
p
o
r
t
[
e
x
a
m
p
l
e
c
,
"
D
a
t
a
"
]
Then I needed to take the relevant data from each entry, namely, the translation in traditional Chinese characters and the pronunciation. There were often multiple translations for an English word, so I took the characters from all of them.
Taking the translations of the word "search" in traditional characters and pronunciations. The dictionary offered four translations.
I
n
[
]
:
=
C
a
s
e
s
[
e
x
a
m
p
l
e
c
d
a
t
a
[
[
2
,
2
]
]
,
{
"
T
r
a
d
i
t
i
o
n
a
l
"
,
_
_
}
]
O
u
t
[
]
=
T
r
a
d
i
t
i
o
n
a
l
,
搜
查
,
T
r
a
d
i
t
i
o
n
a
l
,
搜
索
,
T
r
a
d
i
t
i
o
n
a
l
,
探
訪
,
T
r
a
d
i
t
i
o
n
a
l
,
追
尋
I
n
[
]
:
=
C
a
s
e
s
[
e
x
a
m
p
l
e
c
d
a
t
a
[
[
2
,
2
]
]
,
{
"
P
r
o
n
u
n
c
i
a
t
i
o
n
"
,
_
_
}
]
O
u
t
[
]
=
{
{
P
r
o
n
u
n
c
i
a
t
i
o
n
,
s
ō
u
c
h
á
}
,
{
P
r
o
n
u
n
c
i
a
t
i
o
n
,
s
ō
u
s
u
ǒ
}
,
{
P
r
o
n
u
n
c
i
a
t
i
o
n
,
t
à
n
f
ǎ
n
g
}
,
{
P
r
o
n
u
n
c
i
a
t
i
o
n
,
z
h
u
ī
x
ú
n
}
}
So, the generalized functions for getting the characters and pronunciations were:
Taking the data:
I
n
[
]
:
=
d
a
t
a
c
[
w
o
r
d
_
]
:
=
I
m
p
o
r
t
[
S
t
r
i
n
g
J
o
i
n
[
s
t
a
n
d
a
r
d
c
,
w
o
r
d
]
,
"
D
a
t
a
"
]
Taking the relevant information (without the headers of "Traditional" and "Pronunciation":
I
n
[
]
:
=
i
n
f
o
c
[
x
_
]
:
=
{
C
h
a
r
a
c
t
e
r
s
@
#
[
[
2
]
]
&
/
@
C
a
s
e
s
[
x
[
[
2
,
2
]
]
,
{
"
T
r
a
d
i
t
i
o
n
a
l
"
,
_
_
}
]
/
/
F
l
a
t
t
e
n
,
T
e
x
t
W
o
r
d
s
@
#
[
[
2
]
]
&
/
@
C
a
s
e
s
[
x
[
[
2
,
2
]
]
,
{
"
P
r
o
n
u
n
c
i
a
t
i
o
n
"
,
_
_
}
]
/
/
F
l
a
t
t
e
n
}
Then, using both those functions to create a list of characters together with their pronunciations:
I
n
[
]
:
=
f
u
n
c
t
i
o
n
c
[
w
o
r
d
_
]
:
=
T
r
a
n
s
p
o
s
e
[
i
n
f
o
c
[
d
a
t
a
c
[
w
o
r
d
]
]
]
The final results from inputting the word "search":
I
n
[
]
:
=
f
u
n
c
t
i
o
n
c
[
"
s
e
a
r
c
h
"
]
O
u
t
[
]
=
搜
,
s
ō
u
,
查
,
c
h
á
,
搜
,
s
ō
u
,
索
,
s
u
ǒ
,
探
,
t
à
n
,
訪
,
f
ǎ
n
g
,
追
,
z
h
u
ī
,
尋
,
x
ú
n
Taking the Japanese Pronunciation of a Character
Similarly to the Chinese dictionary, I created a standard URL for a Japanese dictionary such that I could replace the string "keyWord" with the Chinese character I wanted to look up. [22] The only difference was that I had to run the function URLEncode on the character so the website could take the URL, then I imported the data from that dictionary entry.
The standard URL:
I
n
[
]
:
=
u
r
l
j
=
"
h
t
t
p
s
:
/
/
w
w
w
.
j
a
p
a
n
d
i
c
t
.
c
o
m
/
k
a
n
j
i
/
k
e
y
W
o
r
d
?
l
a
n
g
=
e
n
"
O
u
t
[
]
=
h
t
t
p
s
:
/
/
w
w
w
.
j
a
p
a
n
d
i
c
t
.
c
o
m
/
k
a
n
j
i
/
k
e
y
W
o
r
d
?
l
a
n
g
=
e
n
Inserting the encoded character so the website would understand the URL:
I
n
[
]
:
=
u
r
l
S
e
a
r
c
h
j
=
S
t
r
i
n
g
R
e
p
l
a
c
e
[
u
r
l
j
,
"
k
e
y
W
o
r
d
"
-
>
U
R
L
E
n
c
o
d
e
[
"
搜
"
]
]
O
u
t
[
]
=
h
t
t
p
s
:
/
/
w
w
w
.
j
a
p
a
n
d
i
c
t
.
c
o
m
/
k
a
n
j
i
/
%
E
6
%
9
0
%
9
C
?
l
a
n
g
=
e
n
Importing the data from the dictionary entry:
I
n
[
]
:
=
w
e
b
S
o
u
r
c
e
=
I
m
p
o
r
t
[
u
r
l
S
e
a
r
c
h
j
,
"
S
o
u
r
c
e
"
]
;
Within the source data, I needed to find the string
<dt>On’yomi</dt>
as it would be near the pronunciation I needed. On'yomi is one of the two ways that the Japanese read Chinese characters (the other being "Kun'yomi). On'yomi is a way of reading derived from Chinese pronunciations, while Kun’yomi is the original Japanese way of reading Chinese characters. [8] The "On'yomi" readings are the pronunciations used in this project.
Finding the start index of the string position of
<dt>On’yomi</dt>
I
n
[
]
:
=
s
t
a
r
t
=
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
w
e
b
S
o
u
r
c
e
,
"
<
d
t
>
O
n
'
y
o
m
i
<
/
d
t
>
"
]
[
[
1
,
1
]
]
O
u
t
[
]
=
3
2
4
5
3
Taking the segment including that string:
I
n
[
]
:
=
s
e
g
m
e
n
t
=
S
t
r
i
n
g
T
a
k
e
[
w
e
b
S
o
u
r
c
e
,
{
s
t
a
r
t
,
s
t
a
r
t
+
2
2
0
}
]
O
u
t
[
]
=
<
d
t
>
O
n
'
y
o
m
i
<
/
d
t
>
<
d
d
c
l
a
s
s
=
"
m
s
-
3
m
t
-
2
"
>
<
s
p
a
n
c
l
a
s
s
=
"
m
e
-
4
"
d
a
t
a
-
b
s
-
t
o
g
g
l
e
=
"
t
o
o
l
t
i
p
"
d
a
t
a
-
b
s
-
p
l
a
c
e
m
e
n
t
=
"
t
o
p
"
t
i
t
l
e
=
"
s
o
u
"
>
ソ
ウ
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
m
e
-
4
"
d
a
t
a
-
b
s
-
t
o
g
g
l
e
=
"
t
o
o
l
t
i
p
"
d
a
t
a
-
b
s
-
p
l
a
c
e
m
e
n
t
=
"
t
o
p
"
t
i
t
l
e
=
"
s
h
u
"
>
シ
ュ
<
/
s
p
a
n
>
<
s
p
a
n
Picking out the string ”title=\””, which would be next to the On'yomi pronunciation:
I
n
[
]
:
=
b
e
g
i
n
=
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
s
e
g
m
e
n
t
,
"
t
i
t
l
e
=
\
"
"
]
[
[
1
,
2
]
]
O
u
t
[
]
=
1
1
3
Taking the segment after that string:
I
n
[
]
:
=
r
e
m
a
i
n
d
e
r
=
S
t
r
i
n
g
T
a
k
e
[
s
e
g
m
e
n
t
,
b
e
g
i
n
;
;
-
1
]
O
u
t
[
]
=
"
s
o
u
"
>
ソ
ウ
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
m
e
-
4
"
d
a
t
a
-
b
s
-
t
o
g
g
l
e
=
"
t
o
o
l
t
i
p
"
d
a
t
a
-
b
s
-
p
l
a
c
e
m
e
n
t
=
"
t
o
p
"
t
i
t
l
e
=
"
s
h
u
"
>
シ
ュ
<
/
s
p
a
n
>
<
s
p
a
n
Finding the position of the character that separated the On'yomi pronunciation from the rest of the segment:
I
n
[
]
:
=
p
o
s
i
t
i
o
n
=
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
r
e
m
a
i
n
d
e
r
,
"
\
"
>
"
]
[
[
A
l
l
,
1
]
]
[
[
1
]
]
-
2
O
u
t
[
]
=
3
Taking the On'yomi pronunciation:
I
n
[
]
:
=
S
t
r
i
n
g
T
a
k
e
[
s
e
g
m
e
n
t
,
{
b
e
g
i
n
+
1
,
b
e
g
i
n
+
p
o
s
i
t
i
o
n
}
]
O
u
t
[
]
=
s
o
u
Then I created functions for each step of the process, and consolidated that into one function that would return a Chinese character and its Japanese pronunciation.
I
n
[
]
:
=
i
m
p
o
r
t
j
[
c
h
a
r
_
]
:
=
I
m
p
o
r
t
[
S
t
r
i
n
g
R
e
p
l
a
c
e
[
u
r
l
j
,
"
k
e
y
W
o
r
d
"
-
>
U
R
L
E
n
c
o
d
e
[
c
h
a
r
]
]
,
"
S
o
u
r
c
e
"
]
s
e
g
m
e
n
t
j
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
T
a
k
e
[
i
m
p
o
r
t
j
[
c
h
a
r
]
,
{
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
i
m
p
o
r
t
j
[
c
h
a
r
]
,
"
<
d
t
>
O
n
'
y
o
m
i
<
/
d
t
>
"
]
[
[
1
,
1
]
]
,
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
i
m
p
o
r
t
j
[
c
h
a
r
]
,
"
<
d
t
>
O
n
'
y
o
m
i
<
/
d
t
>
"
]
[
[
1
,
1
]
]
+
2
2
0
}
]
b
e
g
i
n
j
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
s
e
g
m
e
n
t
j
[
c
h
a
r
]
,
"
t
i
t
l
e
=
\
"
"
]
[
[
1
,
2
]
]
r
e
m
a
i
n
d
e
r
j
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
T
a
k
e
[
s
e
g
m
e
n
t
j
[
c
h
a
r
]
,
b
e
g
i
n
j
[
c
h
a
r
]
;
;
-
1
]
p
o
s
i
t
i
o
n
j
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
r
e
m
a
i
n
d
e
r
j
[
c
h
a
r
]
,
"
\
"
>
"
]
[
[
A
l
l
,
1
]
]
[
[
1
]
]
-
2
t
a
k
e
j
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
T
a
k
e
[
s
e
g
m
e
n
t
j
[
c
h
a
r
]
,
{
b
e
g
i
n
j
[
c
h
a
r
]
+
1
,
b
e
g
i
n
j
[
c
h
a
r
]
+
p
o
s
i
t
i
o
n
j
[
c
h
a
r
]
}
]
f
u
n
c
t
i
o
n
j
[
c
h
a
r
_
]
:
=
{
c
h
a
r
,
t
a
k
e
j
[
c
h
a
r
]
}
The final results from inputting the word “搜":
I
n
[
]
:
=
f
u
n
c
t
i
o
n
j
[
"
搜
"
]
O
u
t
[
]
=
搜
,
s
o
u
Taking the Korean Pronunciation of a Character
There were two steps to taking the Korean pronunciation of a Chinese character. The Korean dictionary I used took a Chinese character and gave the Korean pronunciation of it, but in a Korean character. [43] So, the first step was getting that character.
I again used a standard URL with the string "searchKey" replaced with an encoded Chinese character. Then I imported the source data from the dictionary entry pulled up from the URL and looked for the string that would be next to the Korean character I wanted. Lastly, I took that Korean character.
I
n
[
]
:
=
u
r
l
k
=
"
h
t
t
p
s
:
/
/
d
i
c
.
d
a
u
m
.
n
e
t
/
s
e
a
r
c
h
.
d
o
?
q
=
s
e
a
r
c
h
K
e
y
&
d
i
c
=
h
a
n
j
a
"
;
k
o
r
e
a
n
d
a
t
a
[
c
h
a
r
_
]
:
=
I
m
p
o
r
t
[
S
t
r
i
n
g
R
e
p
l
a
c
e
[
u
r
l
k
,
"
s
e
a
r
c
h
K
e
y
"
-
>
U
R
L
E
n
c
o
d
e
[
c
h
a
r
]
]
,
"
S
o
u
r
c
e
"
]
k
o
r
e
a
n
s
t
r
i
n
g
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
C
a
s
e
s
[
k
o
r
e
a
n
d
a
t
a
[
c
h
a
r
]
,
S
h
o
r
t
e
s
t
[
"
d
a
t
a
-
t
i
a
r
a
-
a
c
t
i
o
n
-
n
a
m
e
=
\
"
훈
음
클
릭
\
"
>
"
~
~
x
_
_
~
~
"
,
"
]
:
>
x
]
[
[
1
]
]
,
S
t
r
i
n
g
C
a
s
e
s
[
k
o
r
e
a
n
d
a
t
a
[
c
h
a
r
]
,
S
h
o
r
t
e
s
t
[
"
d
a
t
a
-
t
i
a
r
a
-
a
c
t
i
o
n
-
n
a
m
e
=
\
"
훈
음
클
릭
\
"
>
"
~
~
x
_
_
~
~
"
<
"
]
:
>
x
]
[
[
1
]
]
k
o
r
e
a
n
p
r
o
n
u
n
c
i
a
t
i
o
n
f
u
n
c
t
i
o
n
[
c
h
a
r
_
]
:
=
M
i
n
i
m
a
l
B
y
[
k
o
r
e
a
n
s
t
r
i
n
g
[
c
h
a
r
]
,
S
t
r
i
n
g
L
e
n
g
t
h
[
#
]
&
]
[
[
1
]
]
k
o
r
e
a
n
p
r
o
n
u
n
c
i
a
t
i
o
n
f
u
l
l
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
S
p
l
i
t
[
k
o
r
e
a
n
p
r
o
n
u
n
c
i
a
t
i
o
n
f
u
n
c
t
i
o
n
[
c
h
a
r
]
,
"
"
]
[
[
-
1
]
]
Getting the Korean pronunciation in Korean characters of a Chinese character:
I
n
[
]
:
=
k
o
r
e
a
n
p
r
o
n
u
n
c
i
a
t
i
o
n
f
u
l
l
[
"
搜
"
]
O
u
t
[
]
=
수
As opposed to in the Japanese dictionary, from which I could take just the Romanized pronunciation of a Chinese character, I needed to convert the Korean character taken from the Korean dictionary into its Romanized pronunciation.
Each Korean character is made up of a starting consonant and a vowel, and sometimes an ending consonant. The unicode range of Korean characters includes all the possibilities created in this format, in an organized sequence. The functions below use this organization to map each consonant and vowel to a number. Then, each of those are mapped to their Romanized pronunciation, so that the Korean characters could be converted to their pronunciation.
I
n
[
]
:
=
c
h
a
r
T
o
C
o
u
n
t
[
c
h
a
r
_
]
:
=
T
o
C
h
a
r
a
c
t
e
r
C
o
d
e
[
c
h
a
r
]
[
[
1
]
]
-
T
o
C
h
a
r
a
c
t
e
r
C
o
d
e
[
"
가
"
]
[
[
1
]
]
c
o
n
s
o
n
a
n
t
C
o
u
n
t
[
c
h
a
r
_
]
:
=
Q
u
o
t
i
e
n
t
[
c
h
a
r
T
o
C
o
u
n
t
[
c
h
a
r
]
,
5
8
8
]
v
o
w
e
l
C
o
u
n
t
[
c
h
a
r
_
]
:
=
Q
u
o
t
i
e
n
t
[
M
o
d
[
c
h
a
r
T
o
C
o
u
n
t
[
c
h
a
r
]
,
5
8
8
]
,
2
8
]
e
n
d
C
o
u
n
t
[
c
h
a
r
_
]
:
=
M
o
d
[
M
o
d
[
c
h
a
r
T
o
C
o
u
n
t
[
c
h
a
r
]
,
5
8
8
]
,
2
8
]
r
u
l
e
1
=
{
0
"
g
"
,
1
"
g
g
"
,
2
"
n
"
,
3
"
d
"
,
4
"
d
d
"
,
5
"
r
"
,
6
"
m
"
,
7
"
b
"
,
8
"
v
v
"
,
9
"
s
"
,
1
0
"
s
s
"
,
1
1
"
"
,
1
2
"
j
"
,
1
3
"
j
j
"
,
1
4
"
c
h
"
,
1
5
"
k
"
,
1
6
"
t
"
,
1
7
"
p
"
,
1
8
"
h
"
}
;
r
u
l
e
2
=
{
0
"
a
"
,
1
"
a
e
"
,
2
"
y
a
"
,
3
"
y
a
e
"
,
4
"
e
o
"
,
5
"
e
"
,
6
"
y
e
o
"
,
7
"
y
e
"
,
8
"
o
"
,
9
"
w
a
"
,
1
0
"
w
a
e
"
,
1
1
"
o
i
"
,
1
2
"
y
o
"
,
1
3
"
u
"
,
1
4
"
w
e
o
"
,
1
5
"
w
e
"
,
1
6
"
w
i
"
,
1
7
"
y
u
"
,
1
8
"
e
u
"
,
1
9
"
u
i
"
,
2
0
"
i
"
}
;
r
u
l
e
3
=
{
0
"
"
,
1
"
g
"
,
2
"
g
g
"
,
3
"
g
s
"
,
4
"
n
"
,
5
"
n
j
"
,
6
"
n
h
"
,
7
"
d
"
,
8
"
l
"
,
9
"
r
g
"
,
1
0
"
r
m
"
,
1
1
"
r
b
"
,
1
2
"
r
s
"
,
1
3
"
r
t
"
,
1
4
"
r
p
"
,
1
5
"
r
h
"
,
1
6
"
m
"
,
1
7
"
b
"
,
1
8
"
b
s
"
,
1
9
"
s
"
,
2
0
"
s
s
"
,
2
1
"
n
g
"
,
2
2
"
j
"
,
2
3
"
c
h
"
,
2
4
"
k
"
,
2
5
"
t
"
,
2
6
"
p
"
,
2
7
"
h
"
}
;
k
o
r
e
a
n
C
o
d
e
[
c
h
a
r
_
]
:
=
S
t
r
i
n
g
J
o
i
n
@
{
c
o
n
s
o
n
a
n
t
C
o
u
n
t
[
c
h
a
r
]
/
.
r
u
l
e
1
,
v
o
w
e
l
C
o
u
n
t
[
c
h
a
r
]
/
.
r
u
l
e
2
,
e
n
d
C
o
u
n
t
[
c
h
a
r
]
/
.
r
u
l
e
3
}
Converting a Korean character to its Romanized pronunciation:
I
n
[
]
:
=
k
o
r
e
a
n
C
o
d
e
[
"
수
"
]
O
u
t
[
]
=
s
u
Finally, a function that combines the two steps and returns a Chinese character with its Korean pronunciation:
I
n
[
]
:
=
f
u
n
c
t
i
o
n
k
[
c
h
a
r
_
]
:
=
{
c
h
a
r
,
k
o
r
e
a
n
C
o
d
e
[
k
o
r
e
a
n
p
r
o
n
u
n
c
i
a
t
i
o
n
f
u
l
l
[
c
h
a
r
]
]
}
The final results from inputting the word “搜":
I
n
[
]
:
=
f
u
n
c
t
i
o
n
k
[
"
搜
"
]
O
u
t
[
]
=
搜
,
s
u
Creating a List of Characters and Pronunciations
After creating the above functions, I needed a word list to run them on. Due to the format of the Chinese dictionary function, the words all had to be in English, so I took a list of the most frequently used words from Wikipedia. [34]
I
n
[
]
:
=
c
o
m
m
o
n
w
o
r
d
s
d
a
t
a
=
I
m
p
o
r
t
[
"
h
t
t
p
s
:
/
/
e
n
.
w
i
k
i
p
e
d
i
a
.
o
r
g
/
w
i
k
i
/
M
o
s
t
_
c
o
m
m
o
n
_
w
o
r
d
s
_
i
n
_
E
n
g
l
i
s
h
"
,
"
D
a
t
a
"
]
[
[
1
,
1
,
2
]
]
;
Getting just the list of words (the full data included information about each word):
I
n
[
]
:
=
w
o
r
d
l
i
s
t
=
D
r
o
p
[
#
[
[
1
]
]
&
/
@
c
o
m
m
o
n
w
o
r
d
s
d
a
t
a
,
1
]
O
u
t
[
]
=
{
t
h
e
,
b
e
,
t
o
,
o
f
,
a
n
d
,
a
,
i
n
,
t
h
a
t
,
h
a
v
e
,
I
,
i
t
,
f
o
r
,
n
o
t
,
o
n
,
w
i
t
h
,
h
e
,
a
s
,
y
o
u
,
d
o
,
a
t
,
t
h
i
s
,
b
u
t
,
h
i
s
,
b
y
,
f
r
o
m
,
t
h
e
y
,
w
e
,
s
a
y
,
h
e
r
,
s
h
e
,
o
r
,
a
n
,
w
i
l
l
,
m
y
,
o
n
e
,
a
l
l
,
w
o
u
l
d
,
t
h
e
r
e
,
t
h
e
i
r
,
w
h
a
t
,
s
o
,
u
p
,
o
u
t
,
i
f
,
a
b
o
u
t
,
w
h
o
,
g
e
t
,
w
h
i
c
h
,
g
o
,
m
e
,
w
h
e
n
,
m
a
k
e
,
c
a
n
,
l
i
k
e
,
t
i
m
e
,
n
o
,
j
u
s
t
,
h
i
m
,
k
n
o
w
,
t
a
k
e
,
p
e
o
p
l
e
,
i
n
t
o
,
y
e
a
r
,
y
o
u
r
,
g
o
o
d
,
s
o
m
e
,
c
o
u
l
d
,
t
h
e
m
,
s
e
e
,
o
t
h
e
r
,
t
h
a
n
,
t
h
e
n
,
n
o
w
,
l
o
o
k
,
o
n
l
y
,
c
o
m
e
,
i
t
s
,
o
v
e
r
,
t
h
i
n
k
,
a
l
s
o
,
b
a
c
k
,
a
f
t
e
r
,
u
s
e
,
t
w
o
,
h
o
w
,
o
u
r
,
w
o
r
k
,
f
i
r
s
t
,
w
e
l
l
,
w
a
y
,
e
v
e
n
,
n
e
w
,
w
a
n
t
,
b
e
c
a
u
s
e
,
a
n
y
,
t
h
e
s
e
,
g
i
v
e
,
d
a
y
,
m
o
s
t
,
u
s
}
However, some of the words did not have dictionary entries in the Chinese dictionary, so I created a function to discard those.
I
n
[
]
:
=
c
l
e
a
n
w
o
r
d
l
i
s
t
[
l
i
s
t
_
]
:
=
I
f
[
Q
u
i
e
t
@
f
u
n
c
t
i
o
n
c
[
#
]
=
=
=
{
}
,
N
o
t
h
i
n
g
,
#
]
&
/
@
l
i
s
t
I
n
[
]
:
=
c
l
e
a
n
w
o
r
d
l
i
s
t
[
w
o
r
d
l
i
s
t
]
O
u
t
[
]
=
{
b
e
,
t
o
,
o
f
,
a
n
d
,
i
n
,
t
h
a
t
,
h
a
v
e
,
i
t
,
n
o
t
,
o
n
,
w
i
t
h
,
h
e
,
a
s
,
y
o
u
,
a
t
,
t
h
i
s
,
b
u
t
,
h
i
s
,
b
y
,
f
r
o
m
,
t
h
e
y
,
w
e
,
h
e
r
,
s
h
e
,
o
r
,
a
n
,
w
i
l
l
,
m
y
,
o
n
e
,
a
l
l
,
t
h
e
r
e
,
t
h
e
i
r
,
w
h
a
t
,
s
o
,
u
p
,
o
u
t
,
i
f
,
a
b
o
u
t
,
w
h
o
,
g
e
t
,
w
h
i
c
h
,
m
e
,
w
h
e
n
,
m
a
k
e
,
c
a
n
,
l
i
k
e
,
t
i
m
e
,
n
o
,
j
u
s
t
,
h
i
m
,
k
n
o
w
,
t
a
k
e
,
p
e
o
p
l
e
,
y
e
a
r
,
g
o
o
d
,
s
o
m
e
,
s
e
e
,
o
t
h
e
r
,
t
h
a
n
,
t
h
e
n
,
n
o
w
,
l
o
o
k
,
o
n
l
y
,
o
v
e
r
,
t
h
i
n
k
,
b
a
c
k
,
u
s
e
,
t
w
o
,
h
o
w
,
w
o
r
k
,
f
i
r
s
t
,
w
e
l
l
,
w
a
y
,
e
v
e
n
,
n
e
w
,
b
e
c
a
u
s
e
,
a
n
y
,
t
h
e
s
e
,
g
i
v
e
,
m
o
s
t
,
u
s
}
I then ran that edited word list through the Chinese dictionary function, and selected the results that came back with a character and pronunciation.
I
n
[
]
:
=
c
h
i
n
e
s
e
w
o
r
d
l
i
s
t
=
Q
u
i
e
t
[
f
u
n
c
t
i
o
n
c
[
#
]
&
/
@
c
l
e
a
n
w
o
r
d
l
i
s
t
[
w
o
r
d
l
i
s
t
]
]
I
n
[
]
:
=
c
h
i
n
e
s
e
w
o
r
d
l
i
s
t
f
u
l
l
=
C
a
s
e
s
[
F
l
a
t
t
e
n
[
c
h
i
n
e
s
e
w
o
r
d
l
i
s
t
,
1
]
,
{
_
_
,
_
_
}
]
Editing the Character List
I then wanted to take each of the Chinese characters from the list, and use the Japanese and Korean dictionaries to get their pronunciations in both languages. However, some of the Chinese characters did not have entries in the Japanese and Korean dictionaries, so I wanted to preemptively discard such characters in the character list.
As shown above, to get the pronunciation of Chinese characters in the Japanese and Korean dictionaries, I looked for specific strings in the source data of the dictionary entries of each character. If those strings did not show up, I then knew that the character did not have a pronunciation in the language, and discarded it.
For each list, I took the intersection of the results that it had in both functions, so that the character would have pronunciations in all three languages.
Finally, I created a function combining the three first functions that would take the format of the above list (both characters and pronunciations). It took the above list of Chinese characters and their pronunciations and returned only those with pronunciations in all the languages.
I
n
[
]
:
=
c
l
e
a
n
j
a
p
a
n
e
s
e
l
i
s
t
[
l
i
s
t
_
]
:
=
D
e
l
e
t
e
D
u
p
l
i
c
a
t
e
s
[
I
f
[
S
t
r
i
n
g
P
o
s
i
t
i
o
n
[
i
m
p
o
r
t
j
[
#
]
,
"
<
d
t
>
O
n
'
y
o
m
i
<
/
d
t
>
"
]
=
=
=
{
}
,
N
o
t
h
i
n
g
,
#
]
&
/
@
l
i
s
t
]
c
l
e
a
n
k
o
r
e
a
n
l
i
s
t
[
l
i
s
t
_
]
:
=
D
e
l
e
t
e
D
u
p
l
i
c
a
t
e
s
[
I
f
[
S
t
r
i
n
g
C
a
s
e
s
[
k
o
r
e
a
n
d
a
t
a
[
#
]
,
S
h
o
r
t
e
s
t
[
"
d
a
t
a
-
t
i
a
r
a
-
a
c
t
i
o
n
-
n
a
m
e
=
\
"
훈
음
클
릭
\
"
>
"
~
~
x
_
_
~
~
"
,
"
]
:
>
x
]
=
=
=
{
}
,
N
o
t
h
i
n
g
,
#
]
&
/
@
l
i
s
t
]
c
l
e
a
n
t
o
t
a
l
l
i
s
t
[
l
i
s
t
_
]
:
=
I
n
t
e
r
s
e
c
t
i
o
n
[
c
l
e
a
n
k
o
r
e
a
n
l
i
s
t
[
l
i
s
t
]
,
c
l
e
a
n
j
a
p
a
n
e
s
e
l
i
s
t
[
l
i
s
t
]
]
c
l
e
a
n
c
h
i
n
e
s
e
l
i
s
t
[
l
i
s
t
_
]
:
=
I
f
[
I
n
t
e
r
s
e
c
t
i
o
n
[
c
l
e
a
n
t
o
t
a
l
l
i
s
t
[
#
[
[
1
]
]
&
/
@
l
i
s
t
]
,
#
]
=
=
=
{
}
,
N
o
t
h
i
n
g
,
#
]
&
/
@
l
i
s
t
/
/
D
e
l
e
t
e
D
u
p
l
i
c
a
t
e
s
I first tried running the function on the whole Chinese word list, but it was too big a list for the function to do all at once, so I split the list into groups of 10 sublists (each with a character and its pronunciation), and ran the function separately on each sublist.
For example, the first sublist was:
I
n
[
]
:
=
c
h
a
r
a
c
t
e
r
s
1
=
c
l
e
a
n
c
h
i
n
e
s
e
l
i
s
t
[
c
h
i
n
e
s
e
w
o
r
d
l
i
s
t
f
u
l
l
[
[
1
;
;
1
0
]
]
]
O
u
t
[
]
=
係
,
x
ì
,
系
,
x
ì
,
至
,
z
h
ì
,
於
,
y
ú
,
由
,
y
ó
u
,
對
,
d
u
ì
,
向
,
x
i
à
n
g
,
給
,
j
ǐ
,
為
,
w
è
i
,
的
,
d
ì
Creating a Data Table
There ended up being 64 "clean" character lists. I then grouped each of them into groups of 5, ending up with 12 larger character lists (the last one had 4 extra sublists).
The first character list:
I
n
[
]
:
=
c
h
a
r
a
c
t
e
r
l
i
s
t
1
=
J
o
i
n
[
c
h
a
r
a
c
t
e
r
s
1
,
c
h
a
r
a
c
t
e
r
s
2
,
c
h
a
r
a
c
t
e
r
s
3
,
c
h
a
r
a
c
t
e
r
s
4
,
c
h
a
r
a
c
t
e
r
s
5
]
Then I wanted to make each sublist with a Chinese character and its pronunciation into a list including its pronunciations in Korean and Japanese.
I
n
[
]
:
=
d
a
t
a
l
i
s
t
[
l
i
s
t
_
]
:
=
{
#
,
f
u
n
c
t
i
o
n
j
[
#
[
[
1
]
]
]
,
f
u
n
c
t
i
o
n
k
[
#
[
[
1
]
]
]
}
&
/
@
l
i
s
t
The "datalist" function run on the first character list of 12:
I
n
[
]
:
=
d
a
t
a
l
i
s
t
1
=
d
a
t
a
l
i
s
t
[
c
h
a
r
a
c
t
e
r
l
i
s
t
1
]
The "finaldatalist" function makes sure everything in the list is the correct format and that there are no duplicates, so that everything can
f
o
r
m
a
t
l
i
s
t
[
l
i
s
t
_
]
:
=
D
e
l
e
t
e
D
u
p
l
i
c
a
t
e
s
[
F
l
a
t
t
e
n
[
#
]
]
&
/
@
l
i
s
t
f
i
n
a
l
d
a
t
a
l
i
s
t
[
l
i
s
t
_
]
:
=
I
f
[
L
e
n
g
t
h
[
#
]
!
=
4
,
N
o
t
h
i
n
g
,
#
]
&
/
@
f
o
r
m
a
t
l
i
s
t
[
l
i
s
t
]
/
/
D
e
l
e
t
e
D
u
p
l
i
c
a
t
e
s
The "finaldatalist" function run on the first data list of 12:
I
n
[
]
:
=
f
i
n
a
l
d
a
t
a
l
i
s
t
1
=
f
i
n
a
l
d
a
t
a
l
i
s
t
[
d
a
t
a
l
i
s
t
1
]
Then I combined all the separately formatted data lists and sorted them by alphabetical order (in the Chinese pronunciation).
I
n
[
]
:
=
f
u
l
l
d
a
t
a
l
i
s
t
=
S
o
r
t
B
y
[
J
o
i
n
[
f
i
n
a
l
d
a
t
a
l
i
s
t
1
,
f
i
n
a
l
d
a
t
a
l
i
s
t
2
,
f
i
n
a
l
d
a
t
a
l
i
s
t
3
,
f
i
n
a
l
d
a
t
a
l
i
s
t
4
,
f
i
n
a
l
d
a
t
a
l
i
s
t
5
,
f
i
n
a
l
d
a
t
a
l
i
s
t
6
,
f
i
n
a
l
d
a
t
a
l
i
s
t
7
,
f
i
n
a
l
d
a
t
a
l
i
s
t
8
,
f
i
n
a
l
d
a
t
a
l
i
s
t
9
,
f
i
n
a
l
d
a
t
a
l
i
s
t
1
0
,
f
i
n
a
l
d
a
t
a
l
i
s
t
1
1
,
f
i
n
a
l
d
a
t
a
l
i
s
t
1
2
]
/
/
D
e
l
e
t
e
D
u
p
l
i
c
a
t
e
s
,
#
[
[
2
]
]
&
]
Finally, I created a function that would put my full data list into a table.
I
n
[
]
:
=
c
h
a
r
t
l
i
s
t
[
l
i
s
t
_
]
:
=
G
r
i
d
B
o
x
[
I
n
s
e
r
t
[
l
i
s
t
,
{
"
C
h
a
r
a
c
t
e
r
"
,
"
C
h
i
n
e
s
e
P
r
o
n
u
n
c
i
a
t
i
o
n
"
,
"
J
a
p
a
n
e
s
e
P
r
o
n
u
n
c
i
a
t
i
o
n
"
,
"
K
o
r
e
a
n
P
r
o
n
u
n
c
i
a
t
i
o
n
"
}
,
1
]
,
C
o
l
u
m
n
L
i
n
e
s
-
>
T
r
u
e
,
R
o
w
L
i
n
e
s
-
>
T
r
u
e
]
/
/
D
i
s
p
l
a
y
F
o
r
m
/
/
F
r
a
m
e
d
I
n
[
]
:
=
c
h
a
r
t
l
i
s
t
[
f
u
l
l
d
a
t
a
l
i
s
t
]
O
u
t
[
]
=
C
h
a
r
a
c
t
e
r
C
h
i
n
e
s
e
P
r
o
n
u
n
c
i
a
t
i
o
n
J
a
p
a
n
e
s
e
P
r
o
n
u
n
c
i
a
t
i
o
n
K
o
r
e
a
n
P
r
o
n
u
n
c
i
a
t
i
o
n
彼
b
ǐ
h
i
p
i
搬
b
ā
n
h
a
n
b
a
n
般
b
ā
n
h
a
n
b
a
n
報
b
à
o
h
o
u
b
o
抱
b
à
o
h
o
u
p
o
本
b
ě
n
h
o
n
b
o
n
必
b
ì
h
i
t
s
u
p
i
l
邊
b
i
ā
n
h
e
n
b
y
e
o
n
別
b
i
é
b
e
t
s
u
b
y
e
o
l
並
b
ì
n
g
h
e
i
b
y
e
o
n
g
并
b
ì
n
g
h
e
i
b
y
e
o
n
g
不
b
u
f
u
b
u
l
不
b
ù
f
u
b
u
l
此
c
ǐ
s
h
i
c
h
a
才
c
á
i
s
a
i
j
a
e
纔
c
á
i
s
a
n
j
a
e
初
c
h
ū
s
h
o
c
h
o
辰
c
h
e
n
s
h
i
n
j
i
n
啻
c
h
ì
s
h
i
s
i
次
c
ì
j
i
c
h
a
從
c
ó
n
g
j
u
u
j
o
n
g
打
d
ǎ
d
a
t
a
睹
d
ǔ
t
o
d
o
大
d
à
d
a
i
d
a
e
帶
d
à
i
t
a
i
d
a
e
待
d
à
i
t
a
i
d
a
e
殆
d
à
i
t
a
i
t
a
e
單
d
ā
n
t
a
n
d
a
n
但
d
à
n
t
a
n
d
a
n
當
d
ā
n
g
t
o
u
d
a
n
g
當
d
à
n
g
t
o
u
d
a
n
g
到
d
à
o
t
o
u
d
o
道
d
à
o
d
o
u
d
o
得
d
e
t
o
k
u
d
e
u
g
的
d
e
t
e
k
i
j
e
o
g
得
d
é
t
o
k
u
d
e
u
g
地
d
ì
c
h
i
j
i
的
d
ì
t
e
k
i
j
e
o
g
第
d
ì
d
a
i
j
e
頂
d
ǐ
n
g
c
h
o
u
j
e
o
n
g
都
d
ō
u
t
o
d
o
獨
d
ú
d
o
k
u
d
o
g
多
d
u
ō
t
a
d
a
對
d
u
ì
t
a
i
d
a
e
娥
é
g
a
a
而
é
r
j
i
i
二
è
r
n
i
i
爾
ě
r
j
i
i
法
f
ǎ
h
o
u
b
e
o
b
甫
f
ǔ
h
o
b
o
發
f
ā
h
a
t
s
u
b
a
l
凡
f
á
n
b
o
n
b
e
o
m
方
f
ā
n
g
h
o
u
b
a
n
g
放
f
à
n
g
h
o
u
b
a
n
g
風
f
ē
n
g
f
u
u
p
u
n
g
否
f
ǒ
u
h
i
b
u
弗
f
ú
f
u
t
s
u
b
u
l
該
g
ā
i
g
a
i
h
a
e
概
g
à
i
g
a
i
g
a
e
剛
g
ā
n
g
g
o
u
g
a
n
g
個
g
e
k
o
g
a
e
個
g
è
k
o
g
a
e
給
g
ě
i
k
y
u
u
g
e
u
b
跟
g
ē
n
k
o
n
g
e
u
n
公
g
ō
n
g
k
o
u
g
o
n
g
工
g
ō
n
g
k
o
u
g
o
n
g
姤
g
ò
u
k
o
u
g
u
覯
g
ò
u
k
o
u
g
u
果
g
u
ǒ
k
a
g
w
a
關
g
u
ā
n
k
a
n
g
w
a
n
罐
g
u
à
n
k
a
n
g
w
a
n
光
g
u
ā
n
g
k
o
u
g
w
a
n
g
過
g
u
ò
k
a
g
w
a
還
h
á
i
k
a
n
h
w
a
n
耗
h
à
o
m
o
u
m
o
何
h
é
k
a
h
a
和
h
é
w
a
h
w
a
曷
h
é
k
a
t
s
u
g
a
l
很
h
ě
n
k
o
n
h
e
u
n
好
h
ǎ
o
k
o
u
h
o
候
h
o
u
k
o
u
h
u
候
h
ò
u
k
o
u
h
u
後
h
ò
u
g
o
h
u
話
h
u
à
w
a
h
w
a
活
h
u
ó
k
a
t
s
u
h
w
a
l
或
h
u
ò
w
a
k
u
h
o
g
給
j
ǐ
k
y
u
u
g
e
u
b
脊
j
ǐ
s
e
k
i
c
h
e
o
g
及
j
í
k
y
u
u
g
e
u
b
季
j
ì
k
i
g
y
e
既
j
ì
k
i
g
i
洎
j
ì
k
i
g
y
e
繼
j
ì
k
e
i
g
y
e
假
j
i
ǎ
k
a
g
a
間
j
i
ā
n
k
a
n
g
a
n
將
j
i
ā
n
g
s
h
o
u
j
a
n
g
交
j
i
ā
o
k
o
u
g
y
o
價
j
i
e
k
a
g
a
節
j
i
é
s
e
t
s
u
j
e
o
l
接
j
i
ē
s
e
t
s
u
j
e
o
b
皆
j
i
ē
k
a
i
g
a
e
徑
j
ì
n
g
k
e
i
g
y
e
o
n
g
淨
j
ì
n
g
j
o
u
j
e
o
n
g
逕
j
ì
n
g
k
e
i
g
y
e
o
n
g
就
j
i
ù
s
h
u
u
c
h
w
i
今
j
ī
n
k
o
n
g
e
u
m
均
j
ū
n
k
i
n
g
y
u
n
僅
j
ǐ
n
k
i
n
g
e
u
n
緊
j
ǐ
n
k
i
n
g
i
n
丼
j
ǐ
n
g
t
o
n
j
e
o
n
g
井
j
ǐ
n
g
s
e
i
j
e
o
n
g
睊
j
u
à
n
e
n
g
y
e
o
n
厥
j
u
é
k
e
t
s
u
g
w
e
o
l
看
k
à
n
k
a
n
g
a
n
靠
k
à
o
k
o
u
g
o
刻
k
è
k
o
k
u
g
a
g
可
k
ě
k
a
g
a
考
k
ǎ
o
k
o
u
g
o
賴
l
à
i
r
a
i
r
o
i
類
l
è
i
r
u
i
r
y
u
連
l
i
á
n
r
e
n
r
y
e
o
n
良
l
i
á
n
g
r
y
o
u
r
y
a
n
g
嫽
l
i
á
o
r
o
u
r
o
撩
l
i
á
o
r
y
o
u
r
y
o
臉
l
i
ǎ
n
k
e
n
g
e
o
m
兩
l
i
ǎ
n
g
r
y
o
u
r
y
a
n
g
另
l
ì
n
g
r
e
i
r
y
e
o
n
g
領
l
ǐ
n
g
r
y
o
u
r
y
e
o
n
g
靡
m
ǐ
h
i
m
i
麼
m
e
b
i
m
a
沒
m
é
i
b
o
t
s
u
m
o
l
們
m
e
n
m
o
n
m
u
n
氓