'곧이곧대로'를 포함하는 문장을 세종코퍼스 txt 파일에서 추출하는 코드를 짜 보았다.
1편에서 구상했던 두 가지 기능 중 두 번째이다. 코드는 밑에 첨부한다.
코딩이 제대로 된 거라면,
내가 가진 9,966,708어절의 코퍼스 안에서
'곧이곧대로'는 오로지 31번밖에 출현하지 않는다.
'곧이 곧대로'를 포함하지 않은 결과이긴 하다.
포함해서 세는 게 맞겠지만, 그래 봤자일지도
결과물은 이런 모습이다.
9백만 어절 중에 31례밖에 없으니 당연한 거겠지만
'곧이곧대로'가 아예 없는 txt 파일이 '곧이곧대로'를 하나라도 포함하는 파일보다 훨씬 많았다.
그 와중에 재미있게도,
'곧이곧대로'가 2번 나타나는 파일이 2개 있었고,
무려 3번이나 나타나는 파일도 한 개 있었다.
작가나 장르나 내용 배경의 영향이 있지 않을까 싶다.
맨 처음 연어에 대한 발상이 떠오르고서 대충 검색해 봤을 때 잘 나오지 않아서
'곧이곧대로'가 약간 저빈도 어휘인가 보다, 생각은 했지만
'9백만 분의 30' 정도로 극저빈도일 줄은 몰랐다.
31개 정도면 굳이 코딩을 더 하거나
'한마루'나 'Antconc' 같은 공기 분석 프로그램을 사용할 필요가 없어 보인다.
그리고 기껏 붙어 있는 형태소 태그를 활용할 필요도 없다.
그냥 하나하나의 사례를 직접 눈으로 확인하면 되기 때문이다.
그래서 사실 대략의 결과는 이미 나왔는데, 그건 다른 글로 적어 두겠다.
(근데 막상 직접 해 보니 은근 많긴 많다. 리스트 말고 딕셔너리 같은 형태로 저장할 걸 그랬다.)
정확한 연어값 계산은 해 봐야겠지만,
워낙에 빈도 자체가 작으니 약간만 관계가 있어도 너무 큰 수치가 나오지 않을까 하는 생각이 든다.
이번 코딩은 그다지 헤매지 않고 처음에 구상했던 대로 진행했다.
저번 걸 조금 수정해서 쓰니까 어렵지 않았다.
함수에 파일명을 넣으면
그 파일을 한 줄 한 줄 탐색하다가
'곧이곧대로'가 나오면
위로 가서 <p>를 찾고
아래로 가서 </p>를 찾은 다음에
<p>부터 </p>까지의 한 문장을 추출해서 저장하는 것이다.
그게 전부인데, 아마 코드는 엉망이겠지만 당장 잘 돌아가는 건 같다.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
import re
import sys
sys.stdout = open('targets.txt', 'w', encoding='utf-8')
def collector(x):
f = open(x, "r", encoding="utf-16-le")
data = f.readlines()
result = []
for i in range(len(data)):
a = re.findall("곧이곧대로", data[i])
if a != []:
for j in range(i, -1, -1):
if data[j][0] != '<':
continue
else:
starting_point = j
break
for k in range(i, len(data), 1):
if data[k][0] != '<':
continue
else:
ending_point = k
break
for l in range(starting_point, ending_point+1, 1):
result.append(data[l][0:len(data[l])-1]) # 개행문자 제거
return result
filenames = open("list.txt", "r", encoding='utf-8')
filenames = filenames.readlines()
# ['BTAA0001.txt\n', 'BTAA0002.txt\n', 'BTAA0003.txt\n',
# 'BTAA0004.txt\n', ... , 'BTJO0447.txt']
sum = []
for i in range(len(filenames)):
sum.append('FILE #' + str(i+1))
name_with_extra_n = filenames[i]
if i == len(filenames) - 1:
goodname = name_with_extra_n
else:
goodname = name_with_extra_n[0:len(name_with_extra_n)-1]
result = collector(goodname)
if result == []:
sum.append('****** NO RESULT ******')
else:
for j in range(len(result)):
sum.append(result[j])
for i in range(len(sum)):
print(sum[i])
sys.stdout.close()
# 31 in total
|
cs |
결과물 'targets.txt'는 위에 첨부한 사진과 같은 모습이다.
1편 - https://blog.naver.com/ks1127zzang/222824981687
2편 - https://blog.naver.com/ks1127zzang/222826100700
3편 - https://blog.naver.com/ks1127zzang/222826423187
오늘 참고한 글
visual studio에서 함수명/변수명 한번에 바꾸기 - https://itisguide.tistory.com/23
'언어학' 카테고리의 다른 글
'낙뢰'와 표준 발음법과 국어 교육에 관한 단상 (0) | 2022.08.06 |
---|---|
세종코퍼스 연어(collocation) 분석하기 - '곧이곧대로' (0) | 2022.07.30 |
세종코퍼스 txt 파일에서 어절 수 찾아내기 (0) | 2022.07.24 |
사용 기반 언어학 (Usage-Based Linguistics) (0) | 2022.06.28 |
수화는 만국공통어일까요? (1) - '엄마', '아빠' (0) | 2022.06.20 |