작성
·
465
0
안녕하세요 선생님. 먼저 좋은 강의 감사드립니다.
함수 관련 질문이 있어 드리게 되었습니다.
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
def LemNormalize(text):
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
여기에서 .translate(remove_punct_dict) 부분이 잘 이해가 되지 않아 질문을 드립니다!
이 부분이 stop_words를 제거하는 코드라는 것은 이해했으나, 어떻게 작동하는지 궁금하여 질문을 드립니다.
감사합니다.
답변 1
1
안녕하십니까,
먼저 text.lower().translate(remove_punct_dict) 을 보시면 text 스트링 문자를 lower()로 소문자 스트링 문자를 만든 후에 translate()를 호출합니다.
파이썬 String의 translate()함수는 특정 문자를 다른 문자로 변환할 수 있는데, 인자로 Dictionary 값을 받을 수 있습니다. 인자로 들어오는 Dictionary값은 어떤 문자를 어떻게 변환해야 할지를 지정해 줍니다.
text.lower().translate(remove_punct_dict)) 의 인자로 들어온 remove_punct_dict의 값을 주피터 노트북의 다른셀에서 확인해 보시면, 아래와 같을 겁니다. 예를 들어 33: None은 아스키값 33에 해당하는 문자를 None, 즉 제거하라는 의미 입니다. 이런식으로 translate() 가 동작해서 stop words를 삭제한 문자가 다시 tokenize()의 인자로 입력되게 됩니다.
{33: None,
34: None,
35: None,
36: None,
37: None,
38: None,
39: None,
40: None,
41: None,
42: None,
43: None,
44: None,
45: None,
46: None,
47: None,
58: None,
59: None,
60: None,
61: None,
62: None,
63: None,
64: None,
91: None,
92: None,
93: None,
94: None,
95: None,
96: None,
123: None,
124: None,
125: None,
126: None}
감사합니다.
감사합니다! 선생님