이렇게 생긴 세종코퍼스 txt 파일로부터 코퍼스의 어절 수를 추출해 내는 기능을 만들어 보려다가 헤맸었다.
약간의 혼란 끝에 드디어 어떻게든 성공했다.
생각해 보니까 그냥 txt 파일의 맨 밑 줄부터 탐색해서 여는꺾쇠('<')로 시작하지 않는 줄을 만나면 그 줄의 어절 번호를 추출해 내면 되는 거였다.
최종 코드는 이렇게 만들어졌다.
잘하는 분들이 보기엔 엉망이겠지만 일단 돌아가니까 만족이다.
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
|
import re
import sys
sys.stdout = open('stdout.txt', 'w')
def counter(x):
f = open(x, "r", encoding="utf-16-le")
data = f.readlines()
for i in range(len(data)-1, -1, -1):
if data[i][0] == '<':
continue
else:
last_line = i
break
number_of_lines = re.findall("-\d+", data[last_line])
# print(number_of_lines)
# ['-00065929']
number_of_lines = number_of_lines[0]
# '-00065929'
number_of_lines = number_of_lines[4:len(number_of_lines)]
# '65929'
number_of_lines = int(number_of_lines)
# print(number_of_lines)
# 65929
return number_of_lines
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 = 0
for i in range(len(filenames)):
print('this file is: 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 = counter(goodname)
print(result)
a = result
sum = sum + a
print('Total # of EOJEOLs:' + str(sum))
sys.stdout.close()
|
cs |
결과물 파일 stdout.txt는 이런 모습이다.
몇 개를 열어서 확인해 봤는데 잘 된 거 같다.
결론적으로 지금 내가 갖고 있는 세종말뭉치 현대문어 형태분석 코퍼스의 어절 수는 총 9,966,708개이다.
나중에 '곧이곧대로'와 다른 단어들 간의 연어값을 계산할 때 이 전체 어절 개수의 값이 필요할 것이다.
- print() 함수의 결과를 txt 파일로 출력하는 법: https://codetorial.net/tips_and_examples/save_print_output.html
'언어학' 카테고리의 다른 글
세종코퍼스 연어(collocation) 분석하기 - '곧이곧대로' (0) | 2022.07.30 |
---|---|
세종코퍼스에서 특정 단어를 포함하는 문장 추출하기 - 연어 분석 (4) (0) | 2022.07.30 |
사용 기반 언어학 (Usage-Based Linguistics) (0) | 2022.06.28 |
수화는 만국공통어일까요? (1) - '엄마', '아빠' (0) | 2022.06.20 |
의미를 비교하기 - 의미 지도와 개념 공간 (0) | 2022.06.20 |