demo-asbvn / bartpho /preprocess.py
hHoai's picture
bart_asbvn
bfec79b verified
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)