mirror of
https://github.com/OpenSPG/openspg.git
synced 2025-08-07 16:32:44 +00:00
58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
import json
|
||
from typing import Dict, List
|
||
|
||
from knext.operator.op import PromptOp
|
||
from knext.operator.spg_record import SPGRecord
|
||
|
||
|
||
class IndicatorNER(PromptOp):
|
||
template = """
|
||
请从以下文本中提取所有指标并给出指标类型,以json格式输出
|
||
#####
|
||
输出格式:
|
||
[{{"XXX": ["XXX", "XXX"]}}, {{"XXX": ["XXX", "XXX"]}}]
|
||
#####
|
||
文本:
|
||
{input}
|
||
"""
|
||
|
||
def build_prompt(self, variables: Dict[str, str]):
|
||
return self.template.replace("${input}", variables.get("input"))
|
||
|
||
def parse_response(
|
||
self, response: str
|
||
) -> List[SPGRecord]:
|
||
# output_list = json.loads(response)
|
||
#
|
||
# ner_result = []
|
||
# # IF hasA
|
||
# for output in output_list:
|
||
# # {'财政': ['财政收入....}
|
||
# for k, v in output.items():
|
||
# # '财政', ['财政收入....]
|
||
# ner_result.append(SPGRecord("FEL.Indicator", properties={"id": k, "name": k, "hasA": ','.join(v)}))
|
||
#
|
||
# # ELSE isA
|
||
# # TODO 通过属性isA支持
|
||
# for output in output_list:
|
||
# # {'财政': ['财政收入....}
|
||
# for k, v in output.items():
|
||
# # '财政', ['财政收入....]
|
||
# for _v in v:
|
||
# # '财政收入....'
|
||
# ner_result.append(SPGRecord("FEL.Indicator", properties={"id": f'{k}-{_v}', "name": _v}))
|
||
print("##########IndicatorNER###########")
|
||
ner_result = [SPGRecord(spg_type_name="Financial.Indicator", properties={"id": "土地出让收入", "name": "土地出让收入"})]
|
||
print(ner_result)
|
||
print("##########IndicatorNER###########")
|
||
return ner_result
|
||
|
||
def build_next_variables(
|
||
self, variables: Dict[str, str], response: str
|
||
) -> List[Dict[str, str]]:
|
||
"""
|
||
response: "[{'subject': '一般公共预算收入', 'predicate': '包含', 'object': ['税收收入']}, {'subject': '税收收入', 'predicate': '包含', 'object': ['留抵退税']}, {'subject': '政府性基金收入', 'predicate': '包含', 'object': ['土地出让收入', '转移性收入']}, {'subject': '综合财力', 'predicate': '包含', 'object': ['一般公共预算收入', '政府性基金收入']}]"
|
||
"""
|
||
response = ""
|
||
return [{"input": variables["input"], "ner": response}]
|