File size: 5,659 Bytes
bfec79b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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)