비투즈의 노트르담

전체 글 (58)

  1. 2018.07.10 3)파이썬 문자 형태소 분석

    인터넷들 예제를 무더기로 보고 따라하다 보니 아래 블로거의 예제를 애용하게 되었다. https://blog.naver.com/imsam77/221258133789 --임샘의 세상에 휘둘리지 않는 힘 (이분은 또 Lifebloom(www.lifebloom.biz) 를 참조하는듯 하다. IT 전문이신 줄 알았는데 분야별 구분하여 스스로를 발전시키시는 것 같아 본받을점이 있는 듯 하다. 우선 예제들 중에 많이 참조할 듯 하여 #태그 예제를 따라하려고 했으나 Try setting up the JAVA_HOME environment variable proprerly 발생 python 만 필요한 줄 알았는데 JAVA도 필요 한 듯 하다. 이유를 찾아보니 파이썬용 한글자연어처리 모듈(KoNLPY, korean nat..

  2. 2018.07.10 2)댓글 수집하기

    ==================recent.py===================== # 1. 웹크롤링에 필요한 2가지 모듈 호출 from urllib.request import urlopen # 특정 웹서버에 접근 from bs4 import BeautifulSoup # 웹페이지 내용구조 해석 ### I. 1쪽 리뷰만 긁고 출력하기 # 2. 다음 영화소개홈페이지 중 1번째 고객리뷰에접속 url='http://movie.daum.net/moviedb/grade?movieId=97728&type=netizen&page=1' webpage=urlopen(url) # 3. 댓글 페이지 html 구조 긁어오기 source = BeautifulSoup(webpage,'html.parser',from_encodi..

  3. 2018.07.10 1.크롤링시작하기(Python 설치)

    크롤링 : 각종 데이터를 수집하는 작업. Sqoop을 이용하여 DB에 저장된 데이터를 수집하거나 웹사이트 데이터를 통해 가져오는 크롤링 작업 웹사이트에서 데이터를 수집하기 위해 Open API를 사용하여 댓글 등 수집하려고 하는데 기본적으로 Python을 많이 사용하는 거 같아 설치를 시작한다. 시행착오 : Redhat6과 Windown7에 설치 시도. Redhat6에 이미 설치된 Python2 버전에 3 버전 lib 사용하려고 하니 no module named request 에러 문구가 지속적으로 나왔다. pip 이란 별도 패키지 설치 기능을 적용해야 했으나 설치해도 Python3 lib 패키지 사용으로 실패. Window7에서 Python 설치했으나 api-ms-win-crt-runtime-1-1.0..

인터넷들 예제를 무더기로 보고 따라하다 보니 아래 블로거의 예제를 애용하게 되었다.

 

https://blog.naver.com/imsam77/221258133789 --임샘의 세상에 휘둘리지 않는 힘

(이분은 또 Lifebloom(www.lifebloom.biz) 를 참조하는듯 하다.

 

IT 전문이신 줄 알았는데 분야별 구분하여 스스로를 발전시키시는 것 같아 본받을점이 있는 듯 하다.

우선 예제들 중에 많이 참조할 듯 하여 #태그

 

 

예제를 따라하려고 했으나

 

Try setting up the JAVA_HOME environment variable proprerly 발생

 

python 만 필요한 줄 알았는데 JAVA도 필요 한 듯 하다.

이유를 찾아보니

 

 

파이썬용 한글자연어처리 모듈(KoNLPY, korean natural language python)은 파이참에서 모듈추가 기능으로 설치하면 되지만,

KoNLPY가 java 클래스를 사용하기 때문에 자바가 설치되어 있어야 합니다.  
또한 파이썬과 자바를 연결해 주는 JPype1 모듈도 설치해야 한다.

 

텍스트 마이닝 / 형태소 분석등을 위해 해당 모듈들이 필요한 듯 하다.

I. 개발언어 3가지 : Python(PyCharm), JAVA(JDK), Visual C++ 
II. 텍스트마이닝 파이썬 패키지 7가지 : beautifulsoup4, JPype1, pygame, simplejson, Pytagcloud, Twitter, koLNPy

 

beautifulsoup4 : Screen-scraping library

JPype1 : Python-Java bridge.
참고로 이 모듈은 자바 클래스를 파이썬에서 사용할 수 있도록 브릿지 역할을 하기 때문에, 이 모듈을 설치하기 전에 자바개발환경(JDK)이 먼저 설치되어 있어야 정상적으로 설치됩니다. 

[단어 시각화 모듈 (워드 클라우드)]
2.3. pygame : Python Game Development
2.4. simplejson : Simple, fast, extensible JSON encoder/decoder for Python.
2.5. pytagcloud : Create beautiful clouds as images or HTML.

[한국어 텍스트 분석 모듈]
2.6. twitter : An API and command-line toolset for Twitter.
2.7. koLNPy : Python package for Korean natural language processing

뒤 늦게 알게 된 사실이 있습니다.
JPype1 모듈을 설치하기 위해서는 자바(JDK)  뿐만아니라 Visual Studio C++ 도 사전에 설치되어 있어야 합니다.  파이참에서 JPype1 모듈 설치가 정상적으로 되지 않아 설치에러 원인을 확인하니 MS Visual  C++이 필요하다고 합니다. 

 

자 부가 설명은 완료됐고 형태소 분석을 따라해보자

 

이 프로그램은 6단계의 처리절차를 거칩니다.

# 1. 이전 포스트에서 크롤링한 댓글파일을 읽기전용으로 호출함
# 2. 형태소 검출가공을 위해 변수 okja에 전체댓글을 다시저장
# 3. 트윗터 패키지 안에 konlpy 모듈호출 및 객체생성
# 4. 각 문장별(for문 사용)로 형태소구분 및 품사매칭 (koLNPy함수)
# 5. 명사나 형용사만 선별해 리스트에 담기
# 6. 선별된 품사별 빈도수 계산 & 상위 빈도 10위 까지 출력

 

===============preprocess.py==============

 

from collections import Counter

# 1. 이전 포스트에서 크롤링한 댓글파일을 읽기전용으로 호출함
file = open('okja1.txt','r',encoding='utf-8')
lines = file.readlines()

# 2. 변수 okja에 전체댓글을 다시저장
okja = []
for line in lines:
    okja.append(line)
file.close()

# 3. 트윗터 패키지 안에 konlpy 모듈호출
from konlpy.tag import Twitter
twitter = Twitter()

# 4. 각 문장별로 형태소 구분하기
sentences_tag = []
for sentence in okja:
    morph = twitter.pos(sentence)
    sentences_tag.append(morph)
    print(morph)
    print('-'*30)

print(sentences_tag)
print(len(sentences_tag))
print('\n'*3)

# 5. 명사 혹은 형용사인 품사만 선별해 리스트에 담기
noun_adj_list = []
for sentence1 in sentences_tag:
    for word, tag in sentence1:
        if tag in ['Noun','Adjective']:
            noun_adj_list.append(word)

# 6. 선별된 품사별 빈도수 계산 & 상위 빈도 10위 까지 출력
counts = Counter(noun_adj_list)
print(counts.most_common(10))

=====================================================

[('사랑스럽', 'Adjective'), ('고', 'Eomi'), ('잔혹', 'Noun'), ('한', 'Josa'), ('판타지', 'Noun'), ('이자', 'Noun'), ('현실', 'Noun')]

 

사랑스럽 - 형용사

고 - 어미

 

잔혹 - 명사

한 - 조사

 

반복 횟수

 

[('영화', 63), ('옥자',27), ('좋', 20), ('감독', 19), ('미자', 16), ('봉준호', 15), ('것', 13), ('동물', 12), ('돼지', 11) ]

 

 


 

'Crawling(Python)' 카테고리의 다른 글

2)댓글 수집하기  (0) 2018.07.10
1.크롤링시작하기(Python 설치)  (0) 2018.07.10

==================recent.py=====================

# 1. 웹크롤링에 필요한 2가지 모듈 호출
from urllib.request import urlopen # 특정 웹서버에 접근
from bs4 import BeautifulSoup # 웹페이지 내용구조 해석

### I. 1쪽 리뷰만 긁고 출력하기
# 2. 다음 영화소개홈페이지 중 1번째 고객리뷰에접속
url='http://movie.daum.net/moviedb/grade?movieId=97728&type=netizen&page=1'
webpage=urlopen(url)
# 3. 댓글 페이지 html 구조 긁어오기
source = BeautifulSoup(webpage,'html.parser',from_encoding='utf-8')
# 4. 네티즌 댓글부분(태그:p , 속성명:class, 속성값:desc_review)만 내용 추출하기
reviews = source.findAll('p',{'class': 'desc_review'})

# 5. 네티즌 별로 댓글 줄바꿔 출력하기
for review in reviews:
    print(review.get_text().strip())


### II. 1-10 쪽 리뷰 댓글 긁고, 텍스트파일에 저장하기

review_list=[]
for n in range(10):
    url = 'http://movie.daum.net/moviedb/grade?movieId=97728&type=netizen&page={}'.format(n+1)
    webpage = urlopen(url)
    source = BeautifulSoup(webpage,'html.parser',from_encoding='utf-8')
    reviews = source.findAll('p',{'class': 'desc_review'})

    for review in reviews:
        review_list.append(review.get_text().strip().replace('\n','').replace('\t','').replace('\r',''))

# 텍스트파일에 댓글 저장하기
file = open('okja1.txt','w',encoding='utf-8')

for review in review_list:
    file.write(review+'\n')

file.close()

============================================================

 

리뷰의 댓글을 가져와 okja1.txt에 저장한다.

댓글들은 <p class="desc_review"> 라는 태그에 묶여있는데 아래는 그것에서 참조하는듯 하다 ( 소스보기에서 봄)

reviews = source.findAll('p',{'class': 'desc_review'})

 

응용을 해봐서 댓글 단 닉네임을 가져와보자

 

niknames = source.findAll('em',{'class': 'link_profile'})
for nikname in niknames:
    print(nikname.get_text().strip())

 

 

 

'Crawling(Python)' 카테고리의 다른 글

3)파이썬 문자 형태소 분석  (0) 2018.07.10
1.크롤링시작하기(Python 설치)  (0) 2018.07.10

크롤링 : 각종 데이터를 수집하는 작업.

Sqoop을 이용하여 DB에 저장된 데이터를 수집하거나

웹사이트 데이터를 통해 가져오는 크롤링 작업

 웹사이트에서 데이터를 수집하기 위해 Open API를 사용하여 댓글 등 수집하려고 하는데

기본적으로 Python을 많이 사용하는 거 같아 설치를 시작한다.

 

시행착오 : Redhat6과 Windown7에 설치 시도.

               Redhat6에 이미 설치된 Python2 버전에 3 버전 lib 사용하려고 하니

 no module named request 에러 문구가 지속적으로 나왔다.

pip 이란 별도 패키지 설치 기능을 적용해야 했으나 설치해도 Python3 lib 패키지 사용으로 실패.

Window7에서 Python 설치했으나 api-ms-win-crt-runtime-1-1.0.ddl 못찾는 버그...

MS C+ 패키지? 를 설치하면 해결되는것 같았으나 문제가 지속적 발생.

 

Python 3.4 를 설치하였더니 에러가 발생하지 않았다. ( 설치중 Path 알아서 적용되고 Pip도 알아서 설치됨)

 ============wether.py=====================================

# -*- coding: utf-8 -*-
from urllib.request import urlopen, Request
import urllib
import bs4

location = '봉명동'
enc_location = urllib.parse.quote(location + '+날씨')

url = 'https://search.naver.com/search.naver?ie=utf8&query='+ enc_location

req = Request(url)
page = urlopen(req)
html = page.read()
soup = bs4.BeautifulSoup(html,'html5lib')
print('현재 ' + location + ' 날씨는 ' + soup.find('p', class_='info_temperature').find('span', class_='todaytemp').text + '도 입니다.')
============================================================

python wether.py

현재 봉명동 날씨는 27도 입니다.

 

제대로 된 크롤링은 아니지만 우선 웹페이지에서 데이터 가져오기 성공.

 

 

 

*설치참조 : http://ledgku.tistory.com/19

 테스트참조 :  ㅠㅠ 링크 잊어버림...

'Crawling(Python)' 카테고리의 다른 글

3)파이썬 문자 형태소 분석  (0) 2018.07.10
2)댓글 수집하기  (0) 2018.07.10