QAFD-RAG / src /utils /data.py
tarzanagh's picture
Add code: src, benchmarks, data, requirements, run.sh, README
8e874f5 verified
Raw
History Blame Contribute Delete
2.38 kB
"""
Data handling utilities for QAFD-RAG.
Provides CSV conversion and context combination functions.
"""
import csv
import io
from typing import List
def list_of_list_to_csv(data: List[List[str]]) -> str:
"""
Convert a list of lists to a CSV string.
Parameters:
-----------
data : List[List[str]]
2D list of string values
Returns:
--------
str
CSV formatted string
"""
output = io.StringIO()
writer = csv.writer(output)
writer.writerows(data)
return output.getvalue()
def csv_string_to_list(csv_string: str) -> List[List[str]]:
"""
Convert a CSV string to a list of lists.
Parameters:
-----------
csv_string : str
CSV formatted string
Returns:
--------
List[List[str]]
2D list of string values
"""
output = io.StringIO(csv_string)
reader = csv.reader(output)
return [row for row in reader]
def process_combine_contexts(hl: str, ll: str) -> str:
"""
Combine high-level and low-level context CSV strings.
Merges two CSV context strings, deduplicates entries, and re-indexes.
Parameters:
-----------
hl : str
High-level context CSV string
ll : str
Low-level context CSV string
Returns:
--------
str
Combined and deduplicated context string
"""
header = None
list_hl = csv_string_to_list(hl.strip())
list_ll = csv_string_to_list(ll.strip())
if list_hl:
header = list_hl[0]
list_hl = list_hl[1:]
if list_ll:
header = list_ll[0]
list_ll = list_ll[1:]
if header is None:
return ""
if list_hl:
list_hl = [",".join(item[1:]) for item in list_hl if item]
if list_ll:
list_ll = [",".join(item[1:]) for item in list_ll if item]
combined_sources = []
seen = set()
for item in list_hl + list_ll:
if item and item not in seen:
combined_sources.append(item)
seen.add(item)
combined_sources_result = [",\t".join(header)]
for i, item in enumerate(combined_sources, start=1):
combined_sources_result.append(f"{i},\t{item}")
combined_sources_result = "\n".join(combined_sources_result)
return combined_sources_result
__all__ = [
"list_of_list_to_csv",
"csv_string_to_list",
"process_combine_contexts",
]