-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
32 changed files
with
40,362 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
# ConsPlan | ||
# TravelBench | ||
|
||
Code will come soon! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
import json | ||
import re | ||
import os | ||
import gradio as gr | ||
|
||
def load_line_json_data(filename): | ||
data = [] | ||
with open(filename, 'r', encoding='utf-8') as f: | ||
for line in f.read().strip().split('\n'): | ||
unit = json.loads(line) | ||
data.append(unit) | ||
return data | ||
|
||
def extract_query_number(query_string): | ||
""" | ||
Extract the number from a query string formatted as "Query X" or "Query X --- Done". | ||
Args: | ||
- query_string (str): The input string. | ||
Returns: | ||
- int: The extracted number if found, else None. | ||
""" | ||
pattern = r"Query (\d+)" | ||
match = re.search(pattern, query_string) | ||
return int(match.group(1)) if match else None | ||
|
||
def create_data_display(css_content,data,annotation_idx): | ||
return f""" | ||
<style> | ||
{css_content} | ||
</style> | ||
<div> | ||
<span class="query-highlighted"><strong>Query {annotation_idx}:</strong> {data[annotation_idx-1]['query']}</span><br> | ||
<span class="highlighted"><strong>Day:</strong> {data[annotation_idx-1]['days']}</span> | ||
<span class="highlighted"><strong>Visiting City Number:</strong> {data[annotation_idx-1]['visiting_city_number']}</span> | ||
<span class="highlighted"><strong>Date:</strong> {data[annotation_idx-1]['date']}</span> | ||
<span class="highlighted"><strong>Departure:</strong> {data[annotation_idx-1]['org']}</span> | ||
<span class="highlighted"><strong>Destination:</strong> {data[annotation_idx-1]['dest']}</span><br> | ||
<span class="highlighted-alt"><strong>People Number:</strong> {data[annotation_idx-1]['people_number']}</span> | ||
<span class="highlighted-alt"><strong>Budget:</strong> {data[annotation_idx-1]['budget']}</span> | ||
<span class="highlighted-alt"><strong>Hotel Rule:</strong> {data[annotation_idx-1]['local_constraint']['house rule']}</span> | ||
<span class="highlighted-alt"><strong>Cuisine:</strong> {data[annotation_idx-1]['local_constraint']['cuisine']}</span> | ||
<span class="highlighted-alt"><strong>Room Type:</strong> {data[annotation_idx-1]['local_constraint']['room type']}</span> | ||
<span class="highlighted-alt"><strong>Transportation:</strong> {data[annotation_idx-1]['local_constraint']['transportation']}</span><br> | ||
</div> | ||
""" | ||
|
||
def judge_valid_info(info): | ||
if info == "" or not info or info == "You don't need to fill in the information for this or later days." : | ||
return False | ||
return True | ||
|
||
def judge_submit_info(info, current_day, label, annotation_data, *tested_data): | ||
if info == "" or not info: | ||
raise gr.Error("Day {} {} is empty!".format(current_day, label)) | ||
if info != "-": | ||
if label == "transportation": | ||
if not judge_valid_transportation(info, annotation_data): | ||
raise gr.Error("Day {} {} is invalid! Please note the transportation.".format(current_day, label)) | ||
elif label == "accommodation": | ||
if not judge_valid_room_type(info, annotation_data, tested_data[0]): | ||
raise gr.Error("Day {} {} is invalid! Please note the room type.".format(current_day, label)) | ||
|
||
if not judge_valid_room_rule(info, annotation_data, tested_data[0]): | ||
raise gr.Error("Day {} {} is invalid! Please note the house rules.".format(current_day, label)) | ||
|
||
return True | ||
|
||
|
||
def judge_valid_transportation(info, annotation_data): | ||
if annotation_data['local_constraint']['transportation'] == 'no flight' and 'Flight' in info: | ||
return False | ||
elif annotation_data['local_constraint']['transportation'] == 'no self-driving' and 'Self-driving' in info: | ||
return False | ||
return True | ||
|
||
def judge_valid_room_type(info, annotation_data, accommodation_data_all): | ||
accommodation_data_filtered = get_filtered_data(info, accommodation_data_all) | ||
if annotation_data['local_constraint']['room type'] == 'not shared room' and accommodation_data_filtered['room type'].values[0] == 'Shared room': | ||
return False | ||
# "shared room", "not shared room", "private room", "entire room" | ||
elif annotation_data['local_constraint']['room type'] == 'shared room' and accommodation_data_filtered['room type'].values[0] != 'Shared room': | ||
return False | ||
|
||
elif annotation_data['local_constraint']['room type'] == 'private room' and accommodation_data_filtered['room type'].values[0] != 'Private room': | ||
return False | ||
|
||
elif annotation_data['local_constraint']['room type'] == 'entire room' and accommodation_data_filtered['room type'].values[0] != 'Entire home/apt': | ||
return False | ||
|
||
return True | ||
|
||
def judge_valid_room_rule(info, annotation_data, accommodation_data_all): | ||
accommodation_data_filtered = get_filtered_data(info, accommodation_data_all) | ||
if annotation_data['local_constraint']['house rule'] == 'smoking' and 'No smoking' in str(accommodation_data_filtered['house_rules'].values[0]): | ||
return False | ||
if annotation_data['local_constraint']['house rule'] == 'parities' and 'No parties' in str(accommodation_data_filtered['house_rules'].values[0]): | ||
return False | ||
if annotation_data['local_constraint']['house rule'] == 'children under 10' and 'No children under 10' in str(accommodation_data_filtered['house_rules'].values[0]): | ||
return False | ||
if annotation_data['local_constraint']['house rule'] == 'visitors' and 'No visitors' in str(accommodation_data_filtered['house_rules'].values[0]): | ||
return False | ||
if annotation_data['local_constraint']['house rule'] == 'pets' and 'No pets' in str(accommodation_data_filtered['house_rules'].values[0]): | ||
return False | ||
|
||
return True | ||
|
||
def judge_valid_cuisine(info, annotation_data, restaurant_data_all, cuisine_set: set): | ||
if info != "-" and annotation_data['local_constraint']['cuisine'] is not None and annotation_data['org'] not in info: | ||
restaurant_data_filtered = get_filtered_data(info, restaurant_data_all,('Name','City')) | ||
for cuisine in annotation_data['local_constraint']['cuisine']: | ||
if cuisine in restaurant_data_filtered.iloc[0]['Cuisines']: | ||
cuisine_set.add(cuisine) | ||
return cuisine_set | ||
|
||
|
||
|
||
|
||
def get_valid_name_city(info): | ||
# Modified the pattern to preserve spaces at the end of the name | ||
pattern = r'(.*?),\s*([^,]+)(\(\w[\w\s]*\))?$' | ||
match = re.search(pattern, info) | ||
if match: | ||
return match.group(1).strip(), extract_before_parenthesis(match.group(2).strip()).strip() | ||
else: | ||
print(f"{info} can not be parsed, '-' will be used instead.") | ||
return "-","-" | ||
|
||
|
||
def extract_numbers_from_filenames(directory): | ||
# Define the pattern to match files | ||
pattern = r'annotation_(\d+).json' | ||
|
||
# List all files in the directory | ||
files = os.listdir(directory) | ||
|
||
# Extract numbers from filenames that match the pattern | ||
numbers = [int(re.search(pattern, file).group(1)) for file in files if re.match(pattern, file)] | ||
|
||
return numbers | ||
|
||
def get_city_list(days, deparure_city, destination): | ||
city_list = [] | ||
city_list.append(deparure_city) | ||
if days == 3: | ||
city_list.append(destination) | ||
else: | ||
city_set = open('/home/user/app/database/background/citySet_with_states.txt').read().split('\n') | ||
state_city_map = {} | ||
for unit in city_set: | ||
city, state = unit.split('\t') | ||
if state not in state_city_map: | ||
state_city_map[state] = [] | ||
state_city_map[state].append(city) | ||
for city in state_city_map[destination]: | ||
if city != deparure_city: | ||
city_list.append(city + f"({destination})") | ||
return city_list | ||
|
||
def get_filtered_data(component,data, column_name=('NAME','city')): | ||
name, city = get_valid_name_city(component) | ||
return data[(data[column_name[0]] == name) & (data[column_name[1]] == city)] | ||
|
||
def extract_before_parenthesis(s): | ||
match = re.search(r'^(.*?)\([^)]*\)', s) | ||
return match.group(1) if match else s | ||
|
||
def count_consecutive_values(lst): | ||
if not lst: | ||
return [] | ||
|
||
result = [] | ||
current_string = lst[0] | ||
count = 1 | ||
|
||
for i in range(1, len(lst)): | ||
if lst[i] == current_string: | ||
count += 1 | ||
else: | ||
result.append((current_string, count)) | ||
current_string = lst[i] | ||
count = 1 | ||
|
||
result.append((current_string, count)) # Add the last group of values | ||
return result |
Oops, something went wrong.