Spaces:
Sleeping
Sleeping
from langchain.chains import create_extraction_chain | |
from langchain.chat_models import ChatOpenAI | |
import openai | |
import re | |
delimiter = "###" | |
def extract_text(input_string): | |
pattern = r'\((.*?)\)' | |
matches = re.findall(pattern, input_string) | |
if matches: | |
return matches | |
else: | |
return None | |
def clear_lines_above_and_containing(text, specific_text): | |
lines = text.split('\n') | |
new_lines = [] | |
i = 0 | |
while i < len(lines): | |
line = lines[i] | |
if specific_text in line: | |
if i > 0: | |
new_lines.pop() # Remove the line just above the specific text | |
i += 1 # Skip the line containing the specific text | |
else: | |
new_lines.append(line) | |
i += 1 | |
return '\n'.join(new_lines) | |
def get_dictation(text): | |
prompt = f""" | |
Given a piece of text, identify and extract sentences written in the present perfect and present perfect continuous tense. Present perfect tense typically involves the use of 'have/has + past participle,' while present perfect continuous tense involves 'have/has + been + present participle (verb + -ing).' Please provide the identified sentences. | |
'''{text}''' | |
""";'' | |
messages_1 = [ | |
{'role': 'user', 'content': f"{delimiter}{prompt}{delimiter}"}, | |
] | |
response = get_completion(messages_1) | |
return response | |
def get_completion(messages, model="gpt-3.5-turbo", temperature=0): | |
response = openai.ChatCompletion.create( | |
model=model, | |
messages=messages, | |
temperature=temperature, # This is the degree of randomness of the model's output | |
) | |
return response.choices[0].message["content"] | |
def get_cpt_code(docs): | |
model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) | |
schema = { | |
"properties": { | |
"systolic": {"type": "string"}, | |
"diastolic": {"type": "string"}, | |
"bmi": {"type": "string"} | |
}, | |
"required": [""], | |
} | |
# Chain which is used to extract schema | |
chain = create_extraction_chain(schema, model) | |
response_1 = chain.run(docs) | |
results = [] | |
for item in response_1: | |
if 'systolic' in item: | |
systolic_value = item.get('systolic') | |
# condition becomes only true when string containes at least one numerical digit | |
if systolic_value != '' and re.search(r'\d', systolic_value): | |
systolic = int(item['systolic'].split()[0]) # Extract systolic value | |
if systolic < 130: | |
results.append("3074F") | |
elif 130 <= systolic <= 139: | |
results.append("3075F") | |
elif systolic >= 140: | |
results.append("3077F") | |
if 'diastolic' in item: | |
diastolic_value = item.get('diastolic') | |
if diastolic_value != '' and re.search(r'\d', diastolic_value): | |
diastolic = int(item['diastolic'].split()[0]) # Extract diastolic value | |
if diastolic < 80: | |
results.append("3078F") | |
elif 80 <= diastolic <= 89: | |
results.append("3079F") | |
elif diastolic >= 90: | |
results.append("3080F") | |
if 'bmi' in item: | |
bmi_value = item.get('bmi') | |
if bmi_value != '' and re.search(r'\d', bmi_value): | |
results.append("3008F") | |
return(results) |