VladGeekPro commited on
Commit
41a9860
·
1 Parent(s): edaed12

fixedTimeToUnixTimestampFromISOTime

Browse files
Files changed (1) hide show
  1. duckling_client.py +14 -8
duckling_client.py CHANGED
@@ -9,7 +9,8 @@ DUCKLING_URL = os.getenv("DUCKLING_URL", "http://localhost:8000/parse")
9
  def parse_date_with_duckling(
10
  text: str,
11
  locale: str = "ru_RU",
12
- reference_time: Optional[datetime] = None
 
13
  ) -> Optional[str]:
14
  """
15
  Извлекает дату из текста с помощью Duckling.
@@ -18,6 +19,7 @@ def parse_date_with_duckling(
18
  text: Текст для парсинга (например: "завтра", "через 2 дня", "15 января 2025")
19
  locale: Локаль для парсинга (ru_RU для русского)
20
  reference_time: Опорное время для относительных дат (по умолчанию - сейчас)
 
21
 
22
  Returns:
23
  ISO дата (YYYY-MM-DD) или None если дата не найдена
@@ -25,8 +27,8 @@ def parse_date_with_duckling(
25
  if reference_time is None:
26
  reference_time = datetime.now()
27
 
28
- # Формат времени для Duckling: "2026-04-19T12:00:00+03:00"
29
- ref_time_str = reference_time.strftime("%Y-%m-%dT%H:%M:%S+00:00")
30
 
31
  try:
32
  response = requests.post(
@@ -34,8 +36,9 @@ def parse_date_with_duckling(
34
  data={
35
  "locale": locale,
36
  "text": text,
37
- "dims": '["time"]', # Извлекаем только даты/время
38
- "reftime": ref_time_str
 
39
  },
40
  timeout=5
41
  )
@@ -70,7 +73,8 @@ def parse_date_with_duckling(
70
  def parse_all_dates_with_duckling(
71
  text: str,
72
  locale: str = "ru_RU",
73
- reference_time: Optional[datetime] = None
 
74
  ) -> list[dict]:
75
  """
76
  Извлекает все даты из текста.
@@ -81,7 +85,8 @@ def parse_all_dates_with_duckling(
81
  if reference_time is None:
82
  reference_time = datetime.now()
83
 
84
- ref_time_str = reference_time.strftime("%Y-%m-%dT%H:%M:%S+00:00")
 
85
 
86
  try:
87
  response = requests.post(
@@ -90,7 +95,8 @@ def parse_all_dates_with_duckling(
90
  "locale": locale,
91
  "text": text,
92
  "dims": '["time"]',
93
- "reftime": ref_time_str
 
94
  },
95
  timeout=5
96
  )
 
9
  def parse_date_with_duckling(
10
  text: str,
11
  locale: str = "ru_RU",
12
+ reference_time: Optional[datetime] = None,
13
+ timezone: str = "Europe/Moscow"
14
  ) -> Optional[str]:
15
  """
16
  Извлекает дату из текста с помощью Duckling.
 
19
  text: Текст для парсинга (например: "завтра", "через 2 дня", "15 января 2025")
20
  locale: Локаль для парсинга (ru_RU для русского)
21
  reference_time: Опорное время для относительных дат (по умолчанию - сейчас)
22
+ timezone: Часовой пояс
23
 
24
  Returns:
25
  ISO дата (YYYY-MM-DD) или None если дата не найдена
 
27
  if reference_time is None:
28
  reference_time = datetime.now()
29
 
30
+ # Duckling требует Unix timestamp в миллисекундах
31
+ ref_time_ms = int(reference_time.timestamp() * 1000)
32
 
33
  try:
34
  response = requests.post(
 
36
  data={
37
  "locale": locale,
38
  "text": text,
39
+ "dims": '["time"]',
40
+ "reftime": ref_time_ms,
41
+ "tz": timezone
42
  },
43
  timeout=5
44
  )
 
73
  def parse_all_dates_with_duckling(
74
  text: str,
75
  locale: str = "ru_RU",
76
+ reference_time: Optional[datetime] = None,
77
+ timezone: str = "Europe/Moscow"
78
  ) -> list[dict]:
79
  """
80
  Извлекает все даты из текста.
 
85
  if reference_time is None:
86
  reference_time = datetime.now()
87
 
88
+ # Duckling требует Unix timestamp в миллисекундах
89
+ ref_time_ms = int(reference_time.timestamp() * 1000)
90
 
91
  try:
92
  response = requests.post(
 
95
  "locale": locale,
96
  "text": text,
97
  "dims": '["time"]',
98
+ "reftime": ref_time_ms,
99
+ "tz": timezone
100
  },
101
  timeout=5
102
  )