형태소 분석 결과가 포함된 tagged_words.txt 파일에서 명사, 동사, 형용사를 추출하고, 각 품사에 해당하는 단어들을 별도의 텍스트 파일에 저장해 봅시다.

  1. 명사, 동사, 형용사를 저장할 출력 파일의 경로를 각각 설정합니다.

    tagged_input_file = 'tagged_words.txt'
    nouns_output_file = 'nouns.txt'
    verbs_output_file = 'verbs.txt'
    adjectives_output_file = 'adjectives.txt'
    
  2. 결과 저장을 위한 빈 리스트 설정합니다.

    nouns = []
    verbs = []
    adjectives = []
    
  3. 태깅된 단어 파일을 읽고, 명사, 동사, 형용사를 판별합니다.

    with open(tagged_input_file, 'r', encoding='utf-8') as infile:
      for line in infile:
        word_list = line.strip().split()
        
        for word_tag in word_list:
          if '/' in word_tag:
            word, tag = word_tag.rsplit('/', 1)
            
            if 'NOUN' in tag:
              nouns.append(word)
            elif 'VERB' in tag:
              verbs.append(word)
            elif 'ADJF' in tag or 'ADJS' in tag:
              adjectives.append(word)
    

    단어와 태그를 분리하기 위해 word_tag를 /를 기준으로 나누어, 단어(word)와 품사 태그(tag)를 추출합니다. 여기서 1은 마지막 /를 기준으로 나눈다는 의미입니다. 품사 판별에서, 형용사 태그는 ADJF와 ADJS 두 가지가 있으므로, 품사 태그가 ADJF 또는 ADJS인 경우, 형용사로 판별하여 adjectives 리스트에 추가합니다.

  4. 결과를 텍스트 파일로 저장하겠습니다.

    with open(nouns_output_file, 'w', encoding='utf-8') as nouns_file:
      for noun in nouns:
        nouns_file.write(noun + '\\n')
    
    with open(verbs_output_file, 'w', encoding='utf-8') as verbs_file:
      for verb in verbs:
        verbs_file.write(verb + '\\n')
    
    with open(adjectives_output_file, 'w', encoding='utf-8') as adjectives_file:
      for adjective in adjectives:
        adjectives_file.write(adjective + '\\n')
    
  5. 명사, 동사, 형용사의 개수를 출력하여, 해당 품사의 단어 수를 출력합니다.

    print('명사 개수:', len(nouns))
    print('동사 개수:', len(verbs))
    print('형용사 개수:', len(adjectives))
    
  6. 지금까지의 과정을 모두 포함하면 다음과 같이 코드가 완성됩니다.

    tagged_input_file = 'tagged_words.txt'
    nouns_output_file = 'nouns.txt'
    verbs_output_file = 'verbs.txt'
    adjectives_output_file = 'adjectives.txt'
    
    nouns = []
    verbs = []
    adjectives = []
    
    with open(tagged_input_file, 'r', encoding='utf-8') as infile:
      for line in infile:
        word_list = line.strip().split()
        
        for word_tag in word_list:
          if '/' in word_tag:
            word, tag = word_tag.rsplit('/', 1)
            
            if 'NOUN' in tag:
              nouns.append(word)
            elif 'VERB' in tag:
              verbs.append(word)
            elif 'ADJF' in tag or 'ADJS' in tag:
              adjectives.append(word)
    
    with open(nouns_output_file, 'w', encoding='utf-8') as nouns_file:
      for noun in nouns:
        nouns_file.write(noun + '\\n')
    
    with open(verbs_output_file, 'w', encoding='utf-8') as verbs_file:
      for verb in verbs:
        verbs_file.write(verb + '\\n')
    
    with open(adjectives_output_file, 'w', encoding='utf-8') as adjectives_file:
      for adjective in adjectives:
        adjectives_file.write(adjective + '\\n')
    
    print('명사 개수:', len(nouns))
    print('동사 개수:', len(verbs))
    print('형용사 개수:', len(adjectives))
    
    
  7. 화살표 버튼을 클릭하여 셀을 실행합니다.

    다음과 같이 출력됩니다.

    image02.png

    품사 추출 작업이 끝났습니다. 각 품사에 해당하는 adjectives.txt, nouns.txt, verbs.txt 파일이 자동 저장됩니다.

    image03.png