dkmanika commited on
Commit
0ce0393
·
verified ·
1 Parent(s): 2dceb0a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -62
app.py CHANGED
@@ -61,6 +61,7 @@ morph = MorphAnalyzer()
61
  base_types = ["офис", "квартира", "апартаменты", "свободное назначение", "студия", "дом", "ОСЗ"]
62
 
63
 
 
64
  # Анализ запроса пользователя
65
  def analyze_query(query):
66
  query = query.lower()
@@ -96,7 +97,6 @@ def analyze_query(query):
96
  else:
97
  return int(number)
98
 
99
-
100
  # Поиск цены
101
  price_keywords = ["руб", "р.", "рублей", "рубля"]
102
  price_range_match = re.findall(rf"от\s*(\d+[\s]*[.,]?\d*)\s*до\s*(\d+[\s]*[.,]?\d*)\s*({'|'.join(price_keywords)})\b", query)
@@ -109,7 +109,7 @@ def analyze_query(query):
109
  filters["price_min"] = normalized_price_min
110
  filters["price_max"] = normalized_price_max
111
 
112
- # Обработка остальных случаев (оставляем старый код)
113
  price_match = re.findall(rf"(до|\s*)(\d+[\s]*[.,]?\d*)\s*(млн|тр|т\.р|тыс|тысруб|тыс\.руб|тр|т\.р.|тыр|тыр.|тыщ|тыш|тысяч|млнруб|млн\.руб|мн|М|миллионов|милионов|лямов|лимонов)?\s*({'|'.join(price_keywords)})\b", query)
114
  if price_match:
115
  operator = price_match[0][0]
@@ -121,7 +121,6 @@ def analyze_query(query):
121
  else:
122
  filters["price_min"] = normalized_price
123
 
124
-
125
  # Поиск площади
126
  area_keywords = ["квм", "кв.м", "кв метров", "кв м", "кв.м.", "квадратов", "квадрата", "м2", "метров", "м²"]
127
  area_range_match = re.findall(rf"от\s*(\d+[\s]*[.,]?\d*)\s*до\s*(\d+[\s]*[.,]?\d*)\s*({'|'.join(area_keywords)})\b", query)
@@ -134,30 +133,19 @@ def analyze_query(query):
134
  filters["area_min"] = normalized_area_min
135
  filters["area_max"] = normalized_area_max
136
 
137
- # Обработка остальных случаев (оставляем старый код)
138
- area_range_match_1 = re.findall(rf"(\d+)\s*-\s*(\d+)\s*({'|'.join(area_keywords)})", query)
139
- area_range_match_2 = re.findall(rf"(\d+)\s*[.\s]+\s*(\d+)\s*({'|'.join(area_keywords)})", query)
140
- if area_range_match_1:
141
- filters["area_min"] = int(area_range_match_1[0][0])
142
- filters["area_max"] = int(area_range_match_1[0][1])
143
- elif area_range_match_2:
144
- filters["area_min"] = int(area_range_match_2[0][0])
145
- filters["area_max"] = int(area_range_match_2[0][1])
146
- else:
147
- area_min_match = re.findall(rf"\b(от)\s*(\d+)\s*({'|'.join(area_keywords)})", query)
148
- area_max_match = re.findall(rf"\b(до)\s*(\d+)\s*({'|'.join(area_keywords)})", query)
149
- if area_min_match:
150
- filters["area_min"] = int(area_min_match[0][1])
151
- if area_max_match:
152
- filters["area_max"] = int(area_max_match[0][1])
153
-
154
-
155
-
156
 
 
157
 
158
 
159
  # Поиск объектов недвижимости в CSV
160
- """def search_real_estate(dataframe, filters):
161
  if not filters:
162
  return []
163
 
@@ -189,45 +177,6 @@ def analyze_query(query):
189
 
190
  # Возвращаем все подходящие объекты
191
  return dataframe[mask].to_dict(orient="records")
192
- """
193
- # Поиск объектов недвижимости в CSV
194
- def search_real_estate(dataframe, filters):
195
- if not filters:
196
- return []
197
- mask = pd.Series([True] * len(dataframe))
198
- # Фильтрация по типу недвижимости
199
- if "type" in filters:
200
- mask &= dataframe["type"].str.lower().isin(filters["type"])
201
-
202
- # Фильтрация по виду сделки (Аренда/Продажа)
203
- if "rent" in filters:
204
- mask &= dataframe["RENT"].str.lower() == filters["rent"].lower()
205
-
206
- # Фильтрация по цене
207
- if "price_min" in filters and "price_max" in filters:
208
- mask &= (dataframe["price"] >= filters["price_min"]) & (dataframe["price"] <= filters["price_max"])
209
- elif "price_min" in filters:
210
- mask &= dataframe["price"] >= filters["price_min"]
211
- elif "price_max" in filters:
212
- mask &= dataframe["price"] <= filters["price_max"]
213
- # Фильтрация по площади
214
- if "area_min" in filters and "area_max" in filters:
215
- mask &= (dataframe["area"] >= filters["area_min"]) & (dataframe["area"] <= filters["area_max"])
216
- elif "area_min" in filters:
217
- mask &= dataframe["area"] >= filters["area_min"]
218
- elif "area_max" in filters:
219
- mask &= dataframe["area"] <= filters["area_max"]
220
- results = dataframe[mask]
221
- # Проверяем, есть ли результаты
222
- if not results.empty:
223
- return results.to_dict(orient="records") # Возвращаем список словарей
224
- # Fallback: Если нет подходящих объектов, предлагаем все объекты данного типа
225
- if "type" in filters:
226
- fallback_mask = dataframe["type"].str.lower().isin(filters["type"])
227
- fallback_results = dataframe[fallback_mask]
228
- if not fallback_results.empty:
229
- return {"fallback": True, "results": fallback_results.to_dict(orient="records")} # Возвращаем fallback-результаты
230
- return [] # Возвращаем пустой список, если ничего не найдено
231
 
232
  # Создание контекста для модели
233
  def create_context(dataframe, filters):
 
61
  base_types = ["офис", "квартира", "апартаменты", "свободное назначение", "студия", "дом", "ОСЗ"]
62
 
63
 
64
+
65
  # Анализ запроса пользователя
66
  def analyze_query(query):
67
  query = query.lower()
 
97
  else:
98
  return int(number)
99
 
 
100
  # Поиск цены
101
  price_keywords = ["руб", "р.", "рублей", "рубля"]
102
  price_range_match = re.findall(rf"от\s*(\d+[\s]*[.,]?\d*)\s*до\s*(\d+[\s]*[.,]?\d*)\s*({'|'.join(price_keywords)})\b", query)
 
109
  filters["price_min"] = normalized_price_min
110
  filters["price_max"] = normalized_price_max
111
 
112
+ # Обработка остальных случаев (до/от)
113
  price_match = re.findall(rf"(до|\s*)(\d+[\s]*[.,]?\d*)\s*(млн|тр|т\.р|тыс|тысруб|тыс\.руб|тр|т\.р.|тыр|тыр.|тыщ|тыш|тысяч|млнруб|млн\.руб|мн|М|миллионов|милионов|лямов|лимонов)?\s*({'|'.join(price_keywords)})\b", query)
114
  if price_match:
115
  operator = price_match[0][0]
 
121
  else:
122
  filters["price_min"] = normalized_price
123
 
 
124
  # Поиск площади
125
  area_keywords = ["квм", "кв.м", "кв метров", "кв м", "кв.м.", "квадратов", "квадрата", "м2", "метров", "м²"]
126
  area_range_match = re.findall(rf"от\s*(\d+[\s]*[.,]?\d*)\s*до\s*(\d+[\s]*[.,]?\d*)\s*({'|'.join(area_keywords)})\b", query)
 
133
  filters["area_min"] = normalized_area_min
134
  filters["area_max"] = normalized_area_max
135
 
136
+ # Обработка остальных случаев (до/от)
137
+ area_min_match = re.findall(rf"\b(от)\s*(\d+)\s*({'|'.join(area_keywords)})", query)
138
+ area_max_match = re.findall(rf"\b(до)\s*(\d+)\s*({'|'.join(area_keywords)})", query)
139
+ if area_min_match:
140
+ filters["area_min"] = int(area_min_match[0][1])
141
+ if area_max_match:
142
+ filters["area_max"] = int(area_max_match[0][1])
 
 
 
 
 
 
 
 
 
 
 
 
143
 
144
+ return filters
145
 
146
 
147
  # Поиск объектов недвижимости в CSV
148
+ def search_real_estate(dataframe, filters):
149
  if not filters:
150
  return []
151
 
 
177
 
178
  # Возвращаем все подходящие объекты
179
  return dataframe[mask].to_dict(orient="records")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
 
181
  # Создание контекста для модели
182
  def create_context(dataframe, filters):