-
Notifications
You must be signed in to change notification settings - Fork 48
/
utils.py
33 lines (28 loc) · 1.28 KB
/
utils.py
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
import string
from underthesea import word_tokenize
import os
import json
number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
chars = ["a", "b", "c", "d", "đ", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o"]
stop_word = number + chars + ["của", "và", "các", "có", "được", "theo", "tại", "trong", "về",
"hoặc", "người", "này", "khoản", "cho", "không", "từ", "phải",
"ngày", "việc", "sau", "để", "đến", "bộ", "với", "là", "năm",
"khi", "số", "trên", "khác", "đã", "thì", "thuộc", "điểm", "đồng",
"do", "một", "bị", "vào", "lại", "ở", "nếu", "làm", "đây",
"như", "đó", "mà", "nơi", "”", "“"]
def remove_stopword(w):
return w not in stop_word
def remove_punctuation(w):
return w not in string.punctuation
def lower_case(w):
return w.lower()
def bm25_tokenizer(text):
tokens = word_tokenize(text)
tokens = list(map(lower_case, tokens))
tokens = list(filter(remove_punctuation, tokens))
tokens = list(filter(remove_stopword, tokens))
return tokens
def calculate_f2(precision, recall):
return (5 * precision * recall) / (4 * precision + recall + 1e-20)
def load_json(path):
return json.load(open(path))