def add_dataCrawling(self): aksi = request.form['aksi'] instance_Api = Api() instance_Excel = Excel() # Fungsi CARI TWEET(crawling) : Ambil data menggunakan API Twitter ==> Simpan(data) ke Excel & Tampilkan(data) ke layar if aksi == 'crawling': kata_kunci = request.form['kata_kunci'] tanggal_awal = request.form['tanggal_awal'] tanggal_akhir = request.form['tanggal_akhir'] # Ambil data menggunakan API Twitter (Tweepy) data_crawling = instance_Api.get_search( kata_kunci + ' -filter:retweets', tanggal_awal, tanggal_akhir) # Fungsi[1] : Simpan data_crawling ke dalam file Excel instance_Excel.save_excel_crawling(data_crawling) # Menampilkan data_crawling ke layar return json.dumps({'data_crawling': data_crawling}) # Fungsi SIMPAN TWEET(crawling) : Ambil data dari excel(yang telah disimpan[1]) ==> Simpan ke Database if aksi == 'save_crawling': # Fungsi[2] : Membuat tuple dari file excel tuples_excel = instance_Excel.make_tuples_crawling() # Simpan ke Database dengan VALUES berupa tuple dari Fungsi[2] instance_Model = Models( 'REPLACE INTO tbl_tweet_crawling(id, text, user, created_at) VALUES (%s, %s, %s, %s)' ) instance_Model.query_sql_multiple(tuples_excel) return None
def add_dataSplit(self): rasio = request.form['rasio'] jumlah_data = float(request.form['jumlah_data']) if rasio == '1:9': jumlah_dataTes = math.floor(jumlah_data * 0.1) # Membagi data sebanyak 10% sebagai data tes(dengan pembulatan ke bawah) jumlah_dataLatih = math.ceil(jumlah_data * 0.9) # Membagi data sebanyak 90% sebagai data latih(dengan pembulatan ke atas) elif rasio == '2:8': jumlah_dataTes = math.floor(jumlah_data * 0.2) # Membagi data sebanyak 20% sebagai data tes(dengan pembulatan ke bawah) jumlah_dataLatih = math.ceil(jumlah_data * 0.8) # Membagi data sebanyak 80% sebagai data latih(dengan pembulatan ke atas) # SPLIT value 0 = data tes | value1 = data latih # SPLIT SECARA RANDOM / ACAK # # Membuat list(data_type) dengan value 0 sebanyak jumlah variabel 'jumlah_dataTes' # data_type = [0 for i in range(int(jumlah_dataTes))] # # Perulangan untuk mengisi value 1 ke dalam list(data_type) pada index random sebanyak jumlah variabel 'jumlah_dataLatih' # for _ in range(int(jumlah_dataLatih)): # data_type.insert(random.randint(0, len(data_type)), 1) # SPLIT SECARA LATIH DULU BARU UJI data_type = [] for i in range(int(jumlah_data)): if i < jumlah_dataLatih: data_type.append(1) else: data_type.append(0) # SELECT data tweet yang TELAH diberi label untuk diproses instance_Model = Models('SELECT * FROM tbl_tweet_clean WHERE sentiment_type IS NOT NULL') data_withLabel = instance_Model.select() data_simpan_tes = [] data_simpan_latih = [] # Menyimpan data(yang telah diSELECT) ke tabel yang berbeda berdasarkan value dari variabel 'data_type' for index, data in enumerate(data_withLabel): if data_type[index] == 0: # Jika value 'data_type' bernilai 0 maka akan di INSERT kedalam tabel TESTING data_simpan_tes.append((data['id'], data['text'], data['clean_text'], data['user'], data['created_at'], data['sentiment_type'])) # Membuat tuple sebagai isian untuk kueri INSERT else: # Jika value 'data_type' tidak bernilai 0 INSERT kedalam tabel TRAINING data_simpan_latih.append((data['id'], data['text'], data['clean_text'], data['user'], data['created_at'], data['sentiment_type'])) # Membuat tuple sebagai isian untuk kueri INSERT # Menyimpan data dengan kueri INSERT IGNORE, dengan memperbarui record yang duplikat berdasarkan PK instance_Model = Models('INSERT IGNORE tbl_tweet_testing(id, text, clean_text, user, created_at, sentiment_type) VALUES (%s, %s, %s, %s, %s, %s)') instance_Model.query_sql_multiple(data_simpan_tes) # Menyimpan data dengan kueri INSERT IGNORE, dengan memperbarui record yang duplikat berdasarkan PK instance_Model = Models('INSERT IGNORE tbl_tweet_training(id, text, clean_text, user, created_at, sentiment_type) VALUES (%s, %s, %s, %s, %s, %s)') instance_Model.query_sql_multiple(data_simpan_latih) return 'true'
def import_fileExcelStopword(self): excel_file = request.files['excel_file'] if (excel_file.filename.lower().endswith(('.xls', '.xlsx'))): instance_Excel = Excel() tuples_excel = instance_Excel.make_tuples_stopword(excel_file) # Simpan ke Database dengan VALUES berupa tuple instance_Model = Models( 'INSERT INTO tbl_stopword(stopword) VALUES (%s)') instance_Model.query_sql_multiple(tuples_excel) return None flash( 'Format file tidak sesuai! File excel harus ber-ekstensi .xls atau .xlsx', 'error') return None
def import_fileExcelCrawling(self): excel_file = request.files['excel_file'] if (excel_file.filename.lower().endswith(('.xls', '.xlsx'))): instance_Excel = Excel() tuples_excel = instance_Excel.make_tuples_crawling(excel_file) # Simpan ke Database dengan VALUES berupa tuple instance_Model = Models( 'REPLACE INTO tbl_tweet_crawling(id, text, user, created_at) VALUES (%s, %s, %s, %s)' ) instance_Model.query_sql_multiple(tuples_excel) return None flash( 'Format file tidak sesuai! File excel harus ber-ekstensi .xls atau .xlsx', 'error') return None
def add_dataLabelingKamus(self): aksi = request.form['aksi'] # FUNGSI LABELING DENGAN KAMUS : Data teks bersih ==> Hitung Skor(Sentimen) ==> Pemberian Kelas Sentimen ==> Update ==> Tampilkan(data) ke layar if aksi == 'labelingKamus': # SELECT data tanpa label dari database instance_Model = Models('SELECT id, clean_text FROM tbl_tweet_clean WHERE sentiment_type IS NULL') data_noLabel = instance_Model.select() # SELECT data kata-kata & bobot positif dari database instance_Model = Models('SELECT positive_word FROM tbl_lexicon_positive') kamus_positive = instance_Model.select() # SELECT data kata-kata & bobot negative dari database instance_Model = Models('SELECT negative_word FROM tbl_lexicon_negative') kamus_negative = instance_Model.select() teks_data = [] # wadauh untuk clean_text agar bisa ditampilkan ke layar (response) skor_data = [] # wadauh untuk skor agar bisa ditampilkan ke layar (response) total_positive = [] # wadauh untuk jumlah positive agar bisa ditampilkan ke layar (response) total_negative = [] # wadauh untuk jumlah negatif agar bisa ditampilkan ke layar (response) jumlah_netral = 0 # menghitung tweet yang berskor = 0 atau sentimen netral data_ubah = [] print('\n-- PROSES '+ str(len(data_noLabel)) +' DATA --') # PRINT KE CMD for index, data_nL in enumerate(data_noLabel): # loop data tweet yang belum memiliki label skor = 0 count_positive = 0 count_negative = 0 # Menghitung jumlah skor pada teks bersih dengan kamus for clean_text in data_nL['clean_text'].split(): # Tokenizing for data_p in kamus_positive: # loop data kata positif if clean_text == data_p['positive_word']: skor += 1 count_positive += 1 break for data_n in kamus_negative: # loop data kata negatif if clean_text == data_n['negative_word']: skor -= 1 count_negative += 1 break # Klasifikasi sentimen berdasarkan skor if skor > 0: sentimen = 'positif' elif skor < 0: sentimen = 'negatif' else: jumlah_netral += 1 continue try: data_ubah.append((sentimen, data_nL['id'])) # Membuat tuple sebagai isian untuk kueri UPDATE # Simpan data ke list teks_data.append(data_nL['clean_text']) skor_data.append(skor) total_positive.append(count_positive) total_negative.append(count_negative) except: print('\nGagal Mengubah Data '+ str(data['id']) +'\n') return None print(index+1) # PRINT KE CMD # Menyimpan sentimen hasil dengan kueri UPDATE instance_Model = Models('UPDATE tbl_tweet_clean SET sentiment_type=%s WHERE id = %s') instance_Model.query_sql_multiple(data_ubah) print('\n-- SELESAI --\n') # PRINT KE CMD # Menampilkan data ke layar return json.dumps({ 'teks_data': teks_data, 'total_positive': total_positive, 'total_negative': total_negative, 'skor_data': skor_data, 'jumlah_netral': jumlah_netral })
def add_dataPreprocessing(self): aksi = request.form['aksi'] instance_Excel = Excel() # Fungsi PREPROCESSING : Data Tweet dari database ==> PREPROCESSING ==> Tweet Bersih ==> Simpan(data) ke Excel & Tampilkan(data) ke layar if aksi == 'preprocessing': instance_Model = Models('SELECT * FROM tbl_tweet_crawling') data_preprocessing = instance_Model.select() first_data = [] last_data = [] case_folding = [] remove_non_character = [] remove_stop_word = [] change_stemming = [] change_slang = [] data_simpan = [] # Inisialisasi untuk proses 7. Change Slang Word instance_Model = Models( 'SELECT slangword,kata_asli FROM tbl_slangword') slangwords = instance_Model.select() # Inisialisasi Konfigurasi Library Sastrawi untuk proses Remove Stop Word instance_Model = Models('SELECT stopword FROM tbl_stopword') stopwords = instance_Model.select() # Inisialisasi Konfigurasi Library Sastrawi untuk prosesStemming instance_Stemming = StemmerFactory() stemmer = instance_Stemming.create_stemmer() print('\n-- PROSES ' + str(len(data_preprocessing)) + ' DATA --') # PRINT KE CMD for index, data in enumerate(data_preprocessing): first_data.append(data['text']) # Case Folding : Mengubah huruf menjadi huruf kecil result_text = data['text'].lower() case_folding.append(result_text) # Remove URL, Mention, Hastag & Number : Menghilangkan kata yang diawali dengan kata 'http', '@' dan '#' result_text = re.sub(r'http\S+|@\S+|#\S+|\d+', '', result_text) # Remove Selain Huruf : Menghilangkan selain huruf [a-z] result_text = re.sub(r'[^a-z ]', '', result_text) # Remove Whitespace : Menghilangkan spasi/tab/baris yang kosong result_text = result_text.strip() result_text = re.sub('\s+', ' ', result_text) remove_non_character.append(result_text) # Merubah slang word ke kata aslinya for slang in slangwords: if slang['slangword'] in result_text: result_text = re.sub( r'\b{}\b'.format(slang['slangword']), slang['kata_asli'], result_text) change_slang.append(result_text) # Menghapus stop word for stop in stopwords: if stop['stopword'] in result_text: result_text = re.sub( r'\b{}\b'.format(stop['stopword']), '', result_text) remove_stop_word.append(result_text) # Stemming : Menghilangkan infleksi/kata berimbuhan kata ke bentuk dasarnya result_text = stemmer.stem(result_text) change_stemming.append(result_text) last_data.append(result_text) if result_text != '': # SIMPAN DATA try: data_simpan.append( (data['id'], data['text'], result_text, data['user'], data['created_at']) ) # Membuat tuple sebagai isian untuk kueri INSERT except: print('\nGagal Menyimpan Data (ID: ' + str(data['id']) + ')\n') else: print('\nGagal Menyimpan Data (ID: ' + str(data['id']) + ')\n') print(index + 1) # PRINT KE CMD # Menyimpan data hasil preprocessing dengan kueri INSERT IGNORE, dengan memperbarui record yang duplikat berdasarkan PK instance_Model = Models( 'REPLACE INTO tbl_tweet_clean(id, text, clean_text, user, created_at) VALUES (%s, %s, %s, %s, %s)' ) instance_Model.query_sql_multiple(data_simpan) print('\n-- SELESAI --\n') # PRINT KE CMD # Menampilkan data ke layar return json.dumps({ 'first_data': first_data, 'case_folding': case_folding, 'remove_non_character': remove_non_character, 'change_slang': change_slang, 'remove_stop_word': remove_stop_word, 'change_stemming': change_stemming, 'last_data': last_data })