728x90
반응형
SMALL
필수 라이브러리 설치
!apt-get update
!apt-get install g++ openjdk-8-jdk python-dev python3-dev -y
!pip3 install JPype1-py3
!pip3 install konlpy
!JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
네이버 영화 사이트에서 리뷰 수집
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
review_page = 'https://movie.naver.com/movie/bi/mi/pointWriteFormList.naver?code=184516&type=after&isActualPointWriteExecute=false&isMileageSubscriptionAlready=false&isMileageSubscriptionReject=false&page={}'
dict_score = dict()
for page_number in range(1, (7394//10) + 2):
time.sleep(2)
print(f'[+]와칸다 포에버 {page_number}페이지 조회 시작...')
res = requests.get(review_page.format(page_number))
bs4obj = BeautifulSoup(res.text, 'html.parser')
for index, score_result in enumerate(bs4obj.find_all('div', {"class": 'score_result'})[0].find_all('li')):
list0 = score_result
score = int(list0.em.text) # 점수
text = list0.find_all('span', {'id': f'_filtered_ment_{index}'})[0].text.strip()
dict_score[f'{page_number}-{index}'] = [score,text]
if page_number == 10:
break
print(f'[+]와칸다 포에버 {page_number}페이지까지 조회 완료')
pd.DataFrame(dict_score, index=['score','text']).T
리뷰 데이터 다운로드
# 리눅스 명령어를 사용해 다운로드 수행
!wget https://github.com/e9t/nsmc/raw/master/ratings_train.txt
review_df = pd.read_csv('ratings_train.txt', sep='\t')
review_df.head()
review_df.shape
데이터 전처리
from sklearn.model_selection import train_test_split
review_df.dropna(inplace=True)
x = review_df['document'].values
y = review_df['label'].values
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.2, random_state=0)
print(train_x.shape)
print(test_x.shape)
print(train_y.shape)
print(test_y.shape)
from konlpy.tag import Twitter
twitter = Twitter()
twitter.morphs(train_x[0])
|
from sklearn.feature_extraction.text import TfidfVectorizer
from konlpy.tag import Twitter
tfv = TfidfVectorizer(tokenizer=twitter.morphs, ngram_range=(1,2), min_df=3, max_df=0.9)
tfv.fit(train_x)
tfv_train_x = tfv.transform(train_x) # 텍스트를 숫자로 변환한 train_x가 완성된다.
tfv_train_x
평점 학습
from sklearn.linear_model import LogisticRegression # 이진분류 알고리즘
from sklearn.model_selection import GridSearchCV # 하이퍼파리미터 최적화
clf = LogisticRegression(random_state=0)
params = {'C': [1,3,5,7,9]}
grid_cv = GridSearchCV(clf, param_grid=params, cv=4, scoring='accuracy', verbose=1)
grid_cv.fit(tfv_train_x, train_y)
print(grid_cv.best_params_)
print(grid_cv.best_score_)
평점 예측
tfv_test_x = tfv.transform(test_x)
grid_cv.best_estimator_.score(tfv_test_x, test_y)
a = ['아 너무 재미있어요 꼭 보세요',
'핵노잼 너무 재미없어 절대 보지마',
'영화 너무 훌륭해요!',
'영화가 지루해요',
'보지마삼'
]
my_review = tfv.transform(a)
grid_cv.best_estimator_.predict(my_review)
728x90
반응형
LIST
'App Programming > Web Crawler' 카테고리의 다른 글
[Web Crawler] 웹과 크롬 개발자 도구 (0) | 2023.01.02 |
---|---|
[Web Crawler] Requests 모듈 (0) | 2022.12.26 |
[Web Crawler] 네이버 블로그 / 뉴스 크롤링 (0) | 2022.09.29 |
[Web Crawler] 네이버 클라우드 플랫폼 (0) | 2022.09.28 |
[Web Crawler] 네이버 이미지 수집용 웹 크롤러 만들기 (0) | 2022.08.28 |