| # -*- coding: utf-8 -*- | |
| """dogaldilislemefinal.ipynb | |
| Automatically generated by Colaboratory. | |
| Original file is located at | |
| https://colab.research.google.com/drive/1y11a5nqCyrTjdYTrmVZfaskBA9BMf70- | |
| # Bağlantı | |
| """ | |
| !apt-get install -y -qq software-properties-common python-software-properties module-init-tools | |
| !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null | |
| !apt-get update -qq 2>&1 > /dev/null | |
| !apt-get -y install -qq google-drive-ocamlfuse fuse | |
| from google.colab import auth | |
| auth.authenticate_user() | |
| from oauth2client.client import GoogleCredentials | |
| creds = GoogleCredentials.get_application_default() | |
| import getpass | |
| !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL | |
| vcode = getpass.getpass() | |
| !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} | |
| !mkdir -p drive | |
| !google-drive-ocamlfuse drive | |
| !ls | |
| """# Kütüphaneler""" | |
| import pandas as pd | |
| import numpy as np | |
| from sklearn.feature_extraction.text import CountVectorizer | |
| import string #noktalama işaretleri | |
| import re | |
| import nltk #etkisiz kelimeler | |
| import numpy | |
| import csv | |
| import pandas as pd | |
| import os, glob | |
| from nltk.corpus import stopwords | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.feature_extraction.text import TfidfTransformer | |
| from sklearn.naive_bayes import MultinomialNB | |
| from bs4 import BeautifulSoup | |
| import requests | |
| """# Veri ayrıştırma/ Parse | |
| Bot engeline karşı | |
| """ | |
| headersparam = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0"} | |
| """Siteden format değiştirme ve çekme""" | |
| # sadece trendyolun tüm yorumlar sayfası için çalışır!!! | |
| r = requests.get("https://www.trendyol.com/apple/airpods-2-nesil-bluetooth-kulaklik-mv7n2tu-a-apple-turkiye-garantili-p-6405631/yorumlar?boutiqueId=561660&merchantId=106299", headers=headersparam) | |
| yorum =r.content | |
| soup = BeautifulSoup(yorum,"html.parser") | |
| """İlk pars işlemleri""" | |
| # Farklı siteler için "div" ve "attrs" kısımları o sayfaya göre özelleştirilmeli | |
| a= soup.find_all("div",attrs={"class":"pr-rnr-com"}) | |
| """Ayrıştırılmış verileri sıra ile diziye kayıt etme""" | |
| Liste=[] | |
| for i in a: | |
| b = i.find_all("div",attrs={"class":"rnr-com-w"}) | |
| for j in b: | |
| yorum1=j.find("div",attrs={"class":"rnr-com-tx"}).text.strip() | |
| #begeni = i(" ") | |
| #tarih=i.find("span",attrs={"class":"rnr-com-usr"}).span.next_sibling | |
| #satisdurumu=i.find("span",attrs={"class":"rnr-com-usr"}).next_sibling.text | |
| #alici=i.find("span",attrs={"class":"rnr-com-usr"}).span.previous_sibling | |
| #satici=i.find("span",attrs={"class":"seller-name-info"}).text | |
| #begenisayisi=i.find("div",attrs={"class":"rnr-com-like"}).span.next_sibling.text | |
| #Liste.append([yorum1,tarih,satisdurumu,alici,satici,begenisayisi]) | |
| Liste.append([yorum1]) | |
| """Diziyi dataframe etme""" | |
| df = pd.DataFrame(Liste) | |
| #df.columns=["Yorumlar","Tarih","Durum","Müşteri","Satıcı","Beğeni"] | |
| df.columns=["Yorumlar"] | |
| """Doğruluk testi""" | |
| df | |
| """Excel formatında kayıt etme""" | |
| df.to_excel('/content/drive/Colab Notebooks/trendyolveri/hamveri.xlsx') | |
| """# Veri Seti Yükleme""" | |
| # csv den veri yükleme | |
| from openpyxl import Workbook,load_workbook | |
| yorumlar = pd.read_excel('/content/drive/Colab Notebooks/trendyolveri/trendyolverislenmis.xlsx') | |
| yorumlartest = pd.read_excel('/content/drive/Colab Notebooks/trendyolveri/hamveri.xlsx') | |
| #ilk beş girdi görmek için | |
| yorumlar.head() | |
| #yorumlartest.head() | |
| """# Veri Seti Önişleme""" | |
| nltk.download('stopwords') # önemliiiii | |
| noktalama = string.punctuation | |
| etkisiz = stopwords.words('turkish') | |
| print(noktalama) | |
| print(etkisiz) | |
| """# Eğitim verileri""" | |
| #yorumdizim=[] | |
| #likedizim=[] | |
| for d in yorumlar['Yorumlar'].head(): | |
| print(d+ '\n------------------------------') | |
| # Etkisiz kelimeleri atmak | |
| temp= ' ' | |
| for word in d.split(): | |
| if word not in etkisiz and not word.isnumeric(): | |
| temp += word + ' ' | |
| #yorumdizim.append(temp) | |
| #yorumcsv = pd.DataFrame(yorumdizim) | |
| #data1 = yorumcsv.to_excel | |
| print(temp+ '\n********************') | |
| """Noktalama işaretleri silme""" | |
| for d in yorumlar['Yorumlar'].head(): | |
| print(d+ '\n------------------------------') | |
| # Noktalama işaretleri atma | |
| temp= ' ' | |
| for word in d: | |
| if word not in noktalama: | |
| temp += word | |
| #yorumdizim.append(temp) | |
| print(temp+ '\n********************') | |
| d= temp | |
| """# Test verileri""" | |
| for d in yorumlartest['Yorumlar'].head(): | |
| print(d+ '\n------------------------------') | |
| # Etkisiz kelimeleri atmak | |
| temp= ' ' | |
| for word in d.split(): | |
| if word not in etkisiz and not word.isnumeric(): | |
| temp += word + ' ' | |
| #yorumdizim.append(temp) | |
| #yorumcsv = pd.DataFrame(yorumdizim) | |
| #data1 = yorumcsv.to_excel | |
| print(temp+ '\n********************') | |
| for d in yorumlartest['Yorumlar'].head(): | |
| print(d+ '\n------------------------------') | |
| # Noktalama işaretleri atma | |
| temp= '' | |
| for word in d: | |
| if word not in noktalama: | |
| temp += word | |
| #yorumdizim.append(temp) | |
| print(temp+ '\n********************') | |
| d= temp | |
| """# Verileri kayıt etme""" | |
| #df = pd.DataFrame(yorumdizim) | |
| #df.columns=["Yorumlar","Tarih"] | |
| #print(df) | |
| yorumlar.to_csv('/content/drive/Colab Notebooks/trendyolveri/cleaned.csv', index = False) | |
| yorumlartest.to_csv('/content/drive/Colab Notebooks/trendyolveri/cleanedtest.csv', index = False) | |
| yorumlar = pd.read_csv('/content/drive/Colab Notebooks/trendyolveri/cleaned.csv') | |
| yorumlartest = pd.read_csv('/content/drive/Colab Notebooks/trendyolveri/cleanedtest.csv') | |
| print(yorumlar.head()) | |
| """# Veri Setini Bölme""" | |
| # Arındırılmış veriyi train ve test kümelerine ayırıyoruz | |
| # Eğitim ve test olarak ayıracağız. train=eğitim, test=test | |
| X_train, X_test, y_train, y_test = train_test_split(yorumlar['Yorumlar'].values.astype('U'),yorumlar['begeni'].values.astype('U'), test_size=0.1, random_state=42) | |
| # XX_train işimize yaramıyor. | |
| XX_train, XX_test = train_test_split(yorumlartest['Yorumlar'].values.astype('U'), test_size=0.9, random_state=42) | |
| print(X_train.shape) | |
| print(XX_test.shape) | |
| """# Sayma Vektörü Oluşturma""" | |
| # Train kümesindeki cümlelerin sayma vektöelerini çıkarıyoruz | |
| count_vect = CountVectorizer(max_features = 20000) # Burası önemli ram için | |
| X_train_counts = count_vect.fit_transform(X_train) | |
| print(X_train_counts.shape) | |
| """Tf*Idf vektörü oluşturma | |
| sadece o yoruma özgü(temsil edecek kelimler olmalı) | |
| """ | |
| # Train kümesindeki cümlelerin TF*IDF vektörlerini sayma vekttörlerinden oluşturuyoruz | |
| # Tf= terim sıklığı, IDF= bir kelimenin dökümanda kaç kere geçtiği | |
| # TF*IDF bütün olarak; bir kelimenin bir döküman içinde ki önemini gösterir | |
| tfidf_transformer = TfidfTransformer() | |
| X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) | |
| print(X_train_tfidf.shape) | |
| """# Naive Bayes Model Eğitimi""" | |
| # Çok modlu Naive Bayes Sınıflandırıcısı eğitiyoruz | |
| clf = MultinomialNB().fit(X_train_tfidf, y_train) | |
| XX_test_counts = count_vect.transform(XX_test) | |
| XX_test_tfidf = tfidf_transformer.transform(XX_test_counts) | |
| """# Model Performansı Ölçme""" | |
| # Sınıflandırıcı ile test seti üzerindeki tahminleme yapıyoruz | |
| y_pred = clf.predict(XX_test_tfidf) | |
| for review, sentiment in zip(XX_test[:], y_pred[:]): | |
| print('%r => %s' % (review, sentiment)) | |
| """# Grafik""" | |
| # Performans sonuçları | |
| # Veri seti bölme aşamasında kümelemeler eşit olmadığı için bu kısım hata verebilir!! | |
| from sklearn.metrics import accuracy_score | |
| print(accuracy_score(XX_test, y_pred)) | |