Skip to content

Instantly share code, notes, and snippets.

@tiiime
Last active July 28, 2017 02:28
Show Gist options
  • Save tiiime/a8a7ba2fbf5e41026dec7ace0934316b to your computer and use it in GitHub Desktop.
Save tiiime/a8a7ba2fbf5e41026dec7ace0934316b to your computer and use it in GitHub Desktop.
Pinyin.kt
private const val 多音字分隔符 = "'"
private const val 单字分隔符 = " "
private const val EMPTY_STRING = ""
private const val INIT_INDEX = 0
fun String.getPronounce(): Set<String> {
fun go(arr: List<String>, index: Int, wholePinyin: String, firstChar: String, set: MutableSet<String>) {
if (index < arr.size) {
arr[index].split(多音字分隔符).forEach {
val head = if (it.isNotEmpty()) it[0].toString() else ""
go(arr, index + 1, wholePinyin + it, firstChar + head, set)
}
} else {
set.add(wholePinyin)
set.add(firstChar)
}
}
val set = mutableSetOf<String>()
go(Pinyin.toPinyin(this, 单字分隔符).split(单字分隔符), INIT_INDEX, EMPTY_STRING, EMPTY_STRING, set)
return set
}
object NameDict : PinyinMapDict() {
override fun mapping(): Map<String, Array<String>> {
val map = HashMap<String, Array<String>>()
map.put("\u4E5C", arrayOf("NIE'MIE"))
map.put("覃", arrayOf("QIN'TAN"))
map.put("翟", arrayOf("ZHAI'DI"))
map.put("朴", arrayOf("PAIO'PU"))
map.put("阚", arrayOf("KAN'HAN"))
map.put("能", arrayOf("NAI'NENG"))
map.put("都", arrayOf("DU'DOU"))
map.put("秘", arrayOf("BI'MI"))
map.put("阿", arrayOf("E'A"))
map.put("区", arrayOf("QU'OU"))
map.put("繁", arrayOf("FAN'PO"))
map.put("隗", arrayOf("WEI'KUI"))
map.put("郇", arrayOf("XUN'HUAN"))
map.put("黑", arrayOf("HEI'HE"))
map.put("盖", arrayOf("GAI'GE"))
map.put("查", arrayOf("CHA'ZHA"))
map.put("曾", arrayOf("CENG'ZENG"))
map.put("解", arrayOf("XIE'JIE"))
map.put("缪", arrayOf("MIAO'MOU"))
map.put("晟", arrayOf("CHENG'SHENG"))
map.put("乐", arrayOf("LE'YUE"))
map.put("员", arrayOf("YUAN'YUN"))
map.put("仇", arrayOf("CHOU'QIU"))
map.put("单", arrayOf("DAN'SHAN"))
map.put("单于", arrayOf("CHAN YU"))
map.put("万俟", arrayOf("MO QI"))
map.put("皇甫", arrayOf("HUANG FU"))
map.put("尉迟", arrayOf("YU CHI"))
return map
}
}
Pinyin.init(Pinyin.newConfig().with(NameDict))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment