0
0
Fork 0

WIP:[REFACTOR]:main.py,create_clozeTest.py:重构

Bug428-LouJiCheng
stfujnkk 2022-06-14 22:01:44 +08:00
parent 0117470ab5
commit 9d5175d0a6
2 changed files with 26 additions and 17 deletions

View File

@ -1,7 +1,9 @@
import random import random
import sqlite3,re import sqlite3
import re
from nltk.corpus import wordnet as wn from nltk.corpus import wordnet as wn
class Essay: class Essay:
def __init__(self): def __init__(self):
self._article_id = 0 self._article_id = 0
@ -16,18 +18,19 @@ class Essay:
pass pass
@article_id.setter @article_id.setter
def article_id(self,article_id): def article_id(self, article_id):
self._article_id = article_id self._article_id = article_id
self.find_essay_in_database(self._article_id) self.find_essay_in_database(self._article_id)
#获取数据库中的文章和等级 # 获取数据库中的文章和等级
def find_essay_in_database(self,id): def find_essay_in_database(self, id):
try: try:
# 连接数据库 # 连接数据库
conn = sqlite3.connect("static/wordfreqapp.db") conn = sqlite3.connect("static/wordfreqapp.db")
# 创建游标 # 创建游标
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute("select text,level from article where article_id = "+str(id)) cursor.execute(
"select text,level from article where article_id = "+str(id))
results = cursor.fetchall() results = cursor.fetchall()
conn.commit() conn.commit()
cursor.close() cursor.close()
@ -38,14 +41,14 @@ class Essay:
except Exception as e: except Exception as e:
print(e) print(e)
#将文章分割成单词列表 # 将文章分割成单词列表
def split_essay_to_word(self): def split_essay_to_word(self):
article = "".join(self._essay) article = "".join(self._essay)
words = re.split(r"\b[\.,\s\n\r\n\$\']+?\b", article) words = re.split(r"\b[\.,\s\n\r\n\$\']+?\b", article)
word_list = [word.lower() for word in words] word_list = [word.lower() for word in words]
return word_list return word_list
#从数据库中查找和文章难度相同的单词 # 从数据库中查找和文章难度相同的单词
def find_same_difficulty_words(self): def find_same_difficulty_words(self):
result_list = [] result_list = []
try: try:
@ -53,7 +56,8 @@ class Essay:
conn = sqlite3.connect("static/wordfreqapp.db") conn = sqlite3.connect("static/wordfreqapp.db")
# 创建游标 # 创建游标
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute("select word from words where difficulty = " + str(self._difficulty)) cursor.execute(
"select word from words where difficulty = " + str(self._difficulty))
results = cursor.fetchall() results = cursor.fetchall()
conn.commit() conn.commit()
cursor.close() cursor.close()
@ -65,16 +69,16 @@ class Essay:
except Exception as e: except Exception as e:
print(e) print(e)
#获取单词的近义词 # 获取单词的近义词
def get_word_synsets(self,word): def get_word_synsets(self, word):
synsets_set = wn.synsets(word) synsets_set = wn.synsets(word)
synset_list = [] synset_list = []
for synset in synsets_set: for synset in synsets_set:
synset_list.append(synset.name().split(".")[0]) synset_list.append(synset.name().split(".")[0])
return synset_list return synset_list
#生成完形填空 # 生成完形填空
def create_clozeTest(self,essay): def create_clozeTest(self, essay):
essay.article_id = self._article_id essay.article_id = self._article_id
word = [] # 存放文章中含有的与文章难度相同的单词 word = [] # 存放文章中含有的与文章难度相同的单词
answers = [] # 存放正确答案 answers = [] # 存放正确答案
@ -82,26 +86,27 @@ class Essay:
database_words = essay.find_same_difficulty_words() database_words = essay.find_same_difficulty_words()
essay_words = essay.split_essay_to_word() essay_words = essay.split_essay_to_word()
# 寻找文章中与文章难度相同的单词存入word[]中
for essay_word in essay_words: for essay_word in essay_words:
if database_words.__contains__(essay_word) and essay_word not in word: if database_words.__contains__(essay_word) and essay_word not in word:
word.append(essay_word) word.append(essay_word)
# 给出因文章内容太少的问题导致题目少于10个的情况
if len(word) <= 10: if len(word) <= 10:
answers = word answers = word
else: else: # 将找出来的单词作为正确答案存入answers[]中
for i in range(0, 10): for i in range(0, 10):
w = word[random.randint(0, len(word) - 1)] w = word[random.randint(0, len(word) - 1)]
if not answers.__contains__(w): if not answers.__contains__(w):
answers.append(w) answers.append(w)
self._answers = answers self._answers = answers
# 用题号来替换文章中的单词
No = 1 No = 1
for answer in answers: for answer in answers:
questions.append(list(answer.split(","))) questions.append(list(answer.split(",")))
self._essay = self._essay.replace(answer,'('+str(No)+')____', 1) self._essay = self._essay.replace(answer, '('+str(No)+')____', 1)
No += 1 No += 1
# 生成每道题目的四个选项
for question in questions: for question in questions:
synset = list(set(essay.get_word_synsets(question[0]))) synset = list(set(essay.get_word_synsets(question[0])))
if len(synset) == 0 or len(synset) == 1: if len(synset) == 0 or len(synset) == 1:

View File

@ -109,6 +109,10 @@ essay = Essay()
@app.route('/gocloze', methods=['GET', 'POST']) @app.route('/gocloze', methods=['GET', 'POST'])
def go_ClozeTest(): def go_ClozeTest():
'''
根据GET或POST方法来分别返回答题前后的完型填空界面
:return: 完型填空界面
'''
if request.method == 'GET': if request.method == 'GET':
essay._article_id += 1 essay._article_id += 1
essay.create_clozeTest(essay) essay.create_clozeTest(essay)