[NLP] 말뭉치 전처리
2023. 2. 12. 20:03ㆍNatural Language Processing
우리가 사용하는 언어를 컴퓨터가 이해할 수 있는 형태로 변환하기 위한 첫걸음은
말을 단어 단위로 분해한 뒤 이를 숫자로 표현하는 것이다.
text = 'I have lived a life of shame.'
위 문장을 단어로 분해하면 I / have / lived / a / life / of / shame. 이다.
이 단어 하나하나를 말뭉치(corpus)로 만들어서 컴퓨터가 이해할 수 있도록 indexing한다.
text = text.lower()
text = text.replace('.', ' .')
words = text.split(' ')
먼저 text 전체를 소문자로 바꾸로 공백 단위로 split 한다.
word_to_id = {}
id_to_word = {}
그리고 나서 단어를 인덱스로, 거꾸로 인덱스를 단어로 매칭시켜주는 딕셔너리를 만든다.
for word in words:
if word not in word_to_id:
new_id = len(word_to_id)
word_to_id[word] = new_id
id_to_word[new_id] = word
단어를 순회하면서 처음 등장하는 단어 순서대로 딕셔너리에 추가하고 인덱스를 부여한다.
반대의 과정(id_to_word)도 동시에 진행한다.
corpus = [word_to_id[w] for w in words]
corpus = np.array(corpus)
딕셔너리에 저장된 대로 문장의 각 단어들을 인덱스로 바꾸어서 corpus로 나타낸다.
text = 'I have lived a life of shame.'
corpus, word_to_id, id_to_word = preprocess(text)
print(word_to_id)
결과:
{'i': 0, 'have': 1, 'lived': 2, 'a': 3, 'life': 4, 'of': 5, 'shame': 6, '.': 7}
print(id_to_word)
결과:
{0: 'i', 1: 'have', 2: 'lived', 3: 'a', 4: 'life', 5: 'of', 6: 'shame', 7: '.'}
print(corpus)
결과:
[0 1 2 3 4 5 6 7]
위 문장은 중복 사용된 단어가 없어서 인덱스 차례로 출력되었다.
'Natural Language Processing' 카테고리의 다른 글
[NLP] RNN(순환 신경망) (0) | 2023.02.22 |
---|---|
[NLP] word2vec 개선 - 임베딩, 네거티브 샘플링 (0) | 2023.02.19 |
[NLP] word2vec (0) | 2023.02.13 |
[NLP] ppmi과 SVD 차원축소 (0) | 2023.02.12 |
[NLP] 동시발생행렬 (0) | 2023.02.12 |