🖥️ IT, 컴퓨터/🐍 Python
[Mecab] 일본어 형태소 분석하기 :: Mecab
김 홍시
2024. 4. 3. 12:32
반응형
Mecab으로 일반 텍스트 일본어 형태소 분석하기
! pip install mecab-python3
! pip install unidic
!python -m unidic download
import MeCab
import unidic
tagger = MeCab.Tagger() # "tagger = MeCab.Tagger('-d ' + unidic.DICDIR)"
sample_txt = 'くるまでまつ'
result = tagger.parse(sample_txt)
print (result)
sample_txt에 원하는 문장을 입력하면
くる 動詞,非自立可能,,,カ行変格,連体形-一般,クル,来る,くる,クル,くる,クル,和,"","","","","","",用,クル,クル,クル,クル,"1","C1","",2891174448865985,10518
まで 助詞,副助詞,,,,,マデ,まで,まで,マデ,まで,マデ,和,"","","","","","",副助,マデ,マデ,マデ,マデ,"","名詞%F2@1,形容詞%F2@1,動詞%F2@1","",9865651581755904,35891
まつ 動詞,一般,,,五段-タ行,連体形-一般,マツ,待つ,まつ,マツ,まつ,マツ,和,"","","","","","",用,マツ,マツ,マツ,マツ,"1","C1","",9848884029432513,35830
EOS
이러한 결과가 나온다.
만약 데이터프레임 자체를 넣어서 돌리고 싶다면 아래의 코드 사용
Mecab으로 데이터 프레임 텍스트 일본어 형태소 분석하기
import pandas as pd
df = pd.read_csv('exit.csv', encoding = 'utf-8')
import MeCab
import unidic
# MeCab Tagger 초기화
tagger = MeCab.Tagger()
# 결과를 저장할 리스트
parsed_results = []
# df의 'input' 열을 순회하며 MeCab으로 파싱
for text in df['input']:
parsed_result = tagger.parse(text)
parsed_results.append(parsed_result)
# 파싱 결과를 새 컬럼으로 추가
df['parsed'] = parsed_results
그러면 이렇게 파싱된 결과가 나온다.
df.to_csv('exit_parsed.csv')
Mecab으로 데이터 프레임 텍스트 일본어 형태소 분석한 후 명사만 남기기
이제 이 중에서 명사에 해당하는 것만 남겨보자.
1) 명사라는 말을 포함한 행만 남기기
# 각 라인을 검사하여 두 번째 필드가 '名詞'인 라인만 필터링하는 함수
def filter_nouns(text):
lines = text.split('\n') # 행을 라인으로 분리
noun_lines = [line for line in lines if '\t名詞' in line] # '\t名詞'를 포함하는 라인만 필터링
return '\n'.join(noun_lines) # 필터링된 라인들을 다시 하나의 문자열로 결합
# 'parsed' 열에서 각 행을 필터링하여 '名詞'만 남기기
df['nouns_only'] = df['parsed'].apply(filter_nouns)
# 결과 확인
print(df['nouns_only'])
그러면 이렇게 파싱된 결과 중 명사를 포함한 행만 남는다.
2) 단어만 남기는 코드
우리에게 필요한 건 \t명사 앞에 있는 명사에 해당하는 '단어'이니,
명사 단어만 남기는 코드를 적용해야 한다.
# '名詞' 앞의 단어만 추출하는 함수
def extract_noun_word(text):
return [line.split('\t')[0] for line in text.split('\n') if line] # 빈 라인은 무시
# 'nouns_only' 열의 각 행에 대해 명사 앞의 단어만 추출하여 'nouns' 열에 저장
df['nouns'] = df['nouns_only'].apply(extract_noun_word)
# 리스트 형태가 아닌 문자열 형태로 저장하고 싶을 경우, join을 사용할 수 있습니다.
df['nouns'] = df['nouns_only'].apply(lambda text: ' '.join(extract_noun_word(text)))
# 결과 확인
print(df['nouns'])
명사만 남았다.
df.to_csv('exit_parsed_noun.csv')
csv로 내보내기
참고자료
https://atmarkit.itmedia.co.jp/ait/articles/2102/05/news027.html
반응형