DataFlow-VQA / prompts /question_answer_clean.py
aaron1141's picture
initial hf spaces demo
e783436
from dataflow.utils.registry import PROMPT_REGISTRY
from dataflow.core.prompt import PromptABC
@PROMPT_REGISTRY.register()
class TextCleaningPrompt(PromptABC):
"""
用于清洗文本中的非内容性信息片段
"""
def __init__(self):
self.question_prompt_template = """你是一名数据清洗专家。请从以下题目文本中识别所有与问题实质无关的非内容性信息片段,这些片段应被完全移除。
【非内容性信息定义】(应删除):
- 题号、例号、习题编号(如 "1.1"、"例3"、"Problem 2.4"、"习题2-5");
- 章节标记(如 "§2.1"、"Chapter 3");
- 考试元数据:包括分数、学校、年份等组合标注(如 "(10分,北京交通大学,2003)"、"(20分,2007年)"、"(清华大学,2010)");
- 模板残留(如 "[图]"、"【此处填空】"、"<在此作答>");
- 与本题逻辑无关的交叉引用(如 "如上题所述"、"参考例4"),**除非该引用是解题所必需的前提**。
【重要内容定义】(必须保留,禁止删除):
- **图片引用**:包括 Markdown 图片语法(如 `![图2-1](question_images/xxx.jpg)`)、纯路径(如 `question_images/xxx.jpg`)、图注(如 "图2-1"、"如图所示");
- 所有物理条件、变量、公式、单位、逻辑描述(如 "G铰"、"几何不变体系");
- 若题干中提及"例X"是作为**定义或前提**(如"如例1.2中定义的模型"),则保留;否则(如开头的"例1")应删除。
【重要规则】:
1. **不要重写、不要改写、不要总结**原始文本;
2. **仅输出需要删除的子字符串**,多个片段用 `||` 分隔;
3. 如果没有非内容性信息,输出 `NONE`;
4. **必须原样输出片段**(包括空格、括号、标点、中文顿号等);
5. **特别注意**:任何包含 `question_images/` 的路径、`![...](...)` 结构、或"图X-X"形式的图标识,**一律不得删除**;
6. 考试元数据(如"(10分,北京交通大学,2003)")**必须整段删除**,包括括号。
7. **务必保留必要的前提信息。**
8. **删除后的问题,一定还能构成一个完整的问题**。输出前请三思。
例如对于"In Exercises 3-6, calculate the size of the set.\n4. {{x|x is a prime number less than 10}}",
这个必要的前缀不应该被删除,你要删除的内容应该是 " In Exercises 3-6, || 4."。
如果你对这一点感到困惑、为难,请**务必保留更多内容,而不是删除**。
9. 应**最小化**删除与题目无关的文本,不要过分删除。如果你有任何疑问,请优先选择保留,甚至直接输出 `NONE`。
题目文本:{text}
请输出待删除的片段(用 `||` 分隔)或 `NONE`:"""
self.answer_prompt_template = """你是一名数据清洗专家。请从以下答案文本中识别所有与答案实质无关的非内容性信息片段,这些片段应被完全移除。
【非内容性信息定义】:
- 答案引导词(如 "答:"、"答案:"、"Solution:"、"解:");
- 习题引用(如 "(见习题2.3)"、"同例4"、"参考教材P30");
- 模板残留(如 "[计算过程略]"、"{{result}}");
- 与答案结论无关的附加说明(如 "详见附录");
- 其他非答案核心内容的元信息。
【重要规则】:
1. 不要重写、不要改写、不要总结原始文本;
2. 仅输出需要删除的子字符串,多个片段用 `||` 分隔;
3. 如果没有非内容性信息,输出 `NONE`;
4. 必须原样输出片段(包括冒号、空格、括号等)。
答案文本:{text}
请输出待删除的片段(用 `||` 分隔)或 `NONE`:"""
def build_question_prompt(self, text):
"""构建问题文本清洗的提示"""
return self.question_prompt_template.format(text=text)
def build_answer_prompt(self, text):
"""构建答案文本清洗的提示"""
return self.answer_prompt_template.format(text=text)