VladGeekPro commited on
Commit
c743599
·
1 Parent(s): e23c8c3

SupplierDebugging

Browse files
app.py CHANGED
@@ -29,7 +29,6 @@ from extractors import (
29
  # HuggingFace Token (если нужен для моделей)
30
  HF_TOKEN = os.getenv("HF_TOKEN")
31
 
32
- DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
33
  _WHISPER_MODEL: Optional[Any] = None
34
  _WHISPER_PROCESSOR: Optional[Any] = None
35
 
@@ -64,76 +63,78 @@ TEST_PHRASES = [
64
  "Через 3 дня Влад был в Wellness & spa Thermal на 1200,70 лей",
65
  "вчера Олечка заплатил в вольта 425,40 лей",
66
  "Сегодня Олюня купил в velmart на 755,50 лей",
67
- "Вчера Оля платил в vatsak 185,80 лей",
68
- "Сегодня был в Vasconi на 455,30 lei",
69
- "Вчера платил в Valconi 325,90 lei",
70
- "Сегодня заказал в тему на 895,60 лей",
71
- "Вчера купил в temix на 185,50 лей",
72
- "Сегодня оплатил в телемаркет Крикова 655,80 лей",
73
- "Вчера был в такуме на 425,7 лей",
74
- "Сегодня купил в tagaer на 285,40 лей",
75
- "Вчера оплатил в Supraten 1200,50 лень",
76
- "Сегодня был в стоматологии о фамилии на 455,90 лень",
77
- "Я на следующей неделе заказал в стартур билеты на 855,60 лень",
78
- "Сегодня оплатил в Sankos 245,70 лей",
79
- "Вчера купил в Samurai на 325,40 лей",
80
- "Сегодня был в Salomer на 185,50 lei",
81
- "Вчера купил vragob na 655,80 lei",
82
- "Сегодня купил в primul discounter на 425,03 лей",
83
- "Вчера оплатил Premier Energy 985,90 lei",
84
  "Сегодня заказали в пицце 9 на 285,60 лей",
85
- "На прошлой неделе ходили в piața centrală, купили на 455,7 lei",
86
- "Сегодня купил в peon farm на 325,40 лей",
87
- "Вчера Wallach купила в Peach Girl на 755,50 лей",
 
 
88
  "Через 2 дня купил в Pandashop на 895,80 лей",
89
- "Pazavchora był vivația i kupil na 185,30 lei",
90
- "Сегодня оплатил в oldcom 655,90 лей",
91
- "Вчера купил рыбу в Ocean Fish на 280 lei",
92
- "Сегодня купил в номер 1 на 420 лей",
93
- "вчера воля купила в nanu market на 250 lei",
94
- "Сегодня купил в Mozza на 380 lei",
95
- "Вчера оплатил moldpressa 90 lei",
96
- "Сегодня заплатил в Moldova-Presa 180 lei",
97
- "Вчера платил MoldovaGaz 1250 lei",
98
- "Сегодня был в modus vivendi, я ставил 420 lei",
99
- "Вчера купил в Micov na 150 lei",
100
- "Сегодня оплатил в метрах 890,13 лей",
101
- "Вчера купил в Мерси на 210 lei",
102
- "Сегодня заплатил в Megapolis 680 lei",
103
- "Вчера Оля купила лекарство в Medical Market на 340 лей",
104
- "Сегодня оплатил в максимум 450 lei",
105
- "Вчера купил десерт в maestro delice на 120 lei",
106
- "Сегодня оплатил в maestro 750 lei",
107
- "вчера оля купила в local на 190 лей",
108
  "Сегодня был в Linelo 115 и купил на 280 лей",
109
  "Вчера купил продукты в Linel на 420,55 лей",
110
  "Сегодня оплатил vats 320 lei",
111
- "Вчера Олечка была в Kiss Beauty Salon на 450 lei",
112
- "Сегодня купил кебаб в кебаб на 150 лей",
113
- "Вчера Оля была в Кауфленд и потратила 890,15 лей",
114
- "Сегодня купил в cat shop на 650 lei",
115
- "Вчера вечером был выкатан суши на 300 восьятлей",
116
- "Оля вчера заказала в Joom на 1200 lei",
117
- "Сегодня купили рассаду в Ярди Маркет на 280 лей",
118
- "Вчера Влад оплатил в uiti credit 950 lei",
119
- "Сегодня оплатил в U.T. Credit очередной платеж 1800 лей",
120
- "Вчера заказал в iherb витамина на 420 лей",
121
- "На прошлой неделе покупали в Ярмареку на 950,13 лей",
122
- "Оля вчера была в Хипократис и оставила 650 lei",
123
- "Сегодня я купил витамины в herb на 180 лей",
124
- "Вчера купил хлеб в Граньер на 70 лей",
125
- "Сегодня ходил в Global Store за техникой на 2100 лей",
126
- "Вчера я оплатил интернет в Giganet 450,35 лей",
127
- "Сегодня Оля купила хлеб Франзелуца на 80 петлей",
128
- "вчера купил рыбу в эфилете на 420 лей",
129
- "На прошлой неделе заплатил в Fidesco 1300 lei",
130
- "Сегодня Влад был в Феличи и купил сыр на 95 лей",
131
- "Вчера вечером купили fast food на 180 lei",
132
- "Олечка вчера купила лекарство фармачия Familia на 240 лей",
133
- "Я сегодня утром оплатил Eurotelicom 310 lei",
134
- "Вчера Владислав оплатил энергоком 560 lei",
135
- "Сегодня оплатил в Елика 420 лей",
136
- "На следующей неделе в субботу хочу зайти в дёйнер-кебаб",
137
  ]
138
 
139
 
@@ -443,7 +444,7 @@ def health():
443
  @app.get("/test-data")
444
  def test_data():
445
  """Тестирует извлечение данных из текста без использования Whisper."""
446
- debug = (request.args.get("debug") or "").strip().lower() in {"1", "true", "yes"}
447
  extractor = build_default_pipeline(suppliers=TEST_SUPPLIERS, users=TEST_USERS)
448
 
449
  started = time.time()
 
29
  # HuggingFace Token (если нужен для моделей)
30
  HF_TOKEN = os.getenv("HF_TOKEN")
31
 
 
32
  _WHISPER_MODEL: Optional[Any] = None
33
  _WHISPER_PROCESSOR: Optional[Any] = None
34
 
 
63
  "Через 3 дня Влад был в Wellness & spa Thermal на 1200,70 лей",
64
  "вчера Олечка заплатил в вольта 425,40 лей",
65
  "Сегодня Олюня купил в velmart на 755,50 лей",
66
+ # "Вчера Оля платил в vatsak 185,80 лей",
67
+ # "Сегодня был в Vasconi на 455,30 lei",
68
+ # "Вчера платил в Valconi 325,90 lei",
69
+ # "Сегодня заказал в тему на 895,60 лей",
70
+ # "Вчера купил в temix на 185,50 лей",
71
+ # "Сегодня оплатил в телемаркет Крикова 655,80 лей",
72
+ # "Вчера был в такуме на 425,7 лей",
73
+ # "Сегодня купил в tagaer на 285,40 лей",
74
+ # "Вчера оплатил в Supraten 1200,50 лень",
75
+ # "Сегодня был в стоматологии о фамилии на 455,90 лень",
76
+ # "Я на следующей неделе заказал в стартур билеты на 855,60 лень",
77
+ # "Сегодня оплатил в Sankos 245,70 лей",
78
+ # "Вчера купил в Samurai на 325,40 лей",
79
+ # "Сегодня был в Salomer на 185,50 lei",
80
+ # "Вчера купил vragob na 655,80 lei",
81
+ # "Сегодня купил в primul discounter на 425,03 лей",
82
+ # "Вчера оплатил Premier Energy 985,90 lei",
83
  "Сегодня заказали в пицце 9 на 285,60 лей",
84
+ "Сегодня заказали в пицце 91 на 285,60 лей",
85
+ "Сегодня заказали в пицце 912 на 285,60 лей",
86
+ # "На прошлой неделе ходили в piața centrală, купили на 455,7 lei",
87
+ # "Сегодня купил в peon farm на 325,40 лей",
88
+ # "Вчера Wallach купила в Peach Girl на 755,50 лей",
89
  "Через 2 дня купил в Pandashop на 895,80 лей",
90
+ # "Pazavchora był vivația i kupil na 185,30 lei",
91
+ # "Сегодня оплатил в oldcom 655,90 лей",
92
+ # "Вчера купил рыбу в Ocean Fish на 280 lei",
93
+ # "Сегодня купи�� в номер 1 на 420 лей",
94
+ # "вчера воля купила в nanu market на 250 lei",
95
+ # "Сегодня купил в Mozza на 380 lei",
96
+ # "Вчера оплатил moldpressa 90 lei",
97
+ # "Сегодня заплатил в Moldova-Presa 180 lei",
98
+ # "Вчера платил MoldovaGaz 1250 lei",
99
+ # "Сегодня был в modus vivendi, я ставил 420 lei",
100
+ # "Вчера купил в Micov na 150 lei",
101
+ # "Сегодня оплатил в метрах 890,13 лей",
102
+ # "Вчера купил в Мерси на 210 lei",
103
+ # "Сегодня заплатил в Megapolis 680 lei",
104
+ # "Вчера Оля купила лекарство в Medical Market на 340 лей",
105
+ # "Сегодня оплатил в максимум 450 lei",
106
+ # "Вчера купил десерт в maestro delice на 120 lei",
107
+ # "Сегодня оплатил в maestro 750 lei",
108
+ # "вчера оля купила в local на 190 лей",
109
  "Сегодня был в Linelo 115 и купил на 280 лей",
110
  "Вчера купил продукты в Linel на 420,55 лей",
111
  "Сегодня оплатил vats 320 lei",
112
+ # "Вчера Олечка была в Kiss Beauty Salon на 450 lei",
113
+ # "Сегодня купил кебаб в кебаб на 150 лей",
114
+ # "Вчера Оля была в Кауфленд и потратила 890,15 лей",
115
+ # "Сегодня купил в cat shop на 650 lei",
116
+ # "Вчера вечером был выкатан суши на 300 восьятлей",
117
+ # "Оля вчера заказала в Joom на 1200 lei",
118
+ # "Сегодня купили рассаду в Ярди Маркет на 280 лей",
119
+ # "Вчера Влад оплатил в uiti credit 950 lei",
120
+ # "Сегодня оплатил в U.T. Credit очередной платеж 1800 лей",
121
+ # "Вчера заказал в iherb витамина на 420 лей",
122
+ # "На прошлой неделе покупали в Ярмареку на 950,13 лей",
123
+ # "Оля вчера была в Хипократис и оставила 650 lei",
124
+ # "Сегодня я купил витамины в herb на 180 лей",
125
+ # "Вчера купил хлеб в Граньер на 70 лей",
126
+ # "Сегодня ходил в Global Store за техникой на 2100 лей",
127
+ # "Вчера я оплатил интернет в Giganet 450,35 лей",
128
+ # "Сегодня Оля купила хлеб Франзелуца на 80 петлей",
129
+ # "вчера купил рыбу в эфилете на 420 лей",
130
+ # "На прошлой неделе заплатил в Fidesco 1300 lei",
131
+ # "Сегодня Влад был в Феличи и купил сыр на 95 лей",
132
+ # "Вчера вечером купили fast food на 180 lei",
133
+ # "Олечка вчера ��упила лекарство фармачия Familia на 240 лей",
134
+ # "Я сегодня утром оплатил Eurotelicom 310 lei",
135
+ # "Вчера Владислав оплатил энергоком 560 lei",
136
+ # "Сегодня оплатил в Елика 420 лей",
137
+ # "На следующей неделе в субботу хочу зайти в дёйнер-кебаб",
138
  ]
139
 
140
 
 
444
  @app.get("/test-data")
445
  def test_data():
446
  """Тестирует извлечение данных из текста без использования Whisper."""
447
+ debug = (request.args.get("debug") or "1").strip().lower() in {"1", "true", "yes"}
448
  extractor = build_default_pipeline(suppliers=TEST_SUPPLIERS, users=TEST_USERS)
449
 
450
  started = time.time()
extractors/amount_extractor.py CHANGED
@@ -70,6 +70,8 @@ class ExpenseAmountExtractor:
70
  payload = {"amount": amount, "amount_text": amount_text}
71
  if debug:
72
  payload["amount_debug"] = {
 
 
73
  "date_span": list(date_span) if date_span else None,
74
  "supplier_span": list(supplier_span) if supplier_span else None,
75
  "candidates": candidates,
@@ -80,6 +82,8 @@ class ExpenseAmountExtractor:
80
  payload = {"amount": None, "amount_text": None}
81
  if debug:
82
  payload["amount_debug"] = {
 
 
83
  "date_span": list(date_span) if date_span else None,
84
  "supplier_span": list(supplier_span) if supplier_span else None,
85
  "candidates": candidates,
 
70
  payload = {"amount": amount, "amount_text": amount_text}
71
  if debug:
72
  payload["amount_debug"] = {
73
+ "matched_date_phrase": matched_date_phrase,
74
+ "matched_supplier_phrase": matched_supplier_phrase,
75
  "date_span": list(date_span) if date_span else None,
76
  "supplier_span": list(supplier_span) if supplier_span else None,
77
  "candidates": candidates,
 
82
  payload = {"amount": None, "amount_text": None}
83
  if debug:
84
  payload["amount_debug"] = {
85
+ "matched_date_phrase": matched_date_phrase,
86
+ "matched_supplier_phrase": matched_supplier_phrase,
87
  "date_span": list(date_span) if date_span else None,
88
  "supplier_span": list(supplier_span) if supplier_span else None,
89
  "candidates": candidates,
extractors/date_extractor.py CHANGED
@@ -507,10 +507,18 @@ class ExpenseDateExtractor:
507
  ref_date = self.to_date(reference_date or date.today().isoformat())
508
  parsed = self.parser.parse(text=text, reference_date=ref_date)
509
 
 
 
 
 
 
 
 
510
  payload = {
511
  "date": datetime.strptime(parsed.date_iso, "%Y-%m-%d").strftime("%d.%m.%Y") if parsed else None,
512
  "date_iso": parsed.date_iso if parsed else None,
513
- "matched_date_phrase": parsed.matched_expression if parsed else None,
 
514
  }
515
 
516
  if debug:
@@ -518,6 +526,7 @@ class ExpenseDateExtractor:
518
  "reference_date": ref_date.isoformat(),
519
  "input_text": text,
520
  "matched_date_phrase": payload["matched_date_phrase"],
 
521
  "date_iso": payload["date_iso"],
522
  }
523
 
 
507
  ref_date = self.to_date(reference_date or date.today().isoformat())
508
  parsed = self.parser.parse(text=text, reference_date=ref_date)
509
 
510
+ matched_phrase = parsed.matched_expression if parsed else None
511
+ matched_span = None
512
+ if matched_phrase:
513
+ idx = text.lower().find(matched_phrase.lower())
514
+ if idx != -1:
515
+ matched_span = [idx, idx + len(matched_phrase)]
516
+
517
  payload = {
518
  "date": datetime.strptime(parsed.date_iso, "%Y-%m-%d").strftime("%d.%m.%Y") if parsed else None,
519
  "date_iso": parsed.date_iso if parsed else None,
520
+ "matched_date_phrase": matched_phrase,
521
+ "matched_date_span": matched_span,
522
  }
523
 
524
  if debug:
 
526
  "reference_date": ref_date.isoformat(),
527
  "input_text": text,
528
  "matched_date_phrase": payload["matched_date_phrase"],
529
+ "matched_date_span": payload["matched_date_span"],
530
  "date_iso": payload["date_iso"],
531
  }
532
 
requirements.txt CHANGED
@@ -8,6 +8,4 @@ dateparser
8
  python-dateutil
9
  iuliia
10
  torch
11
- sentence-transformers
12
  scikit-learn
13
- gliner
 
8
  python-dateutil
9
  iuliia
10
  torch
 
11
  scikit-learn