그리고 특수 문자 ''가 2개가 동시에 있는 문자열 '__'을 공백으로 치환합니다. 그럼 한 개 짜리 ''만 남습니다.
Natural language processing is one of biggest streams in artificial intelligence▁, and it becomes very popular after seq2seq▁'s invention▁.
마지막 남은 특수 문자 '_'를 제거합니다. 그럼 문장 복원이 완성됩니다.
Natural language processing is one of biggest streams in artificial intelligence, and it becomes very popular after seq2seq's invention.
분절 후처리
앞의 예제에서처럼 분절에 대한 복원을 수월하게 하기 위해, 분절 이후에는 특수 문자를 분절 과정에서 새롭게 생긴 공백 다음에 삽입해야 합니다. 다음은 기존의 공백과 전처리 단계에서 생성된 공백을 서로 구분하기 위한 특수 문자 '_'을 삽입하는 파이썬 스크립트 예제입니다.
import sysSTR ='▁'if__name__=="__main__": ref_fn = sys.argv[1] f =open(ref_fn, 'r')for ref in f: ref_tokens = ref.strip().split(' ') input_line = sys.stdin.readline().strip()if input_line !="": tokens = input_line.split(' ') idx =0 buf = []# We assume that stdin has more tokens than reference input.for ref_token in ref_tokens: tmp_buf = []while idx <len(tokens):if tokens[idx].strip()=='': idx +=1continue tmp_buf += [tokens[idx]] idx +=1if''.join(tmp_buf)== ref_token:breakiflen(tmp_buf)>0: buf += [STR + tmp_buf[0].strip()] + tmp_buf[1:] sys.stdout.write(' '.join(buf) +'\n')else: sys.stdout.write('\n') f.close()
이 스크립트의 사용 방법은 다음과 같습니다. 주로 다른 분절 모듈의 수행 후에 파이프pipe를 사용하여 붙여서 사용합니다.