프로그래밍공부/파이썬

코퍼스중복제거툴

중랑구보안관 2020. 6. 30. 11:40

NLU업무에서 원어민들이 문장들 만들어주다보면 중복되는 문장이 상당히 많아진다.

그래서 이걸 제거해줘야 여러모로 편한데 이걸 또 손으로 일일이 할 순 없으니.. 역시 파이썬으로 간단하게 스크립트를 짰다.

이거 이전에 JAVA Swing으로 만든 버전도 있는데 여기 보안상 파일을 올릴 수가 없다 ㅜㅜ(이와 같은 이유로 덩치가 조금 큰 툴들은 다 버리게 생겼다 ㅠㅠ)

 

쩄든 map이 중복허용이 안되는 점을 이용하여 만들었다.

import sys
import re

def main(argv):
    input_file_name = argv[1]
    corpus_map = {}
    data_list= []
    outData_list = []
    with open(input_file_name+".txt","r", encoding='UTF8') as file:
        for line in file.readlines():
            #주석, 공백은 패스
            if line.find('#') == 0 or line.find('\t') == -1:
                data_list.append(line)
                continue
            lines = line.split('\t')
            sentence=lines[5].replace("  "," ").lower().strip()
            sentence=re.sub('(\?|\,|\.|\-|\_)','',sentence)
            
            if sentence in corpus_map:
                outData_list.append(line)
            else:
                data_list.append(line)
                corpus_map[sentence] = line
            
    with open(input_file_name+"_after.txt","w",encoding='UTF8') as file:
        for data in data_list:
            file.write(data)
    with open("outsentence.txt","w",encoding='UTF8') as file:
        for data in outData_list:
            file.write(data)

if __name__ == '__main__':
    main(sys.argv)

참고로 여기서 사용하는 코퍼스는 아래와 같이 생겼다

20181228	1	m2	Request	m2_common_start	start the <Washer:m2_device_washer>	NONE	NONE
20181228	1	m2	Request	m2_common_start	start running the <Washer:m2_device_washer> right now	NONE	NONE
20181228	1	m2	Request	m2_common_start	start running the <Washer:m2_device_washer>	NONE	NONE
20181228	1	m2	Request	m2_common_start	start running <Washer:m2_device_washer>	NONE	NONE