legal-doc-masker/backend/app/core/prompts/masking_prompts.py

163 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import textwrap
def get_masking_prompt(text: str) -> str:
"""
Returns the prompt for masking sensitive information in legal documents.
Args:
text (str): The input text to be masked
Returns:
str: The formatted prompt with the input text
"""
prompt = textwrap.dedent("""
您是一位专业的法律文档脱敏专家。请按照以下规则对文本进行脱敏处理:
规则:
1. 人名:
- 两字名改为"姓+某"(如:张三 → 张某)
- 三字名改为"姓+某某"(如:张三丰 → 张某某)
2. 公司名:
- 保留地理位置信息(如:北京、上海等)
- 保留公司类型(如:有限公司、股份公司等)
- 用""替换核心名称
3. 保持原文其他部分不变
4. 确保脱敏后的文本保持原有的语言流畅性和可读性
输入文本:
{text}
请直接输出脱敏后的文本,无需解释或其他备注。
""")
return prompt.format(text=text)
def get_masking_mapping_prompt(text: str) -> str:
"""
Returns a prompt that generates a mapping of original names/companies to their masked versions.
Args:
text (str): The input text to be analyzed for masking
Returns:
str: The formatted prompt that will generate a mapping dictionary
"""
prompt = textwrap.dedent("""
您是一位专业的法律文档脱敏专家。请分析文本并生成一个脱敏映射表,遵循以下规则:
规则:
1. 人名映射规则:
- 对于同一姓氏的不同人名,使用字母区分:
* 第一个出现的用"姓+某"(如:张三 → 张某)
* 第二个出现的用"姓+某A"(如:张四 → 张某A
* 第三个出现的用"姓+某B"(如:张五 → 张某B
依此类推
- 三字名同样遵循此规则(如:张三丰 → 张某某,张四海 → 张某某A
2. 公司名映射规则:
- 保留地理位置信息(如:北京、上海等)
- 保留公司类型(如:有限公司、股份公司等)
- 用""替换核心名称,但保留首尾字(如:北京智慧科技有限公司 → 北京智某科技有限公司)
- 对于多个相似公司名,使用字母区分(如:
北京智慧科技有限公司 → 北京某科技有限公司
北京智能科技有限公司 → 北京某科技有限公司A
3. 公权机关不做脱敏处理(如:公安局、法院、检察院、中国人民银行、银监会及其他未列明的公权机关)
请分析以下文本并生成一个JSON格式的映射表包含所有需要脱敏的名称及其对应的脱敏后的形式
{text}
请直接输出JSON格式的映射表格式如下
{{
"原文1": "脱敏后1",
"原文2": "脱敏后2",
...
}}
如无需要输出的映射请输出空json如下:
{{}}
""")
return prompt.format(text=text)
def get_masking_mapping_prompt_v2(text: str) -> str:
"""
Returns a prompt that generates a mapping of original names/companies to their masked versions.
Args:
text (str): The input text to be analyzed for masking
Returns:
str: The formatted prompt that will generate a mapping dictionary
"""
prompt = textwrap.dedent("""
请根据以下脱敏规则对给定文本进行分析并生成脱敏映射mapJSON格式
脱敏规则说明:
1.人名:保留姓,名变为"";同姓者按"某1""某2"依次编号;律师姓名、审判人员姓名不脱敏
2.公司名替换为大写英文字母A公司、B公司等律师事务所不脱敏
3.地址:仅保留区级以上地址,删除详细位置
4.英文人名:保留姓名首字母,其余替换为"***"
5.英文公司名:替换为所属行业名称的英文大写形式
6.项目名替换为小写英文字母a项目、b项目等
7.案号:具体案号部分替换为"** *"
8.身份证号替换为6个"X"
9.统一社会信用代码替换为8个"X"
输入文本:
{text}
输出要求:
请生成一个JSON格式的映射map包含以下结构
{{
"原文1": "脱敏后1",
"原文2": "脱敏后2",
...
}}
如无需要输出的映射请输出空json如下:
{{}}
注意事项:
请准确识别文本中的各类敏感信息
同一类别的多个实体,请在对应类别下全部列出
如果文本中没有某类敏感信息,可以省略该类别
请确保脱敏后的文本符合上述规则要求
""")
return prompt.format(text=text)
def get_ner_name_prompt(text: str) -> str:
"""
Returns a prompt that generates a mapping of original names/companies to their masked versions.
Args:
text (str): The input text to be analyzed for masking
Returns:
str: The formatted prompt that will generate a mapping dictionary
"""
prompt = textwrap.dedent("""
你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息并按照指定的类别进行分类。请严格按照JSON格式输出结果。
实体类别包括:
- 人名 (不包括律师、法官、书记员、检察官等公职人员)
- 英文人名
待处理文本:
{text}
输出格式:
{{
"entities": [
{{"text": "原始文本内容", "type": "实体类别"}},
...
]
}}
请严格按照JSON格式输出结果。
""")
return prompt.format(text=text)