|
import re, string
|
|
|
|
|
|
def normalText(sent):
|
|
|
|
replace_list = {
|
|
'òa': 'oà', 'óa': 'oá', 'ỏa': 'oả', 'õa': 'oã', 'ọa': 'oạ', 'òe': 'oè', 'óe': 'oé','ỏe': 'oẻ',
|
|
'õe': 'oẽ', 'ọe': 'oẹ', 'ùy': 'uỳ', 'úy': 'uý', 'ủy': 'uỷ', 'ũy': 'uỹ','ụy': 'uỵ', 'uả': 'ủa',
|
|
'ả': 'ả', 'ố': 'ố', 'u´': 'ố','ỗ': 'ỗ', 'ồ': 'ồ', 'ổ': 'ổ', 'ấ': 'ấ', 'ẫ': 'ẫ', 'ẩ': 'ẩ',
|
|
'ầ': 'ầ', 'ỏ': 'ỏ', 'ề': 'ề','ễ': 'ễ', 'ắ': 'ắ', 'ủ': 'ủ', 'ế': 'ế', 'ở': 'ở', 'ỉ': 'ỉ',
|
|
'ẻ': 'ẻ', 'àk': u' à ','aˋ': 'à', 'iˋ': 'ì', 'ă´': 'ắ','ử': 'ử', 'e˜': 'ẽ', 'y˜': 'ỹ', 'a´': 'á',
|
|
|
|
|
|
"😊": "Vui vẻ", "😁": "Vui vẻ", "😃": "Vui vẻ", "😄": "Vui vẻ",
|
|
"😆": "Vui vẻ", "🤣": "Vui vẻ", "😹": "Vui vẻ", "😍": "Vui vẻ",
|
|
"😘": "Vui vẻ", "😙": "Vui vẻ", "😚": "Vui vẻ", "😋": "Vui vẻ",
|
|
"😛": "Vui vẻ", "😜": "Vui vẻ", "🤪": "Vui vẻ", "🤗": "Vui vẻ",
|
|
"😎": "Vui vẻ", "🙂": "Vui vẻ", "💃": "Vui vẻ", "🕺": "Vui vẻ",
|
|
"💖": "Vui vẻ", "💞": "Vui vẻ", "💗": "Vui vẻ", "💕": "Vui vẻ",
|
|
"💓": "Vui vẻ", "❤️": "Vui vẻ", "❤": "Vui vẻ", "♥": "Vui vẻ",
|
|
"💜": "Vui vẻ", "💙": "Vui vẻ", "💚": "Vui vẻ", "💛": "Vui vẻ",
|
|
"💘": "Vui vẻ", "✨": "Vui vẻ", "🎉": "Vui vẻ", "🌟": "Vui vẻ",
|
|
"🌸": "Vui vẻ", "🌺": "Vui vẻ", "🌼": "Vui vẻ", "😇": "Vui vẻ",
|
|
|
|
|
|
"😢": "Buồn bã", "😭": "Buồn bã", "😞": "Buồn bã", "😔": "Buồn bã",
|
|
"😟": "Buồn bã", "😿": "Buồn bã", "😩": "Buồn bã", "😫": "Buồn bã",
|
|
"😓": "Buồn bã", "😥": "Buồn bã", "☹": "Buồn bã", "🙁": "Buồn bã",
|
|
"😰": "Buồn bã", "😪": "Buồn bã", "😕": "Buồn bã",
|
|
|
|
|
|
"😡": "Tức giận", "😠": "Tức giận", "🤬": "Tức giận", "👿": "Tức giận", "💢": "Tức giận",
|
|
"😤": "Tức giận", "😾": "Tức giận", "🚫": "Tức giận",
|
|
|
|
|
|
"😲": "Ngạc nhiên", "😯": "Ngạc nhiên", "😮": "Ngạc nhiên", "😳": "Ngạc nhiên",
|
|
"😱": "Ngạc nhiên", "🤯": "Ngạc nhiên", "😵": "Ngạc nhiên",
|
|
|
|
|
|
"😨": "Sợ hãi", "😰": "Sợ hãi", "😖": "Sợ hãi", "😬": "Sợ hãi", "😧": "Sợ hãi",
|
|
"😷": "Sợ hãi", "👻": "Sợ hãi", "😱": "Sợ hãi",
|
|
|
|
|
|
"🤢": "Kinh tởm", "🤮": "Kinh tởm", "💩": "Kinh tởm", "😒": "Kinh tởm",
|
|
"😑": "Kinh tởm", "😣": "Kinh tởm", "😠": "Kinh tởm", "👎": "Kinh tởm",
|
|
|
|
|
|
"🤔": "Khác", "😐": "Khác", "🤨": "Khác", "😶": "Khác",
|
|
"🙃": "Khác", "😏": "Khác", "🧐": "Khác", "😌": "Khác",
|
|
"💀": "Khác", "🔥": "Khác", "?": "Khác", "…": "Khác",
|
|
|
|
|
|
|
|
':))': ' positive ', ':)': ' positive ', 'ô 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 ',
|
|
'⭐': 'star ', '*': 'star ', '🌟': 'star ', '🎉': u' positive ',
|
|
'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': ' positive ','hehe': ' positive ','hihi': ' positive ', 'haha': ' positive ', 'hjhj': ' positive ',
|
|
' lol ': ' negative ',' cc ': ' negative ','cute': u' dễ thương ','huhu': ' negative ', ' 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' positive ', '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' positive ',
|
|
' por ': u' tệ ',' poor ': u' tệ ', 'ib':u' nhắn tin ', 'rep':u' trả lời ',u'fback':' feedback ','fedback':' feedback ',
|
|
|
|
'6 sao': ' 5star ','6 star': ' 5star ', '5star': ' 5star ','5 sao': ' 5star ','5sao': ' 5star ',
|
|
'starstarstarstarstar': ' 5star ', '1 sao': ' 1star ', '1sao': ' 1star ','2 sao':' 1star ','2sao':' 1star ',
|
|
'2 starstar':' 1star ','1star': ' 1star ', '0 sao': ' 1star ', '0star': ' 1star ',}
|
|
sent = sent.lower()
|
|
for k, v in replace_list.items():
|
|
sent = sent.replace(k, v)
|
|
|
|
|
|
sent = str(sent).replace('_',' ').replace('/',' trên ')
|
|
sent = re.sub('-{2,}','',sent)
|
|
sent = re.sub('\\s+',' ', sent)
|
|
patPrice = r'([0-9]+k?(\s?-\s?)[0-9]+\s?(k|K))|([0-9]+(.|,)?[0-9]+\s?(triệu|ngàn|trăm|k|K|))|([0-9]+(.[0-9]+)?Ä‘)|([0-9]+k)'
|
|
patHagTag = r'#\s?[aăâbcdđeêghiklmnoôơpqrstuưvxyàằầbcdđèềghìklmnòồờpqrstùừvxỳáắấbcdđéếghíklmnóốớpqrstúứvxýảẳẩbcdđẻểghỉklmnỏổởpqrstủửvxỷạặậbcdđẹệghịklmnọộợpqrstụựvxỵãẵẫbcdđẽễghĩklmnõỗỡpqrstũữvxỹAĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXYÀẰẦBCDĐÈỀGHÌKLMNÒỒỜPQRSTÙỪVXỲÁẮẤBCDĐÉẾGHÍKLMNÓỐỚPQRSTÚỨVXÝẠẶẬBCDĐẸỆGHỊKLMNỌỘỢPQRSTỤỰVXỴẢẲẨBCDĐẺỂGHỈKLMNỎỔỞPQRSTỦỬVXỶÃẴẪBCDĐẼỄGHĨKLMNÕỖỠPQRSTŨỮVXỸ]+'
|
|
patURL = r"(?:http://|www.)[^\"]+"
|
|
sent = re.sub(patURL,'website',sent)
|
|
sent = re.sub(patHagTag,' hagtag ',sent)
|
|
sent = re.sub(patPrice, ' giá tiền ', sent)
|
|
sent = re.sub(r'\.+','.',sent)
|
|
sent = re.sub('(hagtag\\s+)+',' hagtag ',sent)
|
|
sent = re.sub('\\s+',' ',sent)
|
|
return sent
|
|
|
|
def deleteIcon(text):
|
|
text = text.lower()
|
|
s = ''
|
|
pattern = r"[a-zA-ZaăâbcdđeêghiklmnoôơpqrstuưvxyàằầbcdđèềghìklmnòồờpqrstùừvxỳáắấbcdđéếghíklmnóốớpqrstúứvxýảẳẩbcdđẻểghỉklmnỏổởpqrstủửvxỷạặậbcdđẹệghịklmnọộợpqrstụựvxỵãẵẫbcdđẽễghĩklmnõỗỡpqrstũữvxỹAĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXYÀẰẦBCDĐÈỀGHÌKLMNÒỒỜPQRSTÙỪVXỲÁẮẤBCDĐÉẾGHÍKLMNÓỐỚPQRSTÚỨVXÝẠẶẬBCDĐẸỆGHỊKLMNỌỘỢPQRSTỤỰVXỴẢẲẨBCDĐẺỂGHỈKLMNỎỔỞPQRSTỦỬVXỶÃẴẪBCDĐẼỄGHĨKLMNÕỖỠPQRSTŨỮVXỸ,._]"
|
|
|
|
for char in text:
|
|
if char !=' ':
|
|
if len(re.findall(pattern, char)) != 0:
|
|
s+=char
|
|
elif char == '_':
|
|
s+=char
|
|
else:
|
|
s+=char
|
|
s = re.sub('\\s+',' ',s)
|
|
return s.strip()
|
|
|
|
def normalize_elonge_word(sent):
|
|
s_new = ''
|
|
for word in sent.split(' '):
|
|
word_new = ' '
|
|
for char in word.strip():
|
|
if char != word_new[-1]:
|
|
word_new += char
|
|
s_new += word_new.strip() + ' '
|
|
return s_new.strip()
|
|
|
|
correct_mapping = {
|
|
"ship": "vận chuyển",
|
|
"shop": "cửa hàng",
|
|
"m": "mình",
|
|
"mik": "mình",
|
|
"ko": "không",
|
|
"k": " không ",
|
|
"kh": "không",
|
|
"khong": "không",
|
|
"kg": "không",
|
|
"khg": "không",
|
|
"tl": "trả lời",
|
|
"r": "rồi",
|
|
"fb": "mạng xã hội",
|
|
"face": "mạng xã hội",
|
|
"thanks": "cảm ơn",
|
|
"thank": "cảm ơn",
|
|
"tks": "cảm ơn",
|
|
"tk": "cảm ơn",
|
|
"ok": "tốt",
|
|
"dc": "được",
|
|
"vs": "với",
|
|
"đt": "điện thoại",
|
|
"thjk": "thích",
|
|
"qá": "quá",
|
|
"trể": "trễ",
|
|
"bgjo": "bao giờ",
|
|
"bùn": "buồn"
|
|
}
|
|
def tokmap(tok):
|
|
if tok.lower() in correct_mapping:
|
|
return correct_mapping[tok.lower()]
|
|
else:
|
|
return tok
|
|
|
|
|
|
def clean_doc(doc, lower_case=True, word_segment=True, max_length=256):
|
|
if not doc:
|
|
return ""
|
|
|
|
doc = normalText(doc)
|
|
|
|
|
|
doc = re.sub(r"\?", r" ? ", doc)
|
|
|
|
|
|
doc = re.sub(r"[0-9]+", " số ", doc)
|
|
|
|
|
|
doc = re.sub(r"\s+", " ", doc)
|
|
|
|
|
|
doc = normalize_elonge_word(doc)
|
|
|
|
|
|
if word_segment:
|
|
doc = doc.replace("giá _ tiền", "giá_tiền").replace("giátiền", "giá_tiền")
|
|
else:
|
|
doc = doc.replace("giá _ tiền", "giá tiền").replace("giátiền", "giá tiền")
|
|
|
|
|
|
doc = re.sub(r"\s+", " ", doc).strip()
|
|
|
|
|
|
tokens = map(tokmap, doc.split())
|
|
doc = " ".join(tokens)
|
|
|
|
|
|
array = doc.split()
|
|
if len(array) > max_length:
|
|
half = max_length // 2
|
|
doc = " ".join(array[:half] + array[-half:])
|
|
|
|
|
|
doc = doc.replace(". . .", ".")
|
|
|
|
return re.sub(r"\s+", " ", doc).strip()
|
|
|