我有一些汉字(中文)字符及其匹配的韩文(韩文)发音。
install.packages("searchable")
require(searchable)
kotr <-
new("Searchable"
, .Data = structure(list(zh = structure(c(22L, 5L, 9L, 32L, 12L, 31L, 25L,
17L, 19L, 15L, 29L, 10L, 13L, 1L, 4L, 52L, 51L, 39L, 54L, 41L,
12L, 46L, 50L, 49L, 42L, 43L, 40L, 48L, 56L, 44L, 45L, 55L, 59L,
62L, 64L, 60L, 63L, 65L, 58L, 68L, 75L, 74L, 73L, 57L, 72L, 71L,
70L, 69L, 78L, 86L, 76L, 80L, 93L, 88L, 90L, 98L, 103L, 94L,
100L, 99L, 108L, 106L, 109L, 39L, 111L, 115L, 113L, 117L, 114L,
120L, 118L, 130L, 128L, 123L, 124L, 126L, 132L, 134L, 138L, 133L,
145L, 149L, 143L, 147L, 156L, 155L, 157L, 154L, 151L, 153L, 152L,
158L, 150L, 162L, 168L, 166L, 164L, 161L, 176L, 178L, 179L, 171L,
172L, 170L, 184L, 185L, 181L, 194L, 186L, 187L, 189L, 192L, 200L,
199L, 198L, 202L, 203L, 205L, 211L, 212L, 216L, 213L, 210L, 208L,
224L, 221L, 229L, 230L, 227L, 223L, 225L, 220L, 219L, 232L, 231L,
233L, 236L, 238L, 248L, 203L, 242L, 249L, 254L, 252L, 255L, 256L,
251L, 245L, 202L, 257L, 262L, 260L, 263L, 267L, 266L, 265L, 270L,
272L, 276L, 274L, 192L, 275L, 281L, 297L, 289L, 288L, 290L, 293L,
300L, 287L, 278L, 296L, 294L, 295L, 292L, 283L, 284L, 298L, 280L,
285L, 286L, 282L, 279L, 291L, 299L), .Label = c("八榖", "北斗",
"北極", "傳舍", "大理", "勾陳", "華蓋", "六甲", "內廚",
"內階", "女史", "三公", "三師", "尚書", "勢", "四輔",
"太陽守", "太乙(太一)", "太尊", "天棓", "天廚",
"天床", "天皇大帝", "天牢", "天理", "天槍", "天乙(天一)",
"天柱", "文昌", "五帝內座", "相", "玄戈", "陰德",
"御女[紫微]", "柱史", "紫微右垣", "紫微左垣", "常陳",
"從官", "虎賁", "九卿", "郎將", "郎位", "靈台", "明堂",
"內屏", "三台", "少微", "太微右垣", "太微左垣",
"太子[太微]", "五帝座", "五諸侯", "幸臣", "謁者",
"長垣", "帛度", "車肆", "帝座", "斗[天市]", "貫索",
"候", "斛", "宦者", "列肆", "女床", "七公", "市樓",
"天紀", "天市右垣", "天市左垣", "屠肆", "宗", "宗人",
"宗正", "衡", "角", "進賢", "庫樓", "南門", "平",
"平道", "天門", "天田[角]", "周鼎", "柱[角]", "大角",
"頓頑", "亢", "陽門", "右攝提", "折威", "左攝提",
"車騎", "氐", "帝席", "梗河", "亢池", "騎官", "騎陣將軍",
"天輻", "天乳", "招搖", "陣車", "東咸", "罰", "房",
"鍵閉", "日", "西咸", "積卒", "心", "傳說", "龜",
"天江", "尾", "魚", "杵[箕]", "箕", "糠", "鱉", "斗",
"狗", "狗國", "建", "農丈人", "天弁", "天雞", "天淵",
"天龠", "河鼓", "漸臺", "九坎", "羅堰", "輦道", "牛",
"天桴", "天田[牛]", "右旗", "織女", "左旗", "敗瓜",
"扶筐", "瓠瓜", "離珠", "女", "十二國", "天津", "奚仲",
"敗臼", "哭", "璃瑜", "泣", "司非", "司祿", "司命",
"司危", "天壘城", "虛", "車府", "杵[危]", "蓋屋",
"臼", "人", "天鉤", "天錢", "危", "虛梁", "造父",
"八魁", "北落師門", "鈇鉞", "雷電", "壘壁陣", "室",
"螣蛇", "天綱", "土公吏", "羽林軍", "壁", "鈇鑕",
"霹靂", "天廄", "土公", "雲雨", "策", "附路", "閣道",
"軍南門", "奎", "天溷", "土司空", "外屏", "王良",
"婁", "天倉", "天大將軍", "天庾", "右更", "左更",
"大陵", "積尸", "積水", "天船", "天廩", "天囷", "胃",
"芻蒿", "卷舌", "礪石", "昴", "天阿", "天讒", "天陰",
"天苑", "月", "畢", "參旗", "九斿", "九州殊口", "天高",
"天關", "天潢", "天街", "天節", "天園", "威池", "五車",
"諸王", "柱[畢]", "司怪", "觜", "座旗", "參", "廁",
"軍井", "屏", "屎", "玉井", "北河", "弧矢", "積薪",
"井", "軍市", "老人", "南河", "闕丘", "水府", "水位",
"四瀆", "孫", "天狼", "天樽", "野雞", "丈人", "子",
"爟", "鬼", "天狗", "天記", "天社", "外廚", "酒旗",
"柳", "內平", "天稷", "天相", "星", "軒轅", "天廟",
"張", "東甌", "翼", "軍門", "器府", "青丘", "軫",
"波斯", "飛魚", "附白", "海山", "海石", "鶴", "火鳥",
"夾白", "金魚", "孔雀", "馬腹", "馬尾", "蜜蜂", "南船",
"鳥喙", "三角形", "蛇腹", "蛇首", "蛇尾", "十字架",
"水委", "小斗", "異雀"), class = "factor"), ko = c("cheonsang",
"daelii", "naeju", "hyeongwa", "samgong", "sang", "cheonlii",
"taeyangsu", "taejon", "se", "munchang", "naegye", "samsa", "pal (gǔ)",
"jeonsa", "ojejwa", "taejataemi", "jonggwan", "haengsin", "gugyeong",
"samgong", "nae (píng)", "taemijwawon", "taemiuwon", "nangjang",
"nangwi", "hobun", "somi", "jangwon", "lyeongyeongtae", "myeongdang",
"alja", "jejwa", "hu", "hwanja", "ducheonsi", "gog", "lyeolyeolsa",
"geochasa", "sinulu", "jongjeong", "jongin", "jong", "baegdotag",
"dosa", "cheonsijwawon", "cheonsiuwon", "cheongi", "jinhyeon",
"jugag", "hyeong", "nammun", "jwaseobje", "donwan", "yangmun",
"hangji", "choyo", "geochagi", "gijinjanggun", "gigwan", "geonpye",
"beol", "il", "jonggwan", "jeogjol", "cheongang", "jeonseolseyeol",
"eo", "gugwigyun", "gang", "jeogi", "cheonyag", "cheongye", "gu",
"gugug", "nongjangin", "jeomdae", "nalaeon", "cheonjeonu", "gugam",
"liiju", "haejung", "bugwang", "sibigug", "samyeong", "sanoglog",
"sawi", "sabi", "gog", "eub", "liyu", "cheonnuluseong", "paegu",
"gaeog", "heolyangyang", "cheonjeon", "in", "jeowi", "deungsa",
"togonglii", "ulimimgun", "baebugnaglagsamun", "buwol", "palgoe",
"togong", "unu", "bujil", "wanglyangyang", "chaeg", "bunolo",
"gunnammun", "tosagong", "jwagaenggyeong", "ugaenggyeong", "cheonyu",
"jeogsi", "jeogsu", "cheonleum", "myo", "cheona", "wol", "cheoncham",
"lyeoyeoseog", "chuho", "cheonga", "cheongo", "jewang", "jupil",
"wiji", "cheonhwang", "cheonjeol", "gujusugu", "guyu", "ja",
"sagoe", "jwagi", "gunjeong", "si", "subu", "jeogsu", "jeogsin",
"suwi", "yagye", "cheonnanglang", "jangin", "ja", "son", "noloin",
"jeogsi", "gwan", "oeju", "cheongi", "jugi", "cheonsang", "cheonjig",
"naepyeong", "cheonmyo", "donggu", "(qīng)gu", "gunmun", "tosagong",
"gibu", "haesan", "sibjaga", "mami", "mabog", "milbong", "samgaghyeong",
"liijag", "gongjag", "pasa", "sami", "sabog", "sasu", "johwe",
"hag", "hwajo", "suwi", "bubaeg", "hyeobbaeg", "geumgimeo", "haeseog",
"bieo", "namseon", "sodu")), .Names = c("zh", "ko"), row.names = c(NA,
185L))
, type = "std"
, options = list())
我希望将此列表中的韩语术语与以下列表中的术语相匹配,以便后者中的空字段可以自动更新。
data <-
structure(list(sno = list("ko001", "ko013", "ko016", "ko036",
"ko040", "ko041", "ko050", "ko053", "ko217", "ko218"), ko = c("JuJeong",
"ChoYo", "HangJii", "Eo", "Kii", "WaeJeo", "Byeol", "JaamDae",
"SamGong", "SamGong"), en = c("Holy Kettle", "Flutting Flag",
"Oar for visitor", "Fish", "Winnow", "Outer Pestle", "Snapping Turtle",
"River adjoining Tower", "Three Ministers", "Three Ministers"
), zh = c("", "", "", "", "", "", "", "", "三官", "三官"),
connect = list(c("2", "65721", "64792", "64792", "64852"),
c("1", "71075", "71075"), c("6", "69612", "70327", "70327",
"70400", "70400", "69389", "69389", "68707", "68707",
"68498", "68498", "69612"), c("1", "87569", "87569"),
c("3", "88635", "89931", "89931", "90185", "90185", "89642"
), c("2", "90830", "90414", "90414", "90568"), c("13",
"92953", "92308", "92308", "91494", "91494", "90982",
"90982", "90887", "90887", "91875", "91875", "92989",
"92989", "93174", "93174", "93825", "93825", "94114",
"94114", "94160", "94160", "94005", "94005", "93542",
"93542", "92953"), c("3", "93194", "92420", "92420",
"92791", "92791", "94481"), c("3", "66234", "64906",
"64906", "65550", "65550", "66234"), c("3", "52353",
"51448", "51448", "50933", "50933", "52353"))), .Names = c("sno",
"ko", "en", "zh", "connect"), row.names = c(1L, 13L, 16L, 36L,
40L, 41L, 50L, 53L, 217L, 218L), class = "data.frame")
这是我尝试过的,但下面的代码似乎都没有用。
lapply(kotr$ko, function(x) grep(x, data$ko))
lapply(data$ko, function(x) grep(x, kotr$ko))
mapply(agrep, kotr$ko, data$ko)
kotr$ko %in% data$ko
data$ko %in% kotr$ko
然而,很明显有比赛。
grep("samgong", data$ko, ignore.case = T)
[1] 9 10
> grep("samgong", kotr$ko, ignore.case = T)
[1] 5 21
我哪里出错了,我应该怎么做呢?
匹配数据
@akrun:
我设法用这个来对数据进行分组:
z <- lapply(data$ko, function(x) grep(paste0("^", x, "$"), kotr@.Data$ko, ignore.case = TRUE))
z <- melt(z)
> kotr$zh[z$value]
[1] 招搖 魚 三公 三公 三公 三公
300 Levels: 八榖 北斗 北極 傳舍 大理 勾陳 ... 異雀
> data$zh[z$L1]
[1] "" "" "三官" "三官" "三官" "三官"
但是将kotr
的值分配给data
给出了一个奇怪的结果:
> data$zh[z$L1] <- kotr$zh[z$value]
> data$zh
[1] "" "103" "" "117" "" "" ""
[8] "" "12" "12"
答案 0 :(得分:1)
根据?Searchable
签名'搜索'的方法
str(kotr)
#Formal class 'Searchable' [package "searchable"] with 3 slots
# ..@ .Data :List of 2
# .. ..$ zh: Factor w/ 300 levels "八榖","北斗",..: 22 5 9 32 12 31 25 17 19 15 ...
# .. ..$ ko: chr [1:185] "cheonsang" "daelii" "naeju" "hyeongwa" ...
# .. ..- attr(*, "row.names")= int [1:185] 1 2 3 4 5 6 7 8 9 10 ...
# ..@ type : chr "std"
# ..@ options: list()
所以我们需要使用@
lapply(data$ko, function(x) grep(x, kotr@.Data$ko, ignore.case = TRUE))