Misnik commited on
Commit
ef4de25
·
verified ·
1 Parent(s): 06a3c28

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -19
app.py CHANGED
@@ -1,14 +1,13 @@
1
  import gradio as gr
2
  from keybert import KeyBERT
3
  from sentence_transformers import SentenceTransformer
4
- from nltk.tokenize import sent_tokenize
5
  from langdetect import detect
6
- import nltk
7
 
8
- # Загружаем ресурсы для токенизации
9
- nltk.download('punkt')
 
10
 
11
- # Поддерживаемые языки
12
  SUPPORTED_LANGUAGES = {
13
  "en": "english",
14
  "es": "spanish",
@@ -19,10 +18,6 @@ SUPPORTED_LANGUAGES = {
19
  "ar": "arabic"
20
  }
21
 
22
- # Инициализация модели
23
- model = SentenceTransformer('all-mpnet-base-v2')
24
- kw_model = KeyBERT(model)
25
-
26
  def detect_language(text):
27
  """
28
  Определение языка текста.
@@ -31,17 +26,20 @@ def detect_language(text):
31
  lang = detect(text)
32
  return SUPPORTED_LANGUAGES.get(lang, "english") # По умолчанию английский
33
  except:
34
- return "english" # Если язык не определён
35
 
36
  def segment_text(text, max_segment_length=1000):
37
  """
38
- Разделение текста на блоки, предпочтительно по предложениям.
39
  """
40
- language = detect_language(text)
41
- sentences = sent_tokenize(text, language=language) # Учитываем язык токенизации
 
 
 
42
  segments = []
43
  current_segment = ""
44
-
45
  for sentence in sentences:
46
  if len(current_segment) + len(sentence) <= max_segment_length:
47
  current_segment += " " + sentence
@@ -51,7 +49,7 @@ def segment_text(text, max_segment_length=1000):
51
 
52
  if current_segment:
53
  segments.append(current_segment.strip())
54
-
55
  return segments
56
 
57
  def postprocess_keywords(keywords):
@@ -63,12 +61,10 @@ def postprocess_keywords(keywords):
63
 
64
  for kw in sorted(keywords, key=lambda x: len(x[0]), reverse=True):
65
  if kw[0] not in seen:
66
- # Удаляем вложенные ключи
67
  if not any(kw[0] in u_kw[0] for u_kw in unique_keywords):
68
  unique_keywords.append(kw)
69
  seen.add(kw[0])
70
-
71
- # Удаляем слишком короткие ключевые слова
72
  filtered_keywords = [
73
  kw for kw in unique_keywords if len(kw[0].split()) > 1
74
  ]
@@ -94,7 +90,6 @@ def extract_keywords_interface(text, top_n=10, diversity=0.5, max_ngram=3):
94
  )
95
  all_keywords.extend(keywords)
96
 
97
- # Постобработка: удаление повторений и вложений
98
  processed_keywords = postprocess_keywords(all_keywords)
99
 
100
  return [{"keyword": kw[0], "score": kw[1]} for kw in processed_keywords]
 
1
  import gradio as gr
2
  from keybert import KeyBERT
3
  from sentence_transformers import SentenceTransformer
 
4
  from langdetect import detect
5
+ import re
6
 
7
+ # Инициализация модели
8
+ model = SentenceTransformer('all-mpnet-base-v2')
9
+ kw_model = KeyBERT(model)
10
 
 
11
  SUPPORTED_LANGUAGES = {
12
  "en": "english",
13
  "es": "spanish",
 
18
  "ar": "arabic"
19
  }
20
 
 
 
 
 
21
  def detect_language(text):
22
  """
23
  Определение языка текста.
 
26
  lang = detect(text)
27
  return SUPPORTED_LANGUAGES.get(lang, "english") # По умолчанию английский
28
  except:
29
+ return "english"
30
 
31
  def segment_text(text, max_segment_length=1000):
32
  """
33
+ Разделение текста на блоки по предложениям без использования punkt.
34
  """
35
+ # Определяем язык (может быть полезно для будущих улучшений)
36
+ detect_language(text)
37
+
38
+ # Разбиваем текст на предложения по точкам, восклицательным и вопросительным знакам
39
+ sentences = re.split(r'(?<=[.!?]) +', text)
40
  segments = []
41
  current_segment = ""
42
+
43
  for sentence in sentences:
44
  if len(current_segment) + len(sentence) <= max_segment_length:
45
  current_segment += " " + sentence
 
49
 
50
  if current_segment:
51
  segments.append(current_segment.strip())
52
+
53
  return segments
54
 
55
  def postprocess_keywords(keywords):
 
61
 
62
  for kw in sorted(keywords, key=lambda x: len(x[0]), reverse=True):
63
  if kw[0] not in seen:
 
64
  if not any(kw[0] in u_kw[0] for u_kw in unique_keywords):
65
  unique_keywords.append(kw)
66
  seen.add(kw[0])
67
+
 
68
  filtered_keywords = [
69
  kw for kw in unique_keywords if len(kw[0].split()) > 1
70
  ]
 
90
  )
91
  all_keywords.extend(keywords)
92
 
 
93
  processed_keywords = postprocess_keywords(all_keywords)
94
 
95
  return [{"keyword": kw[0], "score": kw[1]} for kw in processed_keywords]