푸른 하늘 문고의 자연 언어 처리를 바삭하게 한다

실행 환경



이번에는 Google Colaboratory에서 실행합니다.
물론 Jupyter에서도 같은 일은 할 수 있습니다만, 간편하게 형태소 해석 툴의 MeCab를 사용할 수 있는 데다,
클라우드에서 실행하기 때문에 계산도 빠르고 사용하는 데이터의 용량도 거의 신경이 쓰이지 않기 때문에 Colab를 추천합니다.

푸른 하늘 문고 데이터 취득



웹상에서 스크래핑하여 취득하는 방법도 좋지만,
git clone으로 git 위에서도 데이터를 쉽게 얻을 수 있습니다.
!git clone --branch master --depth 1 https://github.com/aozorabunko/aozorabunko.git

MeCab 설치



형태소 분석 도구 MeCab을 설치합니다.
이쪽의 기사를 참고로 했습니다.

Colaboratory에서 MeCab을 사용할 수 있도록 합니다.

Colab에서는 이 코드를 치는 것만으로 MeCab을 사용할 수 있게 됩니다.
!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.7

조속히 시험에 MeCab로 형태소 해석을 해 봅시다.
import MeCab
mecab = MeCab.Tagger("-Ochasen")
text = mecab.parse ("すもももももももものうち")
print(text)

실행 결과
すもも   スモモ   すもも   名詞-一般       
も モ も 助詞-係助詞        
もも  モモ  もも  名詞-一般       
も モ も 助詞-係助詞        
もも  モモ  もも  名詞-一般       
の ノ の 助詞-連体化        
うち  ウチ  うち  名詞-非自立-副詞可能       
EOS

훌륭하게 난해한(?) 이 문장의 해석을 해 주었습니다.

나누기만 추출하고 싶은 경우는 Tagger 메소드의 인수를 "-0wakachi"로 합니다.
mecab_wakachi = MeCab.Tagger("-Owakati")
text_2 = mecab_wakachi.parse ("すもももももももものうち")
print(text_2)

실행 결과
すもも も もも も もも の うち 

드라이브 마운트



그런 다음 Colab 프로그램에서 푸른 하늘 문고 데이터를로드하기 위해 Google 드라이브에 마운트를 실행합니다.
나오는 URL로 날아가면 계정 인증 화면이 나오므로 계정을 선택하고 인증 코드를 붙여서 실행하십시오.
from google.colab import drive
drive.mount('/content/drive')

화면 왼쪽의 [파일] 메뉴에 drive에 저장한 데이터가 표시되어 액세스할 수 있게 됩니다.


구문 분석할 파일 선택



다운로드한 'aozorabunko' 디렉토리 안의 'cards' 디렉토리에 소설의 데이터가 html
같은 형식으로 저장됩니다.
구문 분석할 html 경로(소설이 작성된 파일 경로)를 지정합니다.
이번에는 아쿠타가와 류노스케의 '라세이몬'에서 해석해 보겠습니다.
path_to_html='aozorabunko/cards/000879/files/127_15260.html'

BeautifulSoup으로 스크래핑



BeautifulSoup을 사용하여 html 파일에서 소설 본문만 가져옵니다.
from bs4 import BeautifulSoup

with open(path_to_html, 'rb') as html:
  soup = BeautifulSoup(html, 'lxml')

main_text = soup.find("div", class_='main_text')

#ルビが振ってあるのを削除
for yomigana in main_text.find_all(["rp","h4","rt"]):
  yomigana.decompose()

sentences = [line.strip() for line in main_text.text.strip().splitlines()]

print(sentences)

실행 결과
['ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。', '広い門の下には、...(略)]

리스트 형식으로 본문을 취득할 수 있었습니다. 이것을 해석을 위해 str형으로 변환합니다.

rashomon_text=','.join(sentences)

WordCloud 실행을 위한 준비



다음으로 WordCloud를 사용하여 '라생문' 본문의 특징을 시각화해 봅시다.
실행을 위해 본문을 나눕니다.

mecab_wakachi = MeCab.Tagger("-Owakati")
rashomon_text_wakachi = mecab_wakachi.parse(rashomon_text)
print(rashomon_text_wakachi)

실행 결과
ある 日 の 暮方 の 事 で ある 。 一 人 の 下人 が 、 羅生門 の 下 で 雨 やみ を 待っ て い た 。 , 広い 門 の 下 に は 、 この 男 の ほか に 誰 も ...(略)

WordCloud 획득 및 실행



WordCloud를 설치합니다.
!pip install wordcloud

WordCloud 이미지를 표시합니다.

from wordcloud import WordCloud
import matplotlib.pyplot as plt
f_path = '/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf' #日本語フォントの取得
wordcloud = WordCloud(background_color="white", 
                      font_path=f_path, 
                      width=700, 
                      height=600).generate(rashoumon_text_wakachi)
plt.figure(figsize=(12,10))
plt.imshow(wordcloud)
plt.axis("off") #メモリの非表示
plt.show()



WordCloud가 표시되었습니다 (^ o ^)

좋은 웹페이지 즐겨찾기