안경잡이개발자

728x90
반응형

  다이얼로그 플로우는 다양한 Intent를 JSON 형식의 파일에서 불러오는 기능을 제공합니다. 따라서 JSON 파일의 형식이 잘못되었거나, 다이얼로그 플로우에서 설정하고 있는 기본적인 형식을 지키지 못하면 오류 메시지가 출력됩니다.



  일단 위와 같이 장문의 오류가 발생하면 당황하지 말고 개발자 도구를 열어서 오류 메시지를 정확히 복사합니다.




  오류 메시지가 위와 같이 굉장히 많이 나왔네요.



  이를 위와 같이 텍스트 파일에 옮겨줍시다. 이제 오류가 발생하는 해당 파일들을 일일이 삭제할 수 있습니다.



  혹은 텍스트 파일에 담은 뒤에 파일 이름만 파이썬으로 추출할 수 있습니다. 다음과 같이 말이죠.



import os 


FIND_DIR="./error messages.txt"


def find_all(string,substring):

    length = len(substring)

    c=0

    indexes = []

    while c < len(string):

        if string[c:c+length] == substring:

            indexes.append(c)

        c=c+1

    return indexes


f = open(FIND_DIR, "r")

s = f.read()

all_errors = find_all(s, "intents/")

for i in range(0, len(all_errors)):

  index = all_errors[i]

  # get only 12 characters

  print(s[index+8:index + 20])

f.close()


위 스크립트를 실행하면 정확히 오류가 발생하는 파일의 이름 앞 부분을 구할 수 있습니다.



  이제 이러한 파일들을 삭제해야 하는데요. 만약 삭제해야 할 파일의 개수가 많다면, 다음과 같이 파이썬 스크립트를 이용해서 일괄 삭제할 수도 있습니다. 저는 다음과 같이 삭제하고자 하는 파일을 배열에 하나씩 담아서 하나씩 순회하면서 삭제되도록 만들었습니다.


import os 


DIR="./Dialog Flow Example Project/intents/"


# deleting some intents that have an error sententce.

targets=[

'145127b6428c',

'14015d374076',

'1401cc8a40b3',

'1451bc4266be',

'1451b39a0148',

'105137cdd164',

'1401fec0f8e8',

'1051e6b4632a',

'145138afb780',

'1451bc4266be',

'1451e8f0d5cb',

'1051b5472e66',

'1001bb2b5200',

'1451153fae0e',

'1451bc0aa2a9',

'1001956e5832',

'105112bdd48a',

'1451bcdef726',

'1451ef55eba6',

'1051b3439dd6',

'1051bb288765',

'1001d0245578',

'14011ae6df96',

'1101cab5bc06',

'145103636150',

'140141837fb0',

'1401c7dde1b5',

'140192c0fdf1',

'1451400f135b'

]


for ROOT, DIRS, FILES in os.walk(DIR): 

  for F in FILES: 

    filename = "{}/{}".format(ROOT, F) 


    for i in range(0, len(targets)):

      if targets[i] in filename: 

        print("Deleting file \"{}\"".format(filename)) 

        os.remove(filename) 



  다만 위와 같이 하면 수동으로 파일명을 입력해야 하므로, 오류 메시지로부터 자동으로 파일 이름을 읽어서 오류가 발생하는 파일만 삭제하도록 스크립트를 합칠 수 있습니다.


import os 


FIND_DIR="./error messages.txt"

ERROR_DIR="./Dialog Flow Example Project/intents/"


def find_all(string,substring):

    length = len(substring)

    c=0

    indexes = []

    while c < len(string):

        if string[c:c+length] == substring:

            indexes.append(c)

        c=c+1

    return indexes


f = open(FIND_DIR, "r")

s = f.read()

all_errors = find_all(s, "intents/")


for ROOT, DIRS, FILES in os.walk(ERROR_DIR): 

  for F in FILES: 

    filename = "{}/{}".format(ROOT, F) 


    for i in range(0, len(all_errors)):

      index = all_errors[i]

      if s[index+8:index + 20] in filename: 

        print("Deleting file \"{}\"".format(filename)) 

        os.remove(filename)



  결과적으로 특정 인텐트의 JSON 파일에 오류가 나오는 경우 오류 메시지를 error message.txt에 기록만 해주고, 이 스크립트를 실행하면 알아서 오류 메시지에 적힌 오류 인텐트 파일들을 찾아서 그 파일들만 intents 폴더에서 지워주게 됩니다.



  결과적으로 위와 같이 더이상 문법과 관련한 오류는 나오지 않는 것을 알 수 있습니다.

728x90
반응형