diff --git a/app/Article.py b/app/Article.py index d5e63cd..df9ac3a 100644 --- a/app/Article.py +++ b/app/Article.py @@ -22,12 +22,12 @@ def total_number_of_essays(): return len(result) -def get_article_title(article): - return article.split('\n')[0] +def get_article_title(s): + return s.split('\n')[0] -def get_article_body(article): - lst = article.split('\n') +def get_article_body(s): + lst = s.split('\n') lst.pop(0) # remove the first line return '\n'.join(lst) @@ -111,11 +111,11 @@ def within_range(x, y, r): return x > y and abs(x - y) <= r -def get_question_part(article): - article = article.strip() +def get_question_part(s): + s = s.strip() result = [] flag = 0 - for line in article.split('\n'): + for line in s.split('\n'): line = line.strip() if line == 'QUESTION': result.append(line) @@ -127,11 +127,11 @@ def get_question_part(article): return '\n'.join(result) -def get_answer_part(article): - article = article.strip() +def get_answer_part(s): + s = s.strip() result = [] flag = 0 - for line in article.split('\n'): + for line in s.split('\n'): line = line.strip() if line == 'ANSWER': flag = 1 diff --git a/app/Login.py b/app/Login.py index 2e2cecd..cd750d1 100644 --- a/app/Login.py +++ b/app/Login.py @@ -3,7 +3,6 @@ import string from datetime import datetime, timedelta from UseSqlite import InsertQuery, RecordQuery - def md5(s): ''' MD5摘要 @@ -13,16 +12,14 @@ def md5(s): h = hashlib.md5(s.encode(encoding='utf-8')) return h.hexdigest() - # import model.user after the defination of md5(s) to avoid circular import from model.user import get_user_by_username, insert_user, update_password_by_username path_prefix = '/var/www/wordfreq/wordfreq/' path_prefix = './' # comment this line in deployment - -def verify_pass(new_password, old_password): - if new_password == old_password: +def verify_pass(newpass,oldpass): + if(newpass==oldpass): return True @@ -56,7 +53,7 @@ def change_password(username, old_password, new_password): if not verify_user(username, old_password): # 旧密码错误 return False # 将用户名和密码一起加密,以免暴露不同用户的相同密码 - if verify_pass(new_password, old_password): #新旧密码一致 + if verify_pass(new_password,old_password): #新旧密码一致 return False update_password_by_username(username, new_password) return True @@ -76,11 +73,11 @@ class UserName: def validate(self): if len(self.username) > 20: return f'{self.username} is too long. The user name cannot exceed 20 characters.' - if self.username.startswith('.'): # a user name must not start with a dot + if self.username.startswith('.'): # a user name must not start with a dot return 'Period (.) is not allowed as the first letter in the user name.' - if ' ' in self.username: # a user name must not include a whitespace + if ' ' in self.username: # a user name must not include a whitespace return 'Whitespace is not allowed in the user name.' - for c in self.username: # a user name must not include special characters, except non-leading periods or underscores + for c in self.username: # a user name must not include special characters, except non-leading periods or underscores if c in string.punctuation and c != '.' and c != '_': return f'{c} is not allowed in the user name.' if self.username in ['signup', 'login', 'logout', 'reset', 'mark', 'back', 'unfamiliar', 'familiar', 'del', 'admin']: diff --git a/app/account_service.py b/app/account_service.py index 7259e15..a7ed0c4 100644 --- a/app/account_service.py +++ b/app/account_service.py @@ -43,6 +43,7 @@ def signup(): return jsonify({'status': '1'}) + @accountService.route("/login", methods=['GET', 'POST']) def login(): ''' diff --git a/app/difficulty.py b/app/difficulty.py index 03d3bfa..cb93768 100644 --- a/app/difficulty.py +++ b/app/difficulty.py @@ -18,25 +18,25 @@ def load_record(pickle_fname): return d -def convert_test_type_to_difficulty_level(words_dict): +def convert_test_type_to_difficulty_level(d): """ 对原本的单词库中的单词进行难度评级 - :param words_dict: 存储了单词库pickle文件中的单词的字典 + :param d: 存储了单词库pickle文件中的单词的字典 :return: """ result = {} - words_lst = list(words_dict.keys()) # in words_dict, we have test types (e.g., CET4,CET6,BBC) for each word + L = list(d.keys()) # in d, we have test types (e.g., CET4,CET6,BBC) for each word - for k in words_lst: - if 'CET4' in words_dict[k]: + for k in L: + if 'CET4' in d[k]: result[k] = 4 # CET4 word has level 4 - elif 'OXFORD3000' in words_dict[k]: + elif 'OXFORD3000' in d[k]: result[k] = 5 - elif 'CET6' in words_dict[k] or 'GRADUATE' in words_dict[k]: + elif 'CET6' in d[k] or 'GRADUATE' in d[k]: result[k] = 6 - elif 'OXFORD5000' in words_dict[k] or 'IELTS' in words_dict[k]: + elif 'OXFORD5000' in d[k] or 'IELTS' in d[k]: result[k] = 7 - elif 'BBC' in words_dict[k]: + elif 'BBC' in d[k]: result[k] = 8 return result # {'apple': 4, ...} diff --git a/app/main.py b/app/main.py index 6308f3d..4e3f829 100644 --- a/app/main.py +++ b/app/main.py @@ -63,7 +63,7 @@ def mark_word(): ''' if request.method == 'POST': d = load_freq_history(path_prefix + 'static/frequency/frequency.p') - lst_history = pickle_idea.dict_to_lst(d) + lst_history = pickle_idea.dict2lst(d) lst = [] for word in request.form.getlist('marked'): lst.append((word, 1)) @@ -86,7 +86,7 @@ def mainpage(): lst = f.get_freq() # save history d = load_freq_history(path_prefix + 'static/frequency/frequency.p') - lst_history = pickle_idea.dict_to_lst(d) + lst_history = pickle_idea.dict2lst(d) d = pickle_idea.merge_frequency(lst, lst_history) pickle_idea.save_frequency_to_pickle(d, path_prefix + 'static/frequency/frequency.p') return render_template('mainpage_post.html', lst=lst, yml=Yaml.yml) @@ -96,8 +96,8 @@ def mainpage(): number_of_essays = total_number_of_essays() d = load_freq_history(path_prefix + 'static/frequency/frequency.p') d_len = len(d) - lst = sort_in_descending_order(pickle_idea.dict_to_lst(d)) - return render_template('mainpage_get.html', + lst = sort_in_descending_order(pickle_idea.dict2lst(d)) + return render_template('mainpage_get.html', admin_name=ADMIN_NAME, random_ads=random_ads, d_len=d_len, diff --git a/app/pickle_idea.py b/app/pickle_idea.py index 4f193ff..45bd19a 100644 --- a/app/pickle_idea.py +++ b/app/pickle_idea.py @@ -10,7 +10,7 @@ import pickle from datetime import datetime -def lst_to_dict(lst, d): +def lst2dict(lst, d): ''' Store the information in list lst to dictionary d. Note: nothing is returned. @@ -25,14 +25,14 @@ def lst_to_dict(lst, d): d[word] += freq -def dict_to_lst(d): - return list(d.items()) # a list of (key, value) pairs +def dict2lst(d): + return list(d.items()) # a list of (key, value) pairs -def merge_frequency(list1, list2): +def merge_frequency(lst1, lst2): d = {} - lst_to_dict(list1, d) - lst_to_dict(list2, d) + lst2dict(lst1, d) + lst2dict(lst2, d) return d @@ -54,35 +54,33 @@ def save_frequency_to_pickle(d, pickle_fname): pickle.dump(d2, f) f.close() - -def unfamiliar(path, word): - f = open(path, "rb") +def unfamiliar(path,word): + f = open(path,"rb") dic = pickle.load(f) dic[word] += [datetime.now().strftime('%Y%m%d%H%M')] - fp = open(path, "wb") - pickle.dump(dic, fp) + fp = open(path,"wb") + pickle.dump(dic,fp) - -def familiar(path, word): - f = open(path, "rb") +def familiar(path,word): + f = open(path,"rb") dic = pickle.load(f) - if len(dic[word]) > 1: + if len(dic[word])>1: del dic[word][0] else: dic.pop(word) - fp = open(path, "wb") - pickle.dump(dic, fp) + fp = open(path,"wb") + pickle.dump(dic,fp) if __name__ == '__main__': lst1 = [('apple',2), ('banana',1)] d = {} - lst_to_dict(lst1, d) # d will change + lst2dict(lst1, d) # d will change save_frequency_to_pickle(d, 'frequency.p') # frequency.p is our database lst2 = [('banana',2), ('orange', 4)] d = load_record('frequency.p') - lst1 = dict_to_lst(d) + lst1 = dict2lst(d) d = merge_frequency(lst2, lst1) print(d) diff --git a/app/pickle_idea2.py b/app/pickle_idea2.py index f3104a5..0da55bc 100644 --- a/app/pickle_idea2.py +++ b/app/pickle_idea2.py @@ -11,7 +11,6 @@ import pickle from datetime import datetime - def lst2dict(lst, d): ''' Store the information in list lst to dictionary d. @@ -26,8 +25,7 @@ def lst2dict(lst, d): else: d[word] += dates - -def deleteRecord(path, word): +def deleteRecord(path,word): with open(path, 'rb') as f: db = pickle.load(f) try: diff --git a/app/user_service.py b/app/user_service.py index 75971a6..2e5feed 100644 --- a/app/user_service.py +++ b/app/user_service.py @@ -93,7 +93,7 @@ def familiar(username, word): @userService.route("///del", methods=['GET', 'POST']) -def delete_word(username, word): +def deleteword(username, word): ''' 删除单词 :param username: 用户名 @@ -181,7 +181,6 @@ def user_mark_word(username): else: return 'Under construction' - def get_time(): ''' 获取当前时间 diff --git a/app/wordfreqCMD.py b/app/wordfreqCMD.py index 69065d6..e56ba0c 100644 --- a/app/wordfreqCMD.py +++ b/app/wordfreqCMD.py @@ -6,11 +6,10 @@ import collections import string import operator -import os, sys # 引入模块sys,因为我要用里面的sys.argv列表中的信息来读取命令行参数。 +import os, sys # 引入模块sys,因为我要用里面的sys.argv列表中的信息来读取命令行参数。 import pickle_idea - -def freq(s): +def freq(fruit): ''' 功能: 把字符串转成列表。 目的是得到每个单词的频率。 输入: 字符串 @@ -19,53 +18,54 @@ def freq(s): ''' result = [] - s = s.lower() # 字母转小写 - word_lst = s.split() # 字符串转成list - c = collections.Counter(word_lst) + + fruit = fruit.lower() # 字母转小写 + flst = fruit.split() # 字符串转成list + c = collections.Counter(flst) result = c.most_common() return result -def youdao_link(word): # 有道链接 - link = 'http://youdao.com/w/eng/' + word + '/#keyfrom=dict2.index' # 网址 +def youdao_link(s): # 有道链接 + link = 'http://youdao.com/w/eng/' + s + '/#keyfrom=dict2.index'# 网址 return link -def file_to_str(f_name): # 文件转字符 - f = open(f_name) # 打开 - f_str = f.read() # 读取 - f.close() # 关闭 - return f_str +def file2str(fname):#文件转字符 + f = open(fname) #打开 + s = f.read() #读取 + f.close() #关闭 + return s -def remove_punctuation(s): # 这里是words_text是形参 (parameter)。函数被调用时才给words_text赋值。 - special_characters = '\_©~<=>+-/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 +def remove_punctuation(s): # 这里是s是形参 (parameter)。函数被调用时才给s赋值。 + special_characters = '\_©~<=>+-/[]*&$%^@.,?!:;#()"“”—‘’{}|' # 把里面的字符都去掉 for c in special_characters: - s = s.replace(c, ' ') # 防止出现把 apple,apple 移掉逗号后变成 appleapple 情况 + s = s.replace(c, ' ') # 防止出现把 apple,apple 移掉逗号后变成 appleapple 情况 s = s.replace('--', ' ') - s = s.strip() # 去除前后的空格 - + s = s.strip() # 去除前后的空格 + if '\'' in s: n = len(s) - characters = '' # 用来收集我需要保留的字符 - for i in range(n): # 只有单引号前后都有英文字符,才保留 + t = '' # 用来收集我需要保留的字符 + for i in range(n): # 只有单引号前后都有英文字符,才保留 if s[i] == '\'': i_is_ok = i - 1 >= 0 and i + 1 < n - if i_is_ok and s[i - 1] in string.ascii_letters and s[i + 1] in string.ascii_letters: - characters += s[i] + if i_is_ok and s[i-1] in string.ascii_letters and s[i+1] in string.ascii_letters: + t += s[i] else: - characters += s[i] - return characters + t += s[i] + return t else: return s -def sort_in_descending_order(lst): # 单词按频率降序排列 +def sort_in_descending_order(lst):# 单词按频率降序排列 lst2 = sorted(lst, reverse=True, key=lambda x: (x[1], x[0])) return lst2 -def sort_in_ascending_order(lst): # 单词按频率降序排列 +def sort_in_ascending_order(lst):# 单词按频率降序排列 lst2 = sorted(lst, reverse=False, key=lambda x: (x[1], x[0])) return lst2 @@ -89,22 +89,22 @@ def make_html_page(lst, fname): # 只是在wordfreqCMD.py中的main函数中调 if __name__ == '__main__': num = len(sys.argv) - if num == 1: # 从键盘读入字符串 + if num == 1: # 从键盘读入字符串 s = input() - elif num == 2: # 从文件读入字符串 + elif num == 2: # 从文件读入字符串 fname = sys.argv[1] - s = file_to_str(fname) + s = file2str(fname) else: print('I can accept at most 2 arguments.') - sys.exit() # 结束程序运行, 下面的代码不会被执行了。 + sys.exit()# 结束程序运行, 下面的代码不会被执行了。 - s = remove_punctuation(s) # 这里是s是实参(argument),里面有值 + s = remove_punctuation(s) # 这里是s是实参(argument),里面有值 L = freq(s) for x in sort_in_descending_order(L): - print('%s\t%d\t%s' % (x[0], x[1], youdao_link(x[0]))) # 函数导出 + print('%s\t%d\t%s' % (x[0], x[1], youdao_link(x[0])))#函数导出 # 把频率的结果放result.html中 - make_html_page(sort_in_descending_order(L), 'result.html') + make_html_page(sort_in_descending_order(L), 'result.html') print('\nHistory:\n') if os.path.exists('frequency.p'): @@ -112,9 +112,12 @@ if __name__ == '__main__': else: d = {} - print(sort_in_descending_order(pickle_idea.dict_to_lst(d))) + print(sort_in_descending_order(pickle_idea.dict2lst(d))) # 合并频率 - lst_history = pickle_idea.dict_to_lst(d) + lst_history = pickle_idea.dict2lst(d) d = pickle_idea.merge_frequency(L, lst_history) pickle_idea.save_frequency_to_pickle(d, 'frequency.p') + + + diff --git a/requirements.txt b/requirements.txt index 2210969..338b71c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Flask==2.2.3 +Flask==1.1.2 selenium==3.141.0 PyYAML~=6.0 pony==0.7.16