2020. 5. 10. 00:55ㆍnlp
세종구어코퍼스를 csv 파일로 변환한 후, https://codlingual.tistory.com/100
각 발화내용에서 내가 궁금했던 종결어미랑 선어말어미만 뽑아낸다.
저번에 넷플릭스 vs 네이버 시놉시스 비교에서 한 일이랑 비슷해서 코드를 재활용했다. https://codlingual.tistory.com/23?category=732088
그땐 각 시놉시스에 사용된 품사 빈도를 dataframe으로 만들었고
이젠 각 발화에 사용된 종결어미/선어말어미의 빈도를 dataframe으로 만들 예정
샘플로 첫 번째 행의 발화만 분석해봤다.
's' 태그 기준으로 한 문장이니 's'의 개수(=문장 개수)를 세고, 그 문장 개수 만큼 for 문을 돌린다.
한 문장에서 EF가 발견되면 (pattern이 [+한글/EF+] 에 해당하는 정규표현식) ef_list에 추가한다.
import re
from collections import Counter
# 한 사람의 발화에서 종결어미(EF) 모두 찾아내고 개수 세기
num = len(BeautifulSoup(df.iloc[0,5]).find_all('s'))
pattern = '\+[가-힣]*?\/EF\+'
ef_list = []
for i in range(num):
string = str(BeautifulSoup(df.iloc[0,5]).find_all('s')[i])
match = re.search(pattern, string)
if match:
ef_list.append(match.group().replace('+', ''))
else:
continue
이 ef_list를 Counter에 넣고 요리조리...해서 예쁘게 dataframe으로 만들어주려면
# 한 사람의 발화에 사용된 모든 종결어미와 그 빈도
pd.DataFrame.from_dict(dict(Counter(ef_list)), orient='index').transpose()
이렇게 만들어진다. 생각보다 종결어미 종류가 엄청 많다. 분석이 잘못된 것도 있겠지만
이제 이 작업을 함수로 만들어서 모든 행에 적용해주기~~
def ef_df_gen(speech):
num = len(BeautifulSoup(speech).find_all('s'))
pattern = '\+[가-힣]*?\/EF\+'
ef_list = []
for i in range(num):
string = str(BeautifulSoup(speech).find_all('s')[i])
match = re.search(pattern, string)
if match:
ef_list.append(match.group().replace('+', ''))
else:
continue
return pd.DataFrame.from_dict(dict(Counter(ef_list)), orient='index').transpose()
apply를 쓰고 싶었는데 이렇게나 많은 칼럼이 나오는 걸 apply로 쓸 수 있는지 모르겠어서 걍 원시적인 for문을 돌린다..엄청 오래 걸린다.
# 전체 코퍼스에 종결어미 빈도 함수 적용하기
ef_df = pd.DataFrame()
for i in range(len(df['speech'])):
ef = ef_df_gen(df.speech[i])
ef_df = pd.concat([ef_df, ef], axis=0, ignore_index=True)
ef_df = ef_df.fillna(0)
어떤 발화엔 쓰였지만 또 다른 발화에선 쓰이지 않은 종결어미는 0으로 채워넣기
같은 방식으로 선어말어미(EP)도 해주면 된다
선어말어미, 종결어미 데이터와 기존의 발화자에 대한 정보(성별, 직업 등)를 합쳐준다.
# 기존 csv 파일과 종결어미, 선어말 어미 데이터 합치기
spoken_full = pd.concat([df,ef_df, ep_df], axis=1)
'nlp' 카테고리의 다른 글
'-거든'과 맨스플레인 (성별에 따른 정보구조 사용의 변이) (0) | 2020.06.24 |
---|---|
FNN, CNN, RNN 구조 비교 (0) | 2020.05.22 |
세종 구어 말뭉치(tei 포맷) csv로 변환하기 (0) | 2020.05.10 |
넷플릭스/네이버 시놉시스 word2vec 시각화하기 (0) | 2020.02.22 |
BERT Word Embeddings 튜토리얼 번역 및 정리 (3) | 2020.02.14 |