From 3c3293818db1843bb2bbadac7d9b477b1d187a8b Mon Sep 17 00:00:00 2001 From: lbykkkk Date: Sun, 20 Oct 2024 01:14:42 +0800 Subject: [PATCH] Change the word document summary function to document summary function --- crazy_functional.py | 19 +++++- .../{总结word文档.py => 总结文档.py} | 59 +++++-------------- 2 files changed, 32 insertions(+), 46 deletions(-) rename crazy_functions/{总结word文档.py => 总结文档.py} (60%) diff --git a/crazy_functional.py b/crazy_functional.py index de07c1bb..d9df4879 100644 --- a/crazy_functional.py +++ b/crazy_functional.py @@ -21,7 +21,7 @@ def get_crazy_functions(): from crazy_functions.询问多个大语言模型 import 同时问询 from crazy_functions.SourceCode_Analyse import 解析一个Lua项目 from crazy_functions.SourceCode_Analyse import 解析一个CSharp项目 - from crazy_functions.总结word文档 import 总结word文档 + from crazy_functions.总结文档 import 总结文件 from crazy_functions.解析JupyterNotebook import 解析ipynb文件 from crazy_functions.Conversation_To_File import 载入对话历史存档 from crazy_functions.Conversation_To_File import 对话历史存档 @@ -34,6 +34,7 @@ def get_crazy_functions(): from crazy_functions.谷歌检索小助手 import 谷歌检索小助手 from crazy_functions.理解PDF文档内容 import 理解PDF文档内容标准文件输入 from crazy_functions.Latex全文润色 import Latex中文润色 + from crazy_functions.Arxiv_论文对话 import Arxiv_论文对话 from crazy_functions.Latex全文润色 import Latex英文纠错 from crazy_functions.Markdown_Translate import Markdown中译英 from crazy_functions.虚空终端 import 虚空终端 @@ -108,12 +109,12 @@ def get_crazy_functions(): "Function": HotReload(Latex翻译中文并重新编译PDF), # 当注册Class后,Function旧接口仅会在“虚空终端”中起作用 "Class": Arxiv_Localize, # 新一代插件需要注册Class }, - "批量总结Word文档": { + "批量总结文档": { "Group": "学术", "Color": "stop", "AsButton": False, "Info": "批量总结word文档 | 输入参数为路径", - "Function": HotReload(总结word文档), + "Function": HotReload(总结文件), }, "解析整个Matlab项目": { "Group": "编程", @@ -347,6 +348,18 @@ def get_crazy_functions(): "Function": HotReload(Latex翻译中文并重新编译PDF), # 当注册Class后,Function旧接口仅会在“虚空终端”中起作用 "Class": Arxiv_Localize, # 新一代插件需要注册Class }, + "📚Arxiv论文交互对话(输入arxivID)": { + "Group": "学术", + "Color": "stop", + "AsButton": False, + "AdvancedArgs": True, + "ArgsReminder": r"如果有必要, 请在此处给出自定义翻译命令, 解决部分词汇翻译不准确的问题。 " + r"例如当单词'agent'翻译不准确时, 请尝试把以下指令复制到高级参数区: " + r'If the term "agent" is used in this section, it should be translated to "智能体". ', + "Info": "Arixv论文精细翻译 | 输入参数arxiv论文的ID,比如1812.10695", + "Function": HotReload(Arxiv_论文对话), # 当注册Class后,Function旧接口仅会在“虚空终端”中起作用 + "Class": Arxiv_Localize, # 新一代插件需要注册Class + }, "📚本地Latex论文精细翻译(上传Latex项目)[需Latex]": { "Group": "学术", "Color": "stop", diff --git a/crazy_functions/总结word文档.py b/crazy_functions/总结文档.py similarity index 60% rename from crazy_functions/总结word文档.py rename to crazy_functions/总结文档.py index 99f0919b..37213530 100644 --- a/crazy_functions/总结word文档.py +++ b/crazy_functions/总结文档.py @@ -2,33 +2,17 @@ from toolbox import update_ui from toolbox import CatchException, report_exception from toolbox import write_history_to_file, promote_file_to_downloadzone from crazy_functions.crazy_utils import request_gpt_model_in_new_thread_with_ui_alive +from crazy_functions.rag_fns.rag_file_support import extract_text, supports_format + fast_debug = False -def 解析docx(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt): +def 文档总结(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt): import time, os # pip install python-docx 用于docx格式,跨平台 # pip install pywin32 用于doc格式,仅支持Win平台 for index, fp in enumerate(file_manifest): - if fp.split(".")[-1] == "docx": - from docx import Document - doc = Document(fp) - file_content = "\n".join([para.text for para in doc.paragraphs]) - else: - try: - import win32com.client - word = win32com.client.Dispatch("Word.Application") - word.visible = False - # 打开文件 - doc = word.Documents.Open(os.getcwd() + '/' + fp) - # file_content = doc.Content.Text - doc = word.ActiveDocument - file_content = doc.Range().Text - doc.Close() - word.Quit() - except: - raise RuntimeError('请先将.doc文档转换为.docx文档。') - + file_content = extract_text(fp) # private_upload里面的文件名在解压zip后容易出现乱码(rar和7z格式正常),故可以只分析文章内容,不输入文件名 from crazy_functions.pdf_fns.breakdown_txt import breakdown_text_to_satisfy_token_limit from request_llms.bridge_all import model_info @@ -37,8 +21,8 @@ def 解析docx(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot paper_fragments = breakdown_text_to_satisfy_token_limit(txt=file_content, limit=TOKEN_LIMIT_PER_FRAGMENT, llm_model=llm_kwargs['llm_model']) this_paper_history = [] for i, paper_frag in enumerate(paper_fragments): - i_say = f'请对下面的文章片段用中文做概述,文件名是{os.path.relpath(fp, project_folder)},文章内容是 ```{paper_frag}```' - i_say_show_user = f'请对下面的文章片段做概述: {os.path.abspath(fp)}的第{i+1}/{len(paper_fragments)}个片段。' + i_say = f'请对下面的内容用中文做概述,文件名是{os.path.relpath(fp, project_folder)},内容是 ```{paper_frag}```' + i_say_show_user = f'请对下面的内容片段做概述: {os.path.abspath(fp)}的第{i+1}/{len(paper_fragments)}个片段。' gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive( inputs=i_say, inputs_show_user=i_say_show_user, @@ -54,14 +38,14 @@ def 解析docx(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot # 已经对该文章的所有片段总结完毕,如果文章被切分了, if len(paper_fragments) > 1: - i_say = f"根据以上的对话,总结文章{os.path.abspath(fp)}的主要内容。" + i_say = f"根据以上的对话,总结文件{os.path.abspath(fp)}的主要内容。" gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive( inputs=i_say, inputs_show_user=i_say, llm_kwargs=llm_kwargs, chatbot=chatbot, history=this_paper_history, - sys_prompt="总结文章。" + sys_prompt="总结文件内容。" ) history.extend([i_say,gpt_say]) @@ -79,25 +63,15 @@ def 解析docx(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot @CatchException -def 总结word文档(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): +def 总结文件(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): import glob, os # 基本信息:功能、贡献者 chatbot.append([ "函数插件功能?", - "批量总结Word文档。函数插件贡献者: JasonGuo1。注意, 如果是.doc文件, 请先转化为.docx格式。"]) + f"批量总结各类文件。函数插件贡献者: JasonGuo1 and BoyinLiu。支持的文件类型包括:{",".join(supports_format)}。"]) yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 - # 尝试导入依赖,如果缺少依赖,则给出安装建议 - try: - from docx import Document - except: - report_exception(chatbot, history, - a=f"解析项目: {txt}", - b=f"导入软件依赖失败。使用该模块需要额外依赖,安装方法```pip install --upgrade python-docx pywin32```。") - yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 - return - # 清空历史,以免输入溢出 history = [] @@ -111,17 +85,16 @@ def 总结word文档(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_pr return # 搜索需要处理的文件清单 - if txt.endswith('.docx') or txt.endswith('.doc'): - file_manifest = [txt] - else: - file_manifest = [f for f in glob.glob(f'{project_folder}/**/*.docx', recursive=True)] + \ - [f for f in glob.glob(f'{project_folder}/**/*.doc', recursive=True)] + file_manifest = [] + + for ext in supports_format: + file_manifest += [f for f in glob.glob(f'{project_folder}/**/*{ext}', recursive=True)] # 如果没找到任何文件 if len(file_manifest) == 0: - report_exception(chatbot, history, a=f"解析项目: {txt}", b=f"找不到任何.docx或doc文件: {txt}") + report_exception(chatbot, history, a=f"解析项目: {txt}", b=f"找不到任何支持的文件类型: {txt}") yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 return # 开始正式执行任务 - yield from 解析docx(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt) + yield from 文档总结(file_manifest, project_folder, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt) \ No newline at end of file