Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

남의 언어학 공부

영어와 한국어 음운이웃 네트워크의 정량적 분석 본문

Corpus Phonology

영어와 한국어 음운이웃 네트워크의 정량적 분석

(admin) 2018. 3. 9. 15:21

This posting is for Korean readers of Studies in Phonetics, Phonology and Morphology. It introduces the method that utilizes R to conduct a quantitative analysis of the Korean phonological neighbourhood network.

 

이 포스팅은 "남성현.김선회. 2018. 영어와 한국어 음운이웃 네트워크의 정량적 분석. 음성음운형태론연구 24(1)." 에서 사용된 R코드를 설명하는 페이지입니다. 즉, 한국어 음운이웃 네트워크(PNN)를 정량적으로 분석하기 위해 R을 사용하는 방법으로서, 세 부분으로 구성되어 있습니다.

 

 

1. 한글 단어형태를 입력받아 자모분리하여 Klattese 형태의 단어 목록으로 출력해주는 R스크립트

2. Klattese 형태의 단어 목록을 입력받아 음운이웃 쌍 목록을 출력해주는 R스크립트

3. 음운이웃 쌍 목록으로부터 Pajek에서 사용되는 Edgelist format을 출력해주는 R스크립트

 

 

1. 한글 단어형태를 입력받아 자모분리하여 Klattese 형태의 단어 목록으로 출력해주는 R스크립트

 

이 R스크립트에는 csv파일 형식으로 된 한글 철자형 단어목록을 넣어주시면 됩니다. 

 

처리과정에서, 사용자가 해주셔야 할 것은 4가지입니다.

 

1단계, 섹션1 아래부분에 첨부해놓은 압축파일을 한 폴더에 넣어주시고 그 폴더를 기억해주세요.

2단계, 아래에 제시된 R코드 (섹션 1 아래부분에 "전처리.r"로 첨부함)를 실행해주세요.

3단계, R코드를 실행하고 가장 먼저 나오는 대화상자에서, 1단계에서 저장한 폴더를 선택해주세요.

4단계, 그 다음으로 나오는 대화상자에서, Klattese 형태의 단어목록으로 변경하고자 하는 한글 철자형 단어목록 csv 파일을 선택해주세요.

 

조금 기다리시면 Klattese 단어목록이 csv파일로 출력됩니다. 저장할 위치를 대화상자에서 선택해주세요.

 

 

실제 연구에서 우리가 사용한 원자료(raw data)는 "강범모, 김흥규. (2009). 한국어 사용빈도. 한국문화사"의 고빈도 3만단어입니다. 그러나 해당 원자료는 저작권법과 사용계약에 따라 임의로 배포할 수 없기에 공개할 수 없습니다.

 

 

library(KoNLP)

setwd(choose.dir()) # criteria 폴더 선택

original_data<-read.csv(file = file.choose(),header=TRUE) #자모분리의 대상이 될 csv 파일 불러오기 

input_data<-as.character(original_data$entry)

criteria_DoubleCoda<-read.table("double_coda.csv",sep = ",",header=TRUE)

Klattese<-read.table("klattese.csv",sep = ",",header=TRUE)

jamo<-vector()

AllNum<-length(input_data)

#겹받침 처리(ㄺ->ㄹㄱ)

# 그리고 초성 음가 없는 'ㅇ' 제거, 마지막으로 linearization하는 과정

for (i in 1:AllNum) {

  letter<-convertHangulStringToJamos(input_data[i]) #자음과 모음으로 분리하여 letter라는 vector에 넣음 (예: "고구마"라는 단어가 입력되면 ->"ㄱㅗ" "ㄱㅜ" "ㅁㅏ")

  for (j in 1:length(letter)) {

    DC<-match(substr(letter[j],3,3),criteria_DoubleCoda$double)

    if (is.na(DC)==FALSE){substr(letter[j],3,4)<-as.character(criteria_DoubleCoda$separated[DC])} #겹받침을 둘로 나눔 (eg. "ㄳ" -> "ㄱㅅ")

    if (substr(letter[j],1,1) == "ㅇ") {letter[j]<-substr(letter[j],2,4)} #음가가 없는 onset 위치 'ㅇ'을 제거

  }

  

  jamo[i]<-paste(letter, collapse="") #글자경계 없애고linearizaion 하는부분

}

# 최종 결과물을 Klattese로 변환

klat<-vector()

for (k in 1:AllNum) {

  phoneme<-unlist(strsplit(jamo[k],split=""))

  for (l in 1:length(phoneme)){

    if(is.na(match(phoneme[l],Klattese$C))==TRUE){phoneme[l]<-as.character(Klattese$VKlattese[match(phoneme[l],Klattese$V)])

      

    }

    else{phoneme[l]<-as.character(Klattese$CKlattese[match(phoneme[l],Klattese$C)])}

    }

  klat[k]<-paste(phoneme,collapse="")

}



entry<-input_data

final_table<-data.frame(entry,jamo,klat)

write.csv(final_table,file=file.choose())

 

criteria.zip
다운로드

 

전처리.r
다운로드

 

 

 

2. Klattese 형태의 단어 목록을 입력받아 음운이웃 쌍 목록을 출력해주는 R스크립트

 

아래의 R 코드를 실행하시면 음운이웃 네트워크를 생성할 수 있습니다.

 

이 프로그램은 Klattese 형태의 단어 목록을 입력받아 음운이웃쌍으로 된 목록을 출력합니다. 

 

이 부분에서 사용자가 해줘야 하는 부분은, 스크립트를 실행한 다음 나오는 대화상자에서, Klattese 형태의 단어 목록 csv 파일을 선택해주시는 것입니다. 만약 1번의 R코드를 실행하셨다면 그 결과로 새로 만들어진 csv 파일을 그대로 읽어오시면 됩니다.

 

스크립트를 다 실행했을 때 출력되는 vector인 'result'가 이 음운이웃쌍 목록입니다. R의 igraph 패키지를 이용하거나, 혹은 Pajek 등의 외부프로그램을 통해 graph theoretic measurements를 측정하는 데 사용될 수 있는 것입니다. NMG의 결과를 Pajek에서 읽어들일 수 있는 'Edgelist' format으로 바꾸는 스크립트는 섹션 3과 같습니다. (NMG.r 뒤에 곧장 이어서 실행하시면 됩니다)

 

 

if(!require(doParallel)) {install.packages("doParallel"); library(doParallel)}

cl <- makeCluster(detectCores())

registerDoParallel(cl)

data <- read.csv(file=file.choose(), header=T) # 단어 list (entry, klat, freq 등등 모두)를 불러옵니다

x <- as.character(data$klat) 

result <- foreach (i=1:length(x), .combine='rbind') %dopar% {

output <- vector()

 for (j in i:length(x)) {

 if((nchar(x[i])-2) < nchar(x[j]) & nchar(x[i])+2 > nchar(x[j])) {if(adist(x[i],x[j])==1) output <- rbind(output,c(i,j))}

 }

 output

}
 
 

모든 스크립트가 실행되는 데에는 수 분에서 수십 분의 시간이 걸리며 그 시간동안 R콘솔은 '응답없음' 상태에 있을 수 있습니다.

 

아래 첨부파일을 클릭하시면 동일한 R 스크립트를 다운로드 받으실 수 있습니다.

 

NMG.r
다운로드

 

 

 

 

 

3. 음운이웃 쌍 목록으로부터 Pajek에서 사용되는 Edgelist format을 출력해주는 R스크립트

 

pajek <- paste("*Vertices", length(x), sep=" ")

for (i in 1:length(x)){

 pajek <- c(pajek, paste(i, data$klat[i], sep=" "))

}

result<-paste(result[,1],result[,2],sep=" ")

pajek <- c(pajek, "*Edges", result)

write (pajek, file=file.choose())

to_pajek.r
다운로드

 

 

Comments