본문 바로가기
  • 머킹이의 머신로그
프로젝트/개인 프로젝트

[자연어 개인 프로젝트] 제주도 사투리에 어울리는 형태소 찾기

by 머킹 2023. 9. 22.
728x90

제주도 사투리에 어울리는 형태소 비교

안녕하세요 머킹입니다.

오늘은 드디어 코드가 다 돌아가서! 

한국어 형태소 중에서 제주도 사투리를 가장 잘 토큰화 한 형태소를 비교 분석해 보겠습니다!


Kakao Khaiii, KoNLPy의 다양한 형태소 분석기, 그리고 파파고 번역 API를 비교해 보면 어떨까?라는 생각으로

저는 형태소 분석기들을 비교해보고 싶었는데요.

 

대신 이런 에러가 있었습니다.

- kakao나 파파고는 개인 애플리케이션 정보가 있어야 해서 어려울 것 같음 (나중에 비교 분석해보기)
- 대신 KoNLPy안에 4가지 형태소 분석기를 비교해 보기로 함


그래서 4개의 형태소 분석기를 비교해 보겠습니다.

맨 밑에 결과가 있고 위에는 제 코드들의 시행착오입니다.

결과만 말하자면 Okt가 가장 적합했습니다.


1차 코드

# 샘플 100개의 데이터로 Kkma, OKT, Hannanum, Komoran 을 비교하자
import json

from konlpy.tag import Kkma, Okt, Hannanum, Komoran

import os

  

# 형태소 분석기 초기화

kkma = Kkma()

okt = Okt()

hannanum = Hannanum()

komoran = Komoran()

  

# 데이터 디렉토리 경로

base_directory = '/content/drive/MyDrive/jeju/'

  

# Training 및 Validation 디렉토리

data_directories = ['Training', 'Validation']

  

# 형태소 분석 결과 저장 딕셔너리

results = {}

  

for data_dir in data_directories:

    data_directory = os.path.join(base_directory, data_dir)

    data_files = [file for file in os.listdir(data_directory) if file.endswith('.json')]

    results[data_dir] = {}

    for data_file in data_files:

        with open(os.path.join(data_directory, data_file), 'r', encoding='utf-8') as file:

            data = json.load(file)

            for idx, utterance in enumerate(data['utterance'][:100]):  # 처음 100개의 데이터만 사용

                text = utterance['dialect_form']

                # 형태소 분석 수행

                kkma_result = kkma.morphs(text)

                okt_result = okt.morphs(text)

                hannanum_result = hannanum.morphs(text)

                komoran_result = komoran.morphs(text)

                results[data_dir][f'Utterance_{idx + 1}'] = {

                    'Kkma': kkma_result,

                    'Okt': okt_result,

                    'Hannanum': hannanum_result,

                    'Komoran': komoran_result

                }

  

# 결과 출력

for data_dir, data_results in results.items():

    print(f"{data_dir} 데이터 형태소 분석 결과:")

    for utterance, morpheme_data in data_results.items():

        print(f"\n{utterance}:")

        for morpheme, result in morpheme_data.items():

            print(f"{morpheme} 형태소 분석 결과: {result}")

이 코드의 결과는 너무 느렸습니다...

멈출 줄 모르는 저의 코드에 이건 아니다 싶었고

코드를 수정하기로 마음먹었습니다!


2차 코드

import json
from konlpy.tag import Kkma, Okt, Hannanum, Komoran
import os
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm  # tqdm 라이브러리 추가

# 형태소 분석기 초기화
kkma = Kkma()
okt = Okt()
hannanum = Hannanum()
komoran = Komoran()

# 데이터 디렉토리 경로
base_directory = '/content/drive/MyDrive/jeju/'

# Training 및 Validation 디렉토리
data_directories = ['Training', 'Validation']

# 형태소 분석 결과 저장 딕셔너리
results = {}

def analyze_text(text):
    kkma_result = kkma.morphs(text)
    okt_result = okt.morphs(text)
    hannanum_result = hannanum.morphs(text)
    komoran_result = komoran.morphs(text)
    
    return {
        'Kkma': kkma_result,
        'Okt': okt_result,
        'Hannanum': hannanum_result,
        'Komoran': komoran_result
    }

for data_dir in data_directories:
    data_directory = os.path.join(base_directory, data_dir)
    data_files = [file for file in os.listdir(data_directory) if file.endswith('.json')]
    
    results[data_dir] = {}
    
    with ThreadPoolExecutor() as executor:
        for data_file in tqdm(data_files, desc=f"{data_dir} 데이터 처리중"):  # tqdm으로 진행률 표시
            with open(os.path.join(data_directory, data_file), 'r', encoding='utf-8') as file:
                data = json.load(file)
                futures = []
                for idx, utterance in enumerate(data['utterance'][:100]):  # 처음 100개의 데이터만 사용
                    text = utterance['dialect_form']
                    futures.append(executor.submit(analyze_text, text))

                for idx, future in enumerate(tqdm(futures, desc=f"Utterance 처리중")):  # tqdm으로 진행률 표시
                    result = future.result()
                    results[data_dir][f'Utterance_{idx + 1}'] = result

# 결과 출력
for data_dir, data_results in results.items():
    print(f"{data_dir} 데이터 형태소 분석 결과:")
    for utterance, morpheme_data in data_results.items():
        print(f"\n{utterance}:")
        for morpheme, result in morpheme_data.items():
            print(f"{morpheme} 형태소 분석 결과: {result}")

2차 코드에서는 병렬준비와 코드 최적화 실행 + tqdm 실행했습니다.

그런데 계속 결과에 7600개의 데이터를 전처리하고 있었습니다..

그래서 또 수정했습니다ㅎㅎ


3차 코드

import json
from konlpy.tag import Kkma, Okt, Hannanum, Komoran
import os
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm  # tqdm 라이브러리 추가

# 형태소 분석기 초기화
kkma = Kkma()
okt = Okt()
hannanum = Hannanum()
komoran = Komoran()

# 데이터 디렉토리 경로
base_directory = '/content/drive/MyDrive/jeju/'

# Training 및 Validation 디렉토리
data_directories = ['Training', 'Validation']

# 형태소 분석 결과 저장 딕셔너리
results = {}

def analyze_text(text):
    kkma_result = kkma.morphs(text)
    okt_result = okt.morphs(text)
    hannanum_result = hannanum.morphs(text)
    komoran_result = komoran.morphs(text)
    
    return {
        'Kkma': kkma_result,
        'Okt': okt_result,
        'Hannanum': hannanum_result,
        'Komoran': komoran_result
    }

for data_dir in data_directories:
    data_directory = os.path.join(base_directory, data_dir)
    data_files = [file for file in os.listdir(data_directory) if file.endswith('.json')]
    
    results[data_dir] = {}
    
    with ThreadPoolExecutor() as executor:
        for data_file in tqdm(data_files, desc=f"{data_dir} 데이터 처리중"):  # tqdm으로 진행률 표시
            with open(os.path.join(data_directory, data_file), 'r', encoding='utf-8') as file:
                data = json.load(file)
                futures = []
                for idx, utterance in enumerate(data['utterance'][:100]):  # 처음 100개의 데이터만 사용
                    text = utterance['dialect_form']
                    futures.append(executor.submit(analyze_text, text))

                for idx, future in enumerate(tqdm(futures, desc=f"Utterance 처리중")):  # tqdm으로 진행률 표시
                    result = future.result()
                    results[data_dir][f'Utterance_{idx + 1}'] = result

# 결과 출력
for data_dir, data_results in results.items():
    print(f"{data_dir} 데이터 형태소 분석 결과:")
    for utterance, morpheme_data in data_results.items():
        print(f"\n{utterance}:")
        for morpheme, result in morpheme_data.items():
            print(f"{morpheme} 형태소 분석 결과: {result}")

이것도 돌리자마자 또 10만 개의 데이터를 전처리 하고 있었습니다.

training 데이터 처리 부분에서 모든 데이터 파일에 대해 처리하고 있었던 게 문제였습니다.

또또 수정합니다.


4차 코드

import json

from konlpy.tag import Kkma, Okt, Hannanum, Komoran

import os

from concurrent.futures import ThreadPoolExecutor

from tqdm import tqdm  # tqdm 라이브러리 추가

  

# 형태소 분석기 초기화

kkma = Kkma()

okt = Okt()

hannanum = Hannanum()

komoran = Komoran()

  

# 데이터 디렉토리 경로

base_directory = '/content/drive/MyDrive/jeju/'

  

# Training 및 Validation 디렉토리

data_directories = ['Training', 'Validation']

  

# 형태소 분석 결과 저장 딕셔너리

results = {}

  

def analyze_text(text):

    kkma_result = kkma.morphs(text)

    okt_result = okt.morphs(text)

    hannanum_result = hannanum.morphs(text)

    komoran_result = komoran.morphs(text)

    return {

        'Kkma': kkma_result,

        'Okt': okt_result,

        'Hannanum': hannanum_result,

        'Komoran': komoran_result

    }

  

total_data = []  # 모든 데이터를 저장할 리스트

  

# 모든 데이터 수집

for data_dir in data_directories:

    data_directory = os.path.join(base_directory, data_dir)

    data_files = [file for file in os.listdir(data_directory) if file.endswith('.json')]

    for data_file in data_files:

        with open(os.path.join(data_directory, data_file), 'r', encoding='utf-8') as file:

            data = json.load(file)

            total_data.extend(data['utterance'][:100])  # 처음 100개의 데이터를 모두 저장

  

results['Total'] = {}

  

# 형태소 분석

with ThreadPoolExecutor() as executor:

    for idx, utterance in enumerate(tqdm(total_data, desc="전체 데이터 처리중")):

        text = utterance['dialect_form']

        result = executor.submit(analyze_text, text).result()

        results['Total'][f'Utterance_{idx + 1}'] = result

  

# 결과 출력

for data_dir, data_results in results.items():

    print(f"{data_dir} 데이터 형태소 분석 결과:")

    for utterance, morpheme_data in data_results.items():

        print(f"\n{utterance}:")

        for morpheme, result in morpheme_data.items():

            print(f"{morpheme} 형태소 분석 결과: {result}")

ㅎㅎ 아직도 아직도 5079개의 데이터를 처리하고 있네요..

진짜 찐찐찐찐 막 코드를 수정합니다.

 


5차 마지막 코드

import json
from konlpy.tag import Kkma, Okt, Hannanum, Komoran
import os
from tqdm import tqdm  # tqdm 라이브러리 추가

# 형태소 분석기 초기화
kkma = Kkma()
okt = Okt()
hannanum = Hannanum()
komoran = Komoran()

# 데이터 디렉토리 경로
base_directory = '/content/drive/MyDrive/jeju/'

# 원하는 데이터 폴더 선택 (예: 'Training' 또는 'Validation')
data_directory = os.path.join(base_directory, 'Training')

# 형태소 분석 결과 저장 딕셔너리
results = {}

def analyze_text(text):
    kkma_result = kkma.morphs(text)
    okt_result = okt.morphs(text)
    hannanum_result = hannanum.morphs(text)
    komoran_result = komoran.morphs(text)
    
    return {
        'Kkma': kkma_result,
        'Okt': okt_result,
        'Hannanum': hannanum_result,
        'Komoran': komoran_result
    }

# 선택한 데이터 폴더 내의 JSON 파일 목록 가져오기
data_files = [file for file in os.listdir(data_directory) if file.endswith('.json')]

# 최대 100개의 JSON 파일만 선택
data_files = data_files[:100]

# 형태소 분석 결과 저장
results['Selected'] = {}

for data_file in tqdm(data_files, desc="데이터 처리중"):
    with open(os.path.join(data_directory, data_file), 'r', encoding='utf-8') as file:
        data = json.load(file)
        for idx, utterance in enumerate(data['utterance']):  # 모든 데이터 사용
            text = utterance['dialect_form']
            result = analyze_text(text)
            results['Selected'][f'Utterance_{idx + 1}'] = result

# 결과 출력
for data_dir, data_results in results.items():
    print(f"{data_dir} 데이터 형태소 분석 결과:")
    for utterance, morpheme_data in data_results.items():
        print(f"\n{utterance}:")
        for morpheme, result in morpheme_data.items():
            print(f"{morpheme} 형태소 분석 결과: {result}")

드디어 결과가 나왔습니다!

100개의 샘플 데이터로만 했는데도 어마어마한 시간이 소요됐습니다..

Utterance_55: Kkma 형태소 분석 결과: ['여기', '선수', '로', '참가', '하', 'ㄴ', '짬', '이', '니까', '이렇', '게', '사회', '봐주', 'ㄹ', '사람', '이', '없', '잖아'] Okt 형태소 분석 결과: ['여기', '선수', '로', '참가', '한', '짬', '이니까', '이렇게', '사회', '봐줄', '사람', '이', '없잖아'] Hannanum 형태소 분석 결과: ['여기', '서', 'ㄴ', '수', '로', '참가', '하', 'ㄴ', '짬', '이', '니까', '이렇', '게', '사회', '보', '아', '주', 'ㄹ', '사람', '이', '없', '잖아'] Komoran 형태소 분석 결과: ['여기', '선수', '로', '참가', '하', 'ㄴ', '짬', '이', '니까', '이렇', '게', '사회', '보아주', 'ㄹ', '사람', '이', '없', '잖아'] Utterance_56: Kkma 형태소 분석 결과: ['그래서', '하', 'ㄹ', '수', '있', '는', '게임', '되게', '한정적', '이', '었', '단', '말', '야'] Okt 형태소 분석 결과: ['그래서', '할수있는', '게임', '되게', '한정', '적', '이었단', '말', '야'] Hannanum 형태소 분석 결과: ['그래서', '하', 'ㄹ', '수', '있', '는', '게임', '되', '게', '한정적', '이', '었단', '말', '야'] Komoran 형태소 분석 결과: ['그래서', '하', 'ㄹ', '수', '있', '는', '게임', '되', '게', '한정', '적', '이', '었', '단', '말', '야'] Utterance_57: Kkma 형태소 분석 결과: ['내가', '사회', '하', 'ㄹ', '것', '이', '나', '아', '게임', '참여', '보다', '는', '진행', '을', '더', '좋아하', '어', '가지', '구'] Okt 형태소 분석 결과: ['내', '가', '사회', '할게', '나', '게임', '참여', '보다는', '진행', '을', '더', '좋아해가지구'] Hannanum 형태소 분석 결과: ['나', '가', '사회할게', '나', '게임', '참여', '보다는', '진행', '을', '더', '좋아해가지구'] Komoran 형태소 분석 결과: ['내', '가', '사회', '하', 'ㄹ게', '나', '게임', '참여', '보다', '는', '진행', '을', '더', '좋아하', '아', '가지', '구'] Utterance_58: Kkma 형태소 분석 결과: ['그래서', '우리', '여섯', '명이', '각자', '한', '명당', '게임', '을', '하', 'ㄴ', '개', '씩'] Okt 형태소 분석 결과: ['그래서', '우리', '여섯', '명', '이', '각자', '한', '명당', '게임', '을', '한', '개', '씩'] Hannanum 형태소 분석 결과: ['그래서', '우리', '여섯', '명', '이', '각자', '하', 'ㄴ', '명당', '게임', '을', '하', 'ㄴ', '개', '씩'] Komoran 형태소 분석 결과: ['그래서', '우리', '여섯', '명', '이', '각자', '한', '명당', '게임', '을', '한', '개', '씩'] Utterance_59: Kkma 형태소 분석 결과: ['준비', '하', '어', '오', '는', '거지'] Okt 형태소 분석 결과: ['준비', '해', '오는', '거지'] Hannanum 형태소 분석 결과: ['준비해', '오', '는', '거지'] Komoran 형태소 분석 결과: ['준비', '하', '아', '오', '는', '거지'] Utterance_60: Kkma 형태소 분석 결과: ['너', '&', 'name', '1', '&', '너', '가'] Okt 형태소 분석 결과: ['너', '&', 'name', '1', '&', '너', '가'] Hannanum 형태소 분석 결과: ['너', '&name1&', '너', '가'] Komoran 형태소 분석 결과: ['너', '&', 'name', '1', '&', '너', '가'] Utterance_61: Kkma 형태소 분석 결과: ['아니'] Okt 형태소 분석 결과: ['아니'] Hannanum 형태소 분석 결과: ['아니'] Komoran 형태소 분석 결과: ['아니'] Utterance_62: Kkma 형태소 분석 결과: ['그', '건', '닿', 'ㄴ', '톡', '에', '서', '상의', '를', '하', '어야지', '이제'] Okt 형태소 분석 결과: ['그건', '단', '톡', '에서', '상의', '를', '해야지', '이제'] Hannanum 형태소 분석 결과: ['그것', '은', '단톡', '에서', '상의', '를', '하', '어야지', '이제'] Komoran 형태소 분석 결과: ['그것', 'ㄴ', '단', '톡', '에서', '상의', '를', '하', '아야지', '이제'] Utterance_63: Kkma 형태소 분석 결과: ['오케이'] Okt 형태소 분석 결과: ['오케이'] Hannanum 형태소 분석 결과: ['오케이'] Komoran 형태소 분석 결과: ['오케이'] Utterance_64: Kkma 형태소 분석 결과: ['그래서', '막', '그것', '을', '하', '어서'] Okt 형태소 분석 결과: ['그래서', '막', '그걸', '해서'] Hannanum 형태소 분석 결과: ['그래서', '막', '그걸', '하', '어서'] Komoran 형태소 분석 결과: ['그래서', '막', '그것', '하', '아서'] Utterance_65: Kkma 형태소 분석 결과: ['술', '먹', '으면서', '하', 'ㄹ', '수', '도', '있', '고', '뭐', '그냥'] Okt 형태소 분석 결과: ['술', '먹으면서', '할', '수도', '있고', '뭐', '그냥'] Hannanum 형태소 분석 결과: ['술', '먹', '으면서', '하', 'ㄹ', '수', '도', '있', '고', '뭐', '그냥'] Komoran 형태소 분석 결과: ['술', '먹', '으면서', '하', 'ㄹ', '수', '도', '있', '고', '뭐', '그냥'] Utterance_66: Kkma 형태소 분석 결과: ['그래서', '내', '생각', '에', '술', '먹', '으면', '하', 'ㄹ', '것', '같애'] Okt 형태소 분석 결과: ['그래서', '내', '생각', '에', '술', '먹으면', '할', '것', '같', '애'] Hannanum 형태소 분석 결과: ['그래서', '내', '생각', '에', '술', '먹', '으면', '하', 'ㄹ', '것', '같애'] Komoran 형태소 분석 결과: ['그래서', '내', '생각', '에', '술', '먹', '으면', '하', 'ㄹ', '것', '같애'] Utterance_67: Kkma 형태소 분석 결과: ['그냥', '매', 'ㄴ', '정식', '에', '그렇', '게', '하', '면', '벌칙', '하', 'ㄹ', '것', '도', '없', '고', '하', '니까'] Okt 형태소 분석 결과: ['그냥', '맨', '정식', '에', '그렇게', '하면', '벌칙', '할', '것', '도', '없고', '하니까'] Hannanum 형태소 분석 결과: ['그냥', '맨정식', '에', '그렇', '게', '하', '면', '벌칙', '하', 'ㄹ', '것', '도', '없', '고', '하', '니까'] Komoran 형태소 분석 결과: ['그냥', '맨', '정식', '에', '그렇', '게', '하', '면', '벌칙', '하', 'ㄹ', '것', '도', '없', '고', '하', '니까'] Utterance_68: Kkma 형태소 분석 결과: ['그래서', '만약', '에', '예', '를', '들어서'] Okt 형태소 분석 결과: ['그래서', '만약', '에', '예', '를', '들어서'] Hannanum 형태소 분석 결과: ['그래서', '만약', '에', '예', '를', '들', '어서'] Komoran 형태소 분석 결과: ['그래서', '만약', '에', '예', '를', '들', '어서'] Utterance_69: Kkma 형태소 분석 결과: ['신서', '유기', '게임', '을', '하', 'ㄴ다', '치', '면', '다', '개이', 'ㄴ', '전인', '걸', '로', '하', '고'] Okt 형태소 분석 결과: ['신', '서유기', '게임', '을', '한다', '치면', '다', '개인', '전인', '걸', '로', '하고'] Hannanum 형태소 분석 결과: ['신서유', '이', '기', '게임', '을', '하', 'ㄴ다', '치', '면', '다', '개', '이', 'ㄴ', '전', '이', 'ㄴ', '걸', '로', '하', '고'] Komoran 형태소 분석 결과: ['신서유기', '게임', '을', '하', 'ㄴ다', '치', '면', '다', '개인', '전인', '것', '로', '하', '고'] Utterance_70: Kkma 형태소 분석 결과: ['내가', '하구', '.', '하', '어서', '맞추', '는', '것', '으로', '하', '고', '상도', '있', '고', '뭐', '약간', '이런', '식', '으로'] Okt 형태소 분석 결과: ['내', '가', '하구', '.', '해서', '맞추는', '걸', '로', '하고', '상도', '있고', '뭐', '약간', '이런', '식', '으로'] Hannanum 형태소 분석 결과: ['나', '가', '하구', '.', '하', '어서', '맞추', '는', '걸', '로', '하', '고', '상', '도', '있', '고', '뭐', '약간', '이런', '식', '으로'] Komoran 형태소 분석 결과: ['내', '가', '하', '구', '.', '하', '아서', '맞추', '는', '것', '로', '하', '고', '상도', '있', '고', '뭐', '약간', '이런', '식', '으로'] Utterance_71: Kkma 형태소 분석 결과: ['벌칙', '도', '정하', '자'] Okt 형태소 분석 결과: ['벌칙', '도', '정', '하자'] Hannanum 형태소 분석 결과: ['벌칙', '도', '정하', '자'] Komoran 형태소 분석 결과: ['벌칙', '도', '정하', '자'] Utterance_72: Kkma 형태소 분석 결과: ['나', '아', '나', '술', '먹', '을', '때', '하', '면', '당연히', '뭐', '그렇', '게', '술', '한잔', '먹', '기', '뭐', '이런', '거', '이', '겠', '지만'] Okt 형태소 분석 결과: ['나', '나', '술', '먹을', '때', '하면', '당연히', '뭐', '그렇게', '술', '한잔', '먹기', '뭐', '이런거겠지만'] Hannanum 형태소 분석 결과: ['나', '나', '술', '먹', '을', '때', '하', '면', '당연히', '뭐', '그렇', '게', '술', '한잔', '먹', '기', '뭐', '이런거', '이', '겠지만'] Komoran 형태소 분석 결과: ['나', '나', '술', '먹', '을', '때', '하', '면', '당연히', '뭐', '그렇', '게', '술', '한잔', '먹', '기', '뭐', '이런', '거', '하', '겠', '지만'] Utterance_73: Kkma 형태소 분석 결과: ['술', '안', '먹', '으면서', '하면', '은', '인디언', '밥', '그런', '거', '말', '고', '생각', '이', '안', '나', '거든'] Okt 형태소 분석 결과: ['술', '안', '먹으면서', '하면은', '인디언', '밥', '그런', '거', '말고', '생각', '이', '안', '나거든'] Hannanum 형태소 분석 결과: ['술', '안', '먹', '으면서', '하', '면', '은', '인디언', '밥', '그러', 'ㄴ', '것', '말', '고', '생각', '이', '알', 'ㄴ', '나', '이', '거든'] Komoran 형태소 분석 결과: ['술', '안', '먹', '으면서', '하', '면', '은', '인디언', '밥', '그런', '거', '말', '고', '생각', '이', '안', '나', '거든'] Utterance_74: Kkma 형태소 분석 결과: ['입수'] Okt 형태소 분석 결과: ['입수'] Hannanum 형태소 분석 결과: ['입수'] Komoran 형태소 분석 결과: ['입수'] Utterance_75: Kkma 형태소 분석 결과: ['입수'] Okt 형태소 분석 결과: ['입수'] Hannanum 형태소 분석 결과: ['입수'] Komoran 형태소 분석 결과: ['입수'] Utterance_76: Kkma 형태소 분석 결과: ['입수'] Okt 형태소 분석 결과: ['입수'] Hannanum 형태소 분석 결과: ['입수'] Komoran 형태소 분석 결과: ['입수'] Utterance_77: Kkma 형태소 분석 결과: ['욕조', '인', '?', '우리', '욕조', '인', '?'] Okt 형태소 분석 결과: ['욕조', '인', '?', '우리', '욕조', '인', '?'] Hannanum 형태소 분석 결과: ['욕조', '일', 'ㄴ', '?', '우리', '욕조', '일', 'ㄴ', '?'] Komoran 형태소 분석 결과: ['욕조', '인', '?', '우리', '욕조', '인', '?'] Utterance_78: Kkma 형태소 분석 결과: ['아', '아', '그러면', '은'] Okt 형태소 분석 결과: ['아', '그러면은'] Hannanum 형태소 분석 결과: ['아', '그러면', '은'] Komoran 형태소 분석 결과: ['아', '그러면', '은'] Utterance_79: Kkma 형태소 분석 결과: ['그럼', '화장', '화장실', '에서', '그', '찬물', '로', '싸', '아', '대기', '맞', '자'] Okt 형태소 분석 결과: ['그럼', '화장', '화장실', '에서', '그', '찬물', '로', '싸대기', '맞자'] Hannanum 형태소 분석 결과: ['그렇', 'ㅁ', '화장', '화장실', '에서', '그', '찬물', '로', '쓰', '어', '대', '기', '맞', '자'] Komoran 형태소 분석 결과: ['그럼', '화장', '화장실', '에서', '그', '찬물', '로', '싸대', '기', '맞', '자'] Utterance_80: Kkma 형태소 분석 결과: ['물', '싸', '아', '대기', '?'] Okt 형태소 분석 결과: ['물', '싸대기', '?'] Hannanum 형태소 분석 결과: ['물싸대', '이', '기', '?'] Komoran 형태소 분석 결과: ['물', '싸대', '기', '?']

이건 데이터를 csv 파일로 받아서 비교 분석해보았는데요.

Okt가 가장 성능이 좋게 토큰화를 시키고 있었습니다.

제주도 사투리 중에서 먼, 난, 이런 받침이 꽤 많은데 이 부분을 특히 잘 잡아내는 것 같습니다.

 

이렇게 저에게 맞는 형태소 분석기를 골랐고

이제는 진짜 모델을 짜볼 시간이 왔습니다..

 

참고로 저는 환경설정에서 실패를 맛보고 colab에서 돌렸는데요

이 모델을 다 돌려보면 colab 말고 로컬에서도 돌려보고 싶습니다.

 

그리고 가끔 colab 시간 때문에 데이터 불러오다가 끝나는 경우가 있는데

이 부분은 google drive에 데이터를 넣어두면 해결되는 것 같습니다. (데이터가 크면 이것도 불가능합니다)

 

아무튼 길고 긴 형태소 비교였습니다.

감사합니다