import os import re import json import string import emoji import pandas as pd def normalize_money(sent): return re.sub(r'\\d+((,|.)\\d)?[k|m|b](/)?', 'giá ', sent) def normalize_time(sent): return re.sub(r'\\d+(\\s)?(h|giờ)(\\s)?(\\d+)?', 'giờ ', sent) def normalize_hastag(sent): return re.sub(r'#+\\w+', 'tag', sent) def normalize_HTML(text): return re.sub(r'<[^>]*>', '', text) def normalize_website(sent): result = re.sub(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', 'website', sent) return re.sub(r'\\w+(\\.(com|vn|me))+((\\/+([\\.\\w\\_\\-]+)?)+)?', 'website', result) def normalize_emoji(sent): return emoji.demojize(sent) def normalize_elongate(sent): patern = r'(.)\\1{1,}' result = sent while(re.search(patern, result) != None): repeat_char = re.search(patern, result) result = result.replace(repeat_char[0], repeat_char[1]) return result def remove_number(sent): return re.sub(r'[0-9]+', '', sent) def remove_punct(text): ''' This function replaces punctuations in texts for easier handling ''' text = text.replace(";", ",").replace("“", " ").replace("”", " ") text = "".join( [ c if c.isalpha() or c.isdigit() or c in [",","."] else " " for c in text ] ) text = " ".join(text.split()) return text def normalize_acronyms(sent): text = sent replace_list = { 'ô kêi': ' ok ', 'okie': ' ok ', ' o kê ': ' ok ', 'okey': ' ok ', 'ôkê': ' ok ', 'oki': ' ok ', ' oke ': ' ok ',' okay':' ok ','okê':' ok ',' tks ': u' cám ơn ', 'thks': u' cám ơn ', 'thanks': u' cám ơn ', 'ths': u' cám ơn ', 'thank': u' cám ơn ', '^_^': 'tích cực', ':)': 'tích cực', ':(': 'tiêu cực', '❤️': 'tích cực', '👍': 'tích cực', '🎉': 'tích cực', '😀': 'tích cực', '😍': 'tích cực', '😂': 'tích cực', '🤗': 'tích cực', '😙': 'tích cực', '🙂': 'tích cực', '😔': 'tiêu cực', '😓': 'tiêu cực', '⭐': 'star', '*': 'star', '🌟': 'star','kg ': u' không ','not': u' không ', u' kg ': u' không ', '"k ': u' không ',' kh ':u' không ','kô':u' không ','hok':u' không ',' kp ': u' không phải ', u' kô ': u' không ', '"ko ': u' không ', u' ko ': u' không ', u' k ': u' không ', 'khong': u' không ', u' hok ': u' không ','he he': ' tích cực ','hehe': ' tích cực ', 'hihi': ' tích cực ', 'haha': ' tích cực ', 'hjhj': ' tích cực ',' lol ': ' tiêu cực ', ' cc ': ' tiêu cực ','cute': u' dễ thương ','huhu': ' tiêu cực ', ' vs ': u' với ', 'wa': ' quá ', 'wá': u' quá', 'j': u' gì ', '“': ' ', ' sz ': u' cỡ ', 'size': u' cỡ ', u' đx ': u' được ', 'dk': u' được ', 'dc': u' được ', 'đk': u' được ', 'đc': u' được ','authentic': u' chuẩn chính hãng ',u' aut ': u' chuẩn chính hãng ', u' auth ': u' chuẩn chính hãng ', 'thick': u' tích cực ', 'store': u' cửa hàng ', 'shop': u' cửa hàng ', 'sp': u' sản phẩm ', 'gud': u' tốt ','god': u' tốt ','wel done':' tốt ', 'good': u' tốt ', 'gút': u' tốt ', 'sấu': u' xấu ','gut': u' tốt ', u' tot ': u' tốt ', u' nice ': u' tốt ', 'perfect': 'rất tốt', 'bt': u' bình thường ', 'time': u' thời gian ', 'qá': u' quá ', u' ship ': u' giao hàng ', u' m ': u' mình ', u' mik ': u' mình ', 'ể': 'ể', 'product': 'sản phẩm', 'quality': 'chất lượng','chat':' chất ', 'excelent': 'hoàn hảo', 'bad': 'tệ','fresh': ' tươi ','sad': ' tệ ', 'date': u' hạn sử dụng ', 'hsd': u' hạn sử dụng ','quickly': u' nhanh ', 'quick': u' nhanh ','fast': u' nhanh ','delivery': u' giao hàng ',u' síp ': u' giao hàng ', 'beautiful': u' đẹp tuyệt vời ', u' tl ': u' trả lời ', u' r ': u' rồi ', u' shopE ': u' cửa hàng ',u' order ': u' đặt hàng ', 'chất lg': u' chất lượng ',u' sd ': u' sử dụng ',u' dt ': u' điện thoại ',u' nt ': u' nhắn tin ',u' tl ': u' trả lời ',u' sài ': u' xài ',u'bjo':u' bao giờ ', 'thik': u' thích ',u' sop ': u' cửa hàng ', ' fb ': ' facebook ', ' face ': ' facebook ', ' very ': u' rất ',u'quả ng ':u' quảng ', 'dep': u' đẹp ',u' xau ': u' xấu ','delicious': u' ngon ', u'hàg': u' hàng ', u'qủa': u' quả ', 'iu': u' yêu ','fake': u' giả mạo ', 'trl': 'trả lời', '><': u' tích cực ', " view ": " tầm nhìn ", ' por ': u' tệ ',' poor ': u' tệ ', 'ib':u' nhắn tin ', 'rep':u' trả lời ',u'fback':' feedback ','fedback':' feedback ' } for k, v in replace_list.items(): text = text.replace(k, v) return text def normalize(sent): result = normalize_hastag(sent) result = normalize_website(result) result = normalize_HTML(result) result = normalize_acronyms(result) result = normalize_emoji(result) result = result.lower() result = normalize_time(result) result = normalize_money(result) result = normalize_elongate(result) result = normalize_acronyms(result) result = remove_number(result) result = remove_punct(result) result = result.replace(",.", ".") result = re.sub(r'\\s+', ' ', result).strip() # Remove extra whitespace return result def tokenize(sent, f): return f(sent)