세종 구어 말뭉치(tei 포맷) csv로 변환하기
2020. 5. 10. 00:44ㆍnlp
반응형
세종 구어 말뭉치를 이용해서 성별에 따른 종결어미 사용을 비교해보려 한다.
처음보는 tei 파일이라 당황했지만 파이썬의 BeautifulSoup으로 쉽게 처리할 수 있다. html이랑 똑같은 듯
우선 감을 잡기 위해 파일 한 개만 잡고 분석해보면
from bs4 import BeautifulSoup
tei_doc = '5CT_0013.txt'
with open(tei_doc, 'r', encoding='utf-8') as tei:
soup = BeautifulSoup(tei, 'lxml')
이제 soup 뒤에 태그만 붙여주면 원하는 정보를 얻을 수 있다.
# 해당 파일의 제목
soup.title.get_text()
# 첫번째 사람이 말한 내용
soup.find_all('u', who="P1")
# 모든 대화 참가자
soup.find_all('person')
# 대화 상황
soup.find('settingdesc').get_text()
# 직업만 뽑아내기
str(soup.find_all('person')[0]).split('>')[1].split('<')[0]
다른 건 get_text() 하면 다 잘 되는데 직업만 잘 안 됐다. 그래서 태그 구분 표시 기준으로 잘라내는 방법으로 텍스트만 추출했다.
이제 모든 tei 파일을 csv 파일로 변환하기
원하는 정보(원본 파일 이름, 발화자, 성별, 직업, 대화 상황, 발화 내용)들만 칼럼으로 만들어서 수집
def tei2csv(tei_doc):
# 원본 파일 이름, 발화자, 성별, 직업, 대화상황, 발화 내용
df = pd.DataFrame(columns=['filename', 'speaker', 'gender', 'job','setting','speech'])
with open(tei_doc, 'r', encoding='utf-8') as tei:
soup = BeautifulSoup(tei, 'lxml')
# 발화자 몇 명인지
count = len(soup.find_all('person'))
# 발화자 명수만큼 반복
for i in range(count):
filename = tei_doc
setting = soup.find('settingdesc').get_text()
speaker = "P"+str(i+1)
if 'sex="F"' in str(soup.find_all('person')[i]):
gender = 'F'
else:
gender = 'M'
job = str(soup.find_all('person')[i]).split('>')[1].split('<')[0]
speech = soup.find_all('u', who=speaker)
df.loc[count] = [filename, speaker, gender, job,setting, speech]
count +=1
return df
현재 디렉토리에 있는 모든 tie 포맷 파일들을 이 함수에 인풋으로 넣어주면 된다.
# 현재 디렉토리에 있는 모든 tei 파일을 dataframe으로
from os import listdir
df = pd.DataFrame()
for filename in listdir('.'):
if filename.endswith('.txt'):
df = pd.concat([df, tei2csv(filename)])
맨날 어떻게 하는지 까먹는 dataframe을 csv로 저장하기
df.to_csv('spoken.csv', index=False, encoding='utf-8')
반응형
'nlp' 카테고리의 다른 글
FNN, CNN, RNN 구조 비교 (0) | 2020.05.22 |
---|---|
세종구어코퍼스에서 종결어미/선어말어미만 추출하기 (0) | 2020.05.10 |
넷플릭스/네이버 시놉시스 word2vec 시각화하기 (0) | 2020.02.22 |
BERT Word Embeddings 튜토리얼 번역 및 정리 (3) | 2020.02.14 |
BERT 파헤치기 Part 1-2 번역 및 정리 (0) | 2020.02.11 |