Update app.py
Browse files
app.py
CHANGED
@@ -119,29 +119,62 @@ def upload_parquet(file_path: str) -> Tuple[str, str, str]:
|
|
119 |
def text_to_parquet(text: str) -> Tuple[str, str, str]:
|
120 |
try:
|
121 |
from io import StringIO
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
df = pd.read_csv(
|
125 |
-
|
126 |
sep=',',
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
engine='python', # Python 엔진 사용
|
131 |
-
header=None, # 첫 번째 행을 열 이름으로 사용하지 않음
|
132 |
-
names=['id', 'text', 'label', 'metadata'] # 열 이름 지정
|
133 |
)
|
|
|
134 |
# 데이터 유형 최적화
|
135 |
df = df.astype({'id': 'int32', 'text': 'string', 'label': 'string', 'metadata': 'string'})
|
|
|
136 |
# Parquet 파일로 변환
|
137 |
parquet_filename = 'text_to_parquet.parquet'
|
138 |
df.to_parquet(parquet_filename, engine='pyarrow', compression='snappy')
|
|
|
139 |
# Parquet 파일 내용 미리보기
|
140 |
parquet_content = load_parquet(parquet_filename)
|
|
|
141 |
return f"{parquet_filename} 파일이 성공적으로 변환되었습니다.", parquet_content, parquet_filename
|
|
|
142 |
except Exception as e:
|
143 |
-
error_message = f"텍스트 변환 중 오류가 발생했습니다: {str(e)}
|
144 |
-
print(error_message)
|
145 |
return error_message, "", ""
|
146 |
|
147 |
def preprocess_text_with_llm(input_text: str) -> str:
|
|
|
119 |
def text_to_parquet(text: str) -> Tuple[str, str, str]:
|
120 |
try:
|
121 |
from io import StringIO
|
122 |
+
import csv
|
123 |
+
|
124 |
+
# 입력 텍스트 정제
|
125 |
+
lines = text.strip().split('\n')
|
126 |
+
cleaned_lines = []
|
127 |
+
|
128 |
+
for line in lines:
|
129 |
+
# 빈 줄 건너뛰기
|
130 |
+
if not line.strip():
|
131 |
+
continue
|
132 |
+
|
133 |
+
# 쌍따옴표 정규화
|
134 |
+
line = line.replace('""', '"') # 중복 쌍따옴표 처리
|
135 |
+
|
136 |
+
# CSV 파싱을 위한 임시 StringIO 객체 생성
|
137 |
+
temp_buffer = StringIO(line)
|
138 |
+
try:
|
139 |
+
# CSV 라인 파싱 시도
|
140 |
+
reader = csv.reader(temp_buffer, quoting=csv.QUOTE_ALL)
|
141 |
+
parsed_line = next(reader)
|
142 |
+
if len(parsed_line) == 4: # id, text, label, metadata
|
143 |
+
# 각 필드를 적절히 포맷팅
|
144 |
+
formatted_line = f'{parsed_line[0]},"{parsed_line[1]}","{parsed_line[2]}","{parsed_line[3]}"'
|
145 |
+
cleaned_lines.append(formatted_line)
|
146 |
+
except:
|
147 |
+
continue
|
148 |
+
finally:
|
149 |
+
temp_buffer.close()
|
150 |
+
|
151 |
+
# 정제된 CSV 데이터 생성
|
152 |
+
cleaned_csv = '\n'.join(cleaned_lines)
|
153 |
+
|
154 |
+
# DataFrame 생성
|
155 |
df = pd.read_csv(
|
156 |
+
StringIO(cleaned_csv),
|
157 |
sep=',',
|
158 |
+
quoting=csv.QUOTE_ALL,
|
159 |
+
escapechar='\\',
|
160 |
+
names=['id', 'text', 'label', 'metadata']
|
|
|
|
|
|
|
161 |
)
|
162 |
+
|
163 |
# 데이터 유형 최적화
|
164 |
df = df.astype({'id': 'int32', 'text': 'string', 'label': 'string', 'metadata': 'string'})
|
165 |
+
|
166 |
# Parquet 파일로 변환
|
167 |
parquet_filename = 'text_to_parquet.parquet'
|
168 |
df.to_parquet(parquet_filename, engine='pyarrow', compression='snappy')
|
169 |
+
|
170 |
# Parquet 파일 내용 미리보기
|
171 |
parquet_content = load_parquet(parquet_filename)
|
172 |
+
|
173 |
return f"{parquet_filename} 파일이 성공적으로 변환되었습니다.", parquet_content, parquet_filename
|
174 |
+
|
175 |
except Exception as e:
|
176 |
+
error_message = f"텍스트 변환 중 오류가 발생했습니다: {str(e)}"
|
177 |
+
print(f"{error_message}\n{traceback.format_exc()}")
|
178 |
return error_message, "", ""
|
179 |
|
180 |
def preprocess_text_with_llm(input_text: str) -> str:
|