바이그램(Bigram)은 주어진 문장에서 연속된 두 단어를 하나의 쌍으로 묶어 만드는 것을 말합니다. 파이썬에서는 이러한 기법이 텍스트 분석(Text Analytics) 분야에서 매우 폭넓게 활용됩니다. 예를 들어 검색 엔진, 자연어 처리(NLP), 문서 유사도 계산 등에서 바이그램은 단어 간의 연관성을 파악하는 중요한 단위가 됩니다.
이번 글에서는 파이썬으로 바이그램을 생성하는 두 가지 대표적인 방법을 소개합니다.
1. enumerate()와 split() 활용하기
첫 번째 방법은 split()으로 문장을 개별 단어로 나눈 뒤, enumerate() 함수를 이용해 인덱스를 붙여가며 연속된 단어들의 쌍을 만드는 방식입니다.
예제 코드
list = ['Stop. look left right. go']
print ("The given list is : \n" + str(list))
# enumerate()와 split()으로 바이그램 생성
output = [(k, m.split()[n + 1]) for m in list for n, k in enumerate(m.split()) if n < len(m.split()) - 1]
print ("Bigram formation from given list is: \n" + str(output))실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
The given list is :
['Stop. look left right. go']
Bigram formation from given list is:
[('Stop.', 'look'), ('look', 'left'), ('left', 'right.'), ('right.', 'go')]2. zip()과 split() 활용하기
두 번째 방법은 zip()과 split() 함수를 함께 사용하는 것입니다. split()으로 문장에서 추출한 단어 시퀀스를 zip() 함수에 전달하면, 앞뒤 단어들이 순서대로 짝지어져 바이그램이 완성됩니다. 이 방식은 슬라이싱([:-1]과 [1:])을 활용하기 때문에 코드가 더 간결하다는 장점이 있습니다.
예제 코드
list = ['Stop. look left right. go']
print ("The given list is : \n" + str(list))
# zip()과 split()으로 바이그램 생성
output = [m for n in list for m in zip(n.split(" ")[:-1], n.split(" ")[1:])]
print ("Bigram formation from given list is: \n" + str(output))실행 결과
위 코드를 실행하면 첫 번째 방법과 동일한 결과를 얻을 수 있습니다.
The given list is :
['Stop. look left right. go']
Bigram formation from given list is:
[('Stop.', 'look'), ('look', 'left'), ('left', 'right.'), ('right.', 'go')]마무리
지금까지 파이썬에서 바이그램을 생성하는 두 가지 방법을 살펴보았습니다. enumerate()를 사용하는 방식은 인덱스를 직접 제어할 수 있어 유연하고, zip()을 사용하는 방식은 슬라이싱 덕분에 코드가 간결하고 가독성이 좋습니다. 상황에 맞게 적절한 방법을 선택하여 텍스트 분석 작업에 활용해 보시기 바랍니다.