Skip to content

Latest commit

 

History

History
217 lines (176 loc) · 10.3 KB

README.md

File metadata and controls

217 lines (176 loc) · 10.3 KB

SuperCT

一款基于 https://shishiapcs.github.io 的智能背单词APP



V3.2.1


📚开发以及参与者

  • 🎯TomLiu(主体代码编写以及领导者)
  • 📝SwordChen(文档生成模块编写,例句中单词匹配算法(正则))
  • 👨‍🏫Mr.Mou(指导)
  • 🕵️Carol(测试)
  • 🕵️Raymond(测试)
  • 🕵️Isaiah(测试)

💻 在本地部署

Notice:python版本>=3.10

步骤序号 部署步骤
1 下载源代码文件(.zip)或命令行执行git clone https://github.com/TomLiu-QianYuan/SuperCT.git
2 解压并在此路径中打开命令行
3 终端输入pip3 install -r requirements.txt
4 终端输入python -m streamlit run sample.py

🛠️ 技术栈

  • 📘Tom原创的例句中单词识别算法
  • 原创算法 :句子中寻找变形单词算法(三层递归结合大小写匹配以及字符串截断)( 该算法是搜罗全网代码最少的运行效率最高的效果最好的算法)
点击查看"replace_word_forms"by Tom
def delete_all_char(string: str,
                    s_char=None) -> str:
    if s_char is None:
        s_char = ['"', "'", '[', ']', '{', '}', "\\", '|', ";", ":", "<", ">", "`", "~"]
    for i in s_char:
        string = string.replace(i, '')
    return string


def replace_word_forms(sentence: str, base_word_: str):
    result = ''
    sentence = delete_all_char(sentence)
    for word in sentence.split(" "):
        if str(word).lower().startswith(base_word_.lower()) and len(word) - len(base_word_) <= 5:
            return sentence.replace(word, 6 * "_")
    if base_word_.replace(" ", '') in sentence.split(' '):
        # print("直接返回", sentence, base_word_)
        return sentence.replace(base_word_, 6 * '_')

    else:
        sta_ = 0
        sta = 0
        sentence = sentence.replace('-', ' ')

        add_location = []
        for word in sentence.split(' '):
            for base_word in base_word_.split(' '):
                if base_word.upper() == word.upper():
                    # 检测到单词无变形
                    # print(f"word:{word}")
                    result += sentence.replace(word, 6 * "_")
                    add_location.append(word)
                    sta = 1
                    continue
                for c in range(1, 5):
                    if sta == 1:
                        break
                    for m in range(1, 5):
                        if sta_ == 1:
                            continue
                        if len(base_word) < m + 1 or len(base_word) < c + 1:
                            continue
                        if base_word[0:-c].upper() == word[0:-m].upper():
                            # 检测到单词有变形
                            # print('c', c, base_word[0:-c])
                            result += sentence.replace(word, 6 * "_")
                            add_location.append(word)
                            sta_ = 1
        if len(base_word_.split(' ')) < 2:
            return result
        # 短语定位
        result = sentence
        result_ = ''
        result = result.split(' ')
        for word_ in add_location:
            result = ["__" if word__ == word_ else word__ for word__ in result]
        for item in result:
            result_ += item + ' '
        result_ = re.sub(r'\_+', '_', result_)
        result_ = result_.replace('_ _', '_' * 6)
        result_ = result_.replace('_ _ _', '_' * 6)
        result_ = result_.replace('_ _ _ _', '_' * 6)
        # result = result_
        return result_

  • 🔍采用Sword的正则表达式识别例句中单词算法
点击查看"cut_key_word"(by Sword)
def cut_key_word(exam_word: str, original_sentence: str) -> str:
    exam_word_change = exam_word[0:len(exam_word) - 1:1]
    pattern = f"\\b{exam_word}\\w*\\b|\\b{exam_word_change}\\w*\\b"
    r = re.sub(pattern, '______', original_sentence, flags=re.IGNORECASE)
    return r
  • 📑调用Sword的xlsx文件生成模块 (xlsx_load.py)
点击查看"xlsx_load.py"(by Sword)
def extract_and_create_file(dict_wrong, dict_correct: dict):
    # 该函数用于处理错误单词字典和正确单词字典并生成一个类文件(xlsx格式).
    # 使用该函数需导入以下四个模块:import openpyxl; from openpyxl.utils import get_column_letter;
    # from openpyxl.styles import Font; from io import BytesIO
    # Author:Sword
    wb = openpyxl.Workbook()
    sheet = wb.active
    counter = 0
    sheet.title = "Your Word List"
    desired_width = 70
    sheet.column_dimensions[get_column_letter(1)].width = desired_width
    for key in dict_wrong.keys():
        a = sheet.cell(counter + 1, 1, key)
        b = sheet.cell(counter + 1, 2, dict_wrong[key])
        a.font = Font(color="FF0000")
        b.font = Font(color="FF0000")
        counter += 1
    for key in dict_correct.keys():
        a = sheet.cell(counter + 1, 1, key)
        b = sheet.cell(counter + 1, 2, dict_correct[key])
        a.font = Font(color="6DB33F")
        b.font = Font(color="6DB33F")
        counter += 1
    output = BytesIO()
    wb.save(output)
    output.seek(0)
    return output

  • 🖥️采用了前后端分离的架构设计。

前端使用 Streamlit UI 框架,为用户提供简洁美观的界面。
🕸️后端主要使用 Python 语言进行开发,借助 requests 和 beautifulsoup4 库进行网页内容爬取,通过一系列精密算法对数据进行处理。
💾数据存储方面,利用 streamlit.session_state 进行临时数据存储,确保数据的快速访问和更新)

  • 🎨引入html展示结果单词列表(颜色区分对错)
  • 📜使用json库解析若干语句
  • 🔀使用random打乱顺序
  • 🧩使用切片,循环,正则等精密算法
  • 📰实时更新最新文章列表以及最新单词
  • 🗣️内嵌JavaScript并使用Speech Synthesis API朗读单词
  • 📖编写全新文章选择,支持多选,支持搜索文章

📈更新日志

更新时间 版本信息 更新内容
2024/5/29 日 WebUiVersionV1.0.0 本地测试通过
2024/5/29 日晚 完成 streamlit cloud 结合 github 仓库初步上线部署
2024/5/30 日 据 Mr.Mou 建议,添加一定量个性化设置并优化诸多代码
2024/5/30 日晚 大量删改不必要代码,大程度优化加载逻辑和函数加载等,采用多文件管理代码
2024/5/31 日 新增个性化提示鼓励,以及 Sword 同学贡献他自定义的语料,添加例句功能
2024/5/31 日晚 WebUiVersionV2.1.0(Tests) 新增检测模式(以英文选中文,以中文选英文)
2024/6/4 日晚 WebUiVersionV2.1.2(Test) 成功修复若干 bug,新增检测模式(以单词选例句,以例句选单词)以及正确率图像绘制,修复单词数量过多 bug
2024/6/5 日 WebUiVersionV2.1.2(Stable) 修改提示词并初步优化例句除去待测单词功能
2024/6/5 日晚 WebUiVersionV2.1.3(Stable) 再次优化例句除去待测单词功能并优化布局
2024/6/11 日晚 WebUiVersionV2.2.0(Test) 添加朗读单词功能、添加答错时显示答案功能、添加朗读单词个性化设置、美化 README.md、重写默认鼓励词并优化显示答案功能
2024/6/11 日晚 WebUiVersionV2.2.1(Stable) 修复朗读单词的下划线 bug、优化短语识别算法、优化下划线数量以及间隔
2024/6/12 日晚 WebUiVersionV2.2.2(Stable) 进一步优化短语识别算法、美化 README.md、再一次优化短语识别过多算法
2024/9/22 日晚 WebUiVersionV3.0.1(Test) 实现兼容 Mr.Mou 全新布局、重写关键函数(new_load_word)、为后续优化选项模式做好准备、优化函数模块、优化错误提示
2024/9/23 日早上 WebUiVersionV3.0.2(Test) 采用 Sword 编写的 xlsx 加载生成模块
2024/9/24 日晚 WebUiVersionV3.0.2(Stable) 添加展示流程信息
2024/9/26 日晚 WebUiVersionV3.2.0(Test) 邀请 Sword 编写例句中单词识别替换算法,并集成入配置选项中,编写全新文章选择,支持多选,支持搜索文章!
2024/9/26 日晚 WebUiVersionV3.2.1(Stable) 优化 Sword 的正则算法,优化 Readme.md,去除流程图