Misnik commited on
Commit
e077f75
·
verified ·
1 Parent(s): a2c991c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -38
app.py CHANGED
@@ -1,50 +1,47 @@
1
- import gradio as gr
2
  from keybert import KeyBERT
3
- from nltk.tokenize import sent_tokenize
4
-
5
- # Инициализируем KeyBERT с заданной моделью
6
  from sentence_transformers import SentenceTransformer
7
- model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
 
 
8
  kw_model = KeyBERT(model)
9
 
10
- # Функция извлечения ключевых слов
11
- def extract_keywords(text, top_n=10, diversity=0.5, use_maxsum=False, max_ngram=3):
 
 
 
 
 
 
 
 
12
  if not text or not text.strip():
13
  return []
14
-
15
- # Разбиваем текст на абзацы
16
- segments = sent_tokenize(text)
17
-
18
  all_keywords = []
 
 
19
  for segment in segments:
20
  keywords = kw_model.extract_keywords(
21
  segment,
22
- keyphrase_ngram_range=(1, max_ngram),
23
- top_n=top_n,
24
- diversity=diversity,
25
- use_maxsum=use_maxsum,
26
- stop_words="english"
27
  )
28
  all_keywords.extend(keywords)
29
-
30
- # Убираем дубликаты
31
- unique_keywords = list(set(all_keywords))
32
- return unique_keywords # возвращаем список кортежей (ключевое слово, оценка)
33
-
34
- # Создаем Gradio интерфейс
35
- iface = gr.Interface(
36
- fn=extract_keywords,
37
- inputs=[
38
- gr.Textbox(label="Enter text", lines=10, placeholder="Введите текст здесь"),
39
- gr.Slider(5, 50, value=10, step=1, label="Количество ключевых слов (top_n)"),
40
- gr.Slider(0.0, 1.0, value=0.5, step=0.1, label="Разнообразие ключевых слов (diversity)"),
41
- gr.Checkbox(label="Использовать MaxSum", value=False),
42
- gr.Slider(1, 3, value=3, step=1, label="Максимальная длина фраз (n-gram)")
43
- ],
44
- outputs="json",
45
- title="KeyBERT Extractor",
46
- description="Введите текст, настройте параметры и извлеките ключевые слова"
47
- )
48
-
49
- if __name__ == "__main__":
50
- iface.launch()
 
 
1
  from keybert import KeyBERT
 
 
 
2
  from sentence_transformers import SentenceTransformer
3
+
4
+ # Инициализация модели KeyBERT
5
+ model = SentenceTransformer('all-mpnet-base-v2') # Мощная модель для эмбеддингов
6
  kw_model = KeyBERT(model)
7
 
8
+ def segment_text(text, segment_size=1000):
9
+ """
10
+ Разделение текста на блоки фиксированного размера.
11
+ """
12
+ return [text[i:i+segment_size] for i in range(0, len(text), segment_size)]
13
+
14
+ def extract_keywords(text, top_n=50, diversity=0.5, max_ngram=3):
15
+ """
16
+ Извлечение ключевых слов из текста с сегментацией на блоки.
17
+ """
18
  if not text or not text.strip():
19
  return []
20
+
21
+ # Сегментируем текст на блоки по 500-1000 символов
22
+ segments = segment_text(text, segment_size=1000)
23
+
24
  all_keywords = []
25
+
26
+ # Извлекаем ключевые слова из каждого сегмента
27
  for segment in segments:
28
  keywords = kw_model.extract_keywords(
29
  segment,
30
+ keyphrase_ngram_range=(1, max_ngram), # 1-3 слова
31
+ top_n=top_n, # Максимальное число ключевых слов
32
+ diversity=diversity, # Разнообразие ключевых слов
33
+ stop_words=None # Без удаления стоп-слов
 
34
  )
35
  all_keywords.extend(keywords)
36
+
37
+ # Удаляем дубликаты ключевых слов
38
+ unique_keywords = list({kw[0]: kw for kw in all_keywords}.values())
39
+
40
+ # Преобразуем результат в JSON-формат
41
+ result = [{"keyword": kw[0], "score": kw[1]} for kw in unique_keywords]
42
+ return result
43
+
44
+ # Пример использования
45
+ text = "Ваш текст здесь. Это длинный текст, который нужно разбить и обработать."
46
+ result = extract_keywords(text)
47
+ print(result)