바이그램(Bigram)은 n-그램(n-gram) 모델에서 n=2인 경우를 말합니다. 즉, 텍스트 내에서 두 개의 연속된 단어 쌍을 나타냅니다. 자연어 처리에서 주로 단어의 연속성을 파악하여 단어 간 관계나 문맥을 이해하는 데 사용됩니다.

정규화를 통해 전처리된 lemmatized_words.txt 데이터를 입력파일로 사용하여 빈도수 상위 20개의 바이그램을 출력해 봅시다.

  1. 필요한 라이브러리를 임포트합니다.

    from collections import Counter
    
  2. 파일 경로를 설정합니다.

    input_file = 'lemmatized_words.txt'
    bigrams_output_file = 'bigrams.txt'
    
  3. 바이그램을 저장할 빈 리스트를 설정합니다.

    bigrams = []
    
  4. 파일을 열고 바이그램을 생성합니다.

    with open(input_file, 'r', encoding='utf-8') as infile:
      for line in infile:
        words = line.strip().split() 
        bigrams.extend([(words[i], words[i + 1]) for i in range(len(words) - 1)])
    

    각 줄을 공백을 기준으로 나누어 단어 리스트로 변환합니다. strip()은 줄 끝의 공백이나 줄 바꿈 문자를 제거하고, split()은 공백을 기준으로 단어를 나눕니다. 조건을 만족하는 값을 추출하여 새로운 리스트를 생성하기 위해 리스트 컴프리헨션을 사용하겠습니다. 연속된 두 단어를 조합하여 바이그램을 생성합니다. words[i]와 words[i + 1]은 연속된 두 단어를 의미합니다. 이들 각각을 튜플 형태로 추가합니다.

  5. 바이그램의 빈도수를 계산합니다.

    bigram_counts = Counter(bigrams)
    
  6. 결과를 파일에 저장합니다.

    with open(bigrams_output_file, 'w', encoding='utf-8') as outfile:
      for bigram, count in bigram_counts.items():
        outfile.write(f"{bigram[0]} {bigram[1]}: {count}\\n")
    

    파일 형식은 단어1 단어2: 빈도수 형태로 저장합니다.

  7. 결과의 길이를 출력하고, 빈도수 상위 20개의 바이그램을 출력합니다.

    print('바이그램 개수:', len(bigram_counts))
    print('\\n빈도수 높은 순서로 샘플 20개 바이그램:')
    for bigram, count in bigram_counts.most_common(20):
      print(f"{bigram[0]} {bigram[1]}: {count}")
    

    출력 형식은 단어1 단어2: 빈도수로 표시됩니다.

  8. 지금까지의 과정을 모두 포함하면 다음과 같이 코드가 완성됩니다.

    from collections import Counter
    
    input_file = 'lemmatized_words.txt'
    bigrams_output_file = 'bigrams.txt'
    
    bigrams = []
    
    with open(input_file, 'r', encoding='utf-8') as infile:
      for line in infile:
        words = line.strip().split() 
        bigrams.extend([(words[i], words[i + 1]) for i in range(len(words) - 1)])
      
    bigram_counts = Counter(bigrams)
    
    with open(bigrams_output_file, 'w', encoding='utf-8') as outfile:
      for bigram, count in bigram_counts.items():
        outfile.write(f"{bigram[0]} {bigram[1]}: {count}\\n")
    
    print('바이그램 개수:', len(bigram_counts))
    print('\\n빈도수 높은 순서로 샘플 20개 바이그램:')
    for bigram, count in bigram_counts.most_common(20):
      print(f"{bigram[0]} {bigram[1]}: {count}")
    
  9. 화살표 버튼을 클릭하여 셀을 실행합니다.

    다음과 같이 출력됩니다.

    image17.png

    바이그램 작업이 끝났습니다. bigrams.txt 파일이 자동 저장됩니다.

    image18.png