|
from imports import * |
|
import unicodedata |
|
rdrsegmenter = VnCoreNLP("./vncorenlp_segmenter/VnCoreNLP-1.1.1.jar", annotators="wseg", max_heap_size='-Xmx500m') |
|
dict_map = { |
|
"òa": "oà", |
|
"Òa": "Oà", |
|
"ÒA": "OÀ", |
|
"óa": "oá", |
|
"Óa": "Oá", |
|
"ÓA": "OÁ", |
|
"ỏa": "oả", |
|
"Ỏa": "Oả", |
|
"ỎA": "OẢ", |
|
"õa": "oã", |
|
"Õa": "Oã", |
|
"ÕA": "OÃ", |
|
"ọa": "oạ", |
|
"Ọa": "Oạ", |
|
"ỌA": "OẠ", |
|
"òe": "oè", |
|
"Òe": "Oè", |
|
"ÒE": "OÈ", |
|
"óe": "oé", |
|
"Óe": "Oé", |
|
"ÓE": "OÉ", |
|
"ỏe": "oẻ", |
|
"Ỏe": "Oẻ", |
|
"ỎE": "OẺ", |
|
"õe": "oẽ", |
|
"Õe": "Oẽ", |
|
"ÕE": "OẼ", |
|
"ọe": "oẹ", |
|
"Ọe": "Oẹ", |
|
"ỌE": "OẸ", |
|
"ùy": "uỳ", |
|
"Ùy": "Uỳ", |
|
"ÙY": "UỲ", |
|
"úy": "uý", |
|
"Úy": "Uý", |
|
"ÚY": "UÝ", |
|
"ủy": "uỷ", |
|
"Ủy": "Uỷ", |
|
"ỦY": "UỶ", |
|
"ũy": "uỹ", |
|
"Ũy": "Uỹ", |
|
"ŨY": "UỸ", |
|
"ụy": "uỵ", |
|
"Ụy": "Uỵ", |
|
"ỤY": "UỴ", |
|
} |
|
|
|
|
|
def replace_all(text, dict_map=dict_map): |
|
for i, j in dict_map.items(): |
|
text = unicodedata.normalize('NFC',str(text)).replace(i, j) |
|
return text |
|
def normalize(text, segment=True): |
|
text = replace_all(text, dict_map) |
|
if segment: |
|
text = ' '.join([' '.join(sent) for sent in rdrsegmenter.tokenize(text)]) |
|
return text |
|
def text_preprocess(document): |
|
punc = [i for i in ["\"", "-", ".", ":"]] |
|
stopword = [" thì ", " được ", " có ", " là "] |
|
acronyms = {" wfh": " làm việc tại nhà ", " ot": " làm tăng ca ", " team": " nhóm ", " pm": " quản lý dự án ", " flexible": " linh động ", |
|
" office": " văn phòng ", " feedback": " phản hồi ", " cty": " công ty ", " hr": " tuyển dụng ", " effective": " hiệu quả ", |
|
" suggest": " gợi ý ", " hong": " không ", " ko": " không ", " vp": " văn phòng ", " plan ": " kế hoạch ", " planning": " lên kế hoạch ", |
|
" family": " gia đình ", " leaders": " trưởng nhóm ", " leader": " trưởng nhóm ", ",": " , "} |
|
|
|
document = re.sub(r"\n"," . ", document) |
|
document = re.sub(r"\t"," ", document) |
|
document = re.sub(r"\r","", document) |
|
for p in punc: |
|
document = document.replace(p," ") |
|
for acr in acronyms: |
|
tmp = [acr, acr.upper(), acr[0].upper()+acr[1:]] |
|
for j in tmp: |
|
document = re.sub(j, acronyms[acr], document) |
|
|
|
for sw in stopword: |
|
document = re.sub(sw, " ", document) |
|
|
|
document = re.sub(" ", " ", document) |
|
document = re.sub(" ", " ", document) |
|
try: |
|
document = ' '.join(rdrsegmenter.tokenize(document)[0]) |
|
except: |
|
pass |
|
return document.lower() |
|
|
|
|
|
def compute_metrics(pred): |
|
labels = pred.label_ids |
|
preds = pred.predictions.argmax(-1) |
|
f1 = f1_score(labels, preds, average="weighted") |
|
acc = accuracy_score(labels, preds) |
|
return {"accuracy": acc, "f1": f1} |
|
|
|
|
|
|
|
def convert2cls(data, mb, cls_class): |
|
data = list(set(data)) |
|
try: |
|
data.remove(20) |
|
except: |
|
pass |
|
for i, num in enumerate(data): |
|
if num>=10: |
|
data[i] -= 10 |
|
data[i] = cls_class[data[i]] |
|
data = mb.transform([data])[0] |
|
return list(data) |
|
|