mirror of
https://github.com/xszyou/Fay.git
synced 2026-03-12 17:51:28 +08:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
|
|
import json
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
|
|||
|
|
def extract_first_json_dict(input_str):
|
|||
|
|
try:
|
|||
|
|
# Replace curly quotes with standard double quotes
|
|||
|
|
input_str = (input_str.replace("“", "\"")
|
|||
|
|
.replace("”", "\"")
|
|||
|
|
.replace("‘", "'")
|
|||
|
|
.replace("’", "'"))
|
|||
|
|
|
|||
|
|
# Find the first occurrence of '{' in the input_str
|
|||
|
|
start_index = input_str.index('{')
|
|||
|
|
|
|||
|
|
# Initialize a count to keep track of open and close braces
|
|||
|
|
count = 1
|
|||
|
|
end_index = start_index + 1
|
|||
|
|
|
|||
|
|
# Loop to find the closing '}' for the first JSON dictionary
|
|||
|
|
while count > 0 and end_index < len(input_str):
|
|||
|
|
if input_str[end_index] == '{':
|
|||
|
|
count += 1
|
|||
|
|
elif input_str[end_index] == '}':
|
|||
|
|
count -= 1
|
|||
|
|
end_index += 1
|
|||
|
|
|
|||
|
|
# Extract the JSON substring
|
|||
|
|
json_str = input_str[start_index:end_index]
|
|||
|
|
|
|||
|
|
# Parse the JSON string into a Python dictionary
|
|||
|
|
json_dict = json.loads(json_str)
|
|||
|
|
|
|||
|
|
return json_dict
|
|||
|
|
except ValueError:
|
|||
|
|
# Handle the case where the JSON parsing fails
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def extract_first_json_dict_categorical(input_str):
|
|||
|
|
reasoning_pattern = r'"Reasoning":\s*"([^"]+)"'
|
|||
|
|
response_pattern = r'"Response":\s*"([^"]+)"'
|
|||
|
|
|
|||
|
|
reasonings = re.findall(reasoning_pattern, input_str)
|
|||
|
|
responses = re.findall(response_pattern, input_str)
|
|||
|
|
|
|||
|
|
return responses, reasonings
|
|||
|
|
|
|||
|
|
|
|||
|
|
def extract_first_json_dict_numerical(input_str):
|
|||
|
|
reasoning_pattern = re.compile(r'"Reasoning":\s*"([^"]+)"')
|
|||
|
|
response_pattern = re.compile(r'"Response":\s*(\d+\.?\d*)')
|
|||
|
|
|
|||
|
|
reasonings = reasoning_pattern.findall(input_str)
|
|||
|
|
responses = response_pattern.findall(input_str)
|
|||
|
|
return responses, reasonings
|
|||
|
|
|