boompack commited on
Commit
2c5fbe9
·
verified ·
1 Parent(s): 1d8eb20

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -32
app.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from dataclasses import dataclass, field
2
  from typing import List, Optional, Dict, Any
3
  import re
@@ -17,7 +18,6 @@ logger = logging.getLogger(__name__)
17
  class Comment:
18
  """
19
  Представляет комментарий Instagram со всеми метаданными и вложенной структурой.
20
-
21
  Attributes:
22
  id: Уникальный идентификатор комментария
23
  username: Имя пользователя
@@ -69,7 +69,6 @@ class InstagramCommentAnalyzer:
69
  def __init__(self, max_depth: int = 10, max_comment_length: int = 2200):
70
  """
71
  Инициализация анализатора с настраиваемыми параметрами.
72
-
73
  Args:
74
  max_depth: Максимальная глубина вложенности комментариев
75
  max_comment_length: Максимальная длина комментария
@@ -88,13 +87,25 @@ class InstagramCommentAnalyzer:
88
  'processed_hashtags': 0
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  def normalize_text(self, text: str) -> str:
92
  """
93
  Нормализация входного текста.
94
-
95
  Args:
96
  text: Исходный текст
97
-
98
  Returns:
99
  Нормализованный текст
100
  """
@@ -109,7 +120,6 @@ class InstagramCommentAnalyzer:
109
  def extract_metadata(self, comment: Comment) -> None:
110
  """
111
  Извлечение метаданных из комментария.
112
-
113
  Args:
114
  comment: Объект комментария
115
  """
@@ -127,12 +137,10 @@ class InstagramCommentAnalyzer:
127
  def process_comment(self, text: str, parent_id: Optional[str] = None, level: int = 0) -> Optional[Comment]:
128
  """
129
  Обработка отдельного комментария.
130
-
131
  Args:
132
  text: Текст комментария
133
  parent_id: ID родительского комментария
134
  level: Уровень вложенности
135
-
136
  Returns:
137
  Обработанный объект Comment или None
138
  """
@@ -164,6 +172,9 @@ class InstagramCommentAnalyzer:
164
  self.stats['truncated_comments'] += 1
165
  comment.content = comment.content[:self.max_comment_length] + "..."
166
 
 
 
 
167
  self.extract_metadata(comment)
168
  self.stats['total_comments'] += 1
169
  return comment
@@ -182,11 +193,9 @@ class InstagramCommentAnalyzer:
182
  def format_comment(self, comment: Comment, index: int) -> str:
183
  """
184
  Форматирование комментария для вывода.
185
-
186
  Args:
187
  comment: Объект комментария
188
  index: Номер комментария
189
-
190
  Returns:
191
  Отформатированная строка комментария
192
  """
@@ -195,16 +204,14 @@ class InstagramCommentAnalyzer:
195
 
196
  return (
197
  f'{index}. "{comment.username}" "{comment.time}" '
198
- f'"{comment.content}" "Нравится {comment.likes}"'
199
  )
200
 
201
  def process_comments(self, text: str) -> List[str]:
202
  """
203
  Обработка всех комментариев в тексте.
204
-
205
  Args:
206
  text: Исходный текст с комментариями
207
-
208
  Returns:
209
  Список отформатированных комментариев
210
  """
@@ -234,28 +241,15 @@ def main():
234
  Пример использования анализатора.
235
  """
236
  # Пример входного текста
237
- input_text = """
238
- 0001.minakov 53 нед.А что такое для,Вас Василина,волшебство?Отметки "Нравится": 3ОтветитьНравится
239
- aliyllmn 54 нед.seni seviyorum:)Отметки "Нравится": 2ОтветитьПоказать переводНравится
240
  """
241
 
242
- # Создание экземпляра анализатора
243
- analyzer = InstagramCommentAnalyzer(max_depth=10)
244
-
245
- # Обработка комментариев
246
- results = analyzer.process_comments(input_text)
247
-
248
- # Вывод результатов
249
- print("\nОбработанные комментарии:")
250
- print("-" * 50)
251
- for result in results:
252
- print(result)
253
-
254
- # Вывод статистики
255
- print("\nСтатистика обработки:")
256
- print("-" * 50)
257
- for key, value in analyzer.stats.items():
258
- print(f"{key}: {value}")
259
 
260
  if __name__ == "__main__":
261
  main()
 
1
+ from transformers import pipeline
2
  from dataclasses import dataclass, field
3
  from typing import List, Optional, Dict, Any
4
  import re
 
18
  class Comment:
19
  """
20
  Представляет комментарий Instagram со всеми метаданными и вложенной структурой.
 
21
  Attributes:
22
  id: Уникальный идентификатор комментария
23
  username: Имя пользователя
 
69
  def __init__(self, max_depth: int = 10, max_comment_length: int = 2200):
70
  """
71
  Инициализация анализатора с настраиваемыми параметрами.
 
72
  Args:
73
  max_depth: Максимальная глубина вложенности комментариев
74
  max_comment_length: Максимальная длина комментария
 
87
  'processed_hashtags': 0
88
  }
89
 
90
+ # Инициализация модели Hugging Face для анализа настроений
91
+ self.sentiment_analyzer = pipeline("sentiment-analysis")
92
+
93
+ def analyze_sentiment(self, text: str) -> str:
94
+ """
95
+ Анализ настроений в комментарии с использованием модели Hugging Face.
96
+ Args:
97
+ text: Текст комментария
98
+ Returns:
99
+ Строка с меткой настроения ('POSITIVE' или 'NEGATIVE')
100
+ """
101
+ result = self.sentiment_analyzer(text)
102
+ return result[0]['label']
103
+
104
  def normalize_text(self, text: str) -> str:
105
  """
106
  Нормализация входного текста.
 
107
  Args:
108
  text: Исходный текст
 
109
  Returns:
110
  Нормализованный текст
111
  """
 
120
  def extract_metadata(self, comment: Comment) -> None:
121
  """
122
  Извлечение метаданных из комментария.
 
123
  Args:
124
  comment: Объект комментария
125
  """
 
137
  def process_comment(self, text: str, parent_id: Optional[str] = None, level: int = 0) -> Optional[Comment]:
138
  """
139
  Обработка отдельного комментария.
 
140
  Args:
141
  text: Текст комментария
142
  parent_id: ID родительского комментария
143
  level: Уровень вложенности
 
144
  Returns:
145
  Обработанный объект Comment или None
146
  """
 
172
  self.stats['truncated_comments'] += 1
173
  comment.content = comment.content[:self.max_comment_length] + "..."
174
 
175
+ # Добавление анализа настроений
176
+ comment.sentiment = self.analyze_sentiment(comment.content)
177
+
178
  self.extract_metadata(comment)
179
  self.stats['total_comments'] += 1
180
  return comment
 
193
  def format_comment(self, comment: Comment, index: int) -> str:
194
  """
195
  Форматирование комментария для вывода.
 
196
  Args:
197
  comment: Объект комментария
198
  index: Номер комментария
 
199
  Returns:
200
  Отформатированная строка комментария
201
  """
 
204
 
205
  return (
206
  f'{index}. "{comment.username}" "{comment.time}" '
207
+ f'"{comment.content}" "Нравится {comment.likes}" "Настроение {comment.sentiment}"'
208
  )
209
 
210
  def process_comments(self, text: str) -> List[str]:
211
  """
212
  Обработка всех комментариев в тексте.
 
213
  Args:
214
  text: Исходный текст с комментариями
 
215
  Returns:
216
  Список отформатированных комментариев
217
  """
 
241
  Пример использования анализатора.
242
  """
243
  # Пример входного текста
244
+ example_text = """
245
+ user1 2 нед. This is a positive comment! Отметки "Нравится": 25
246
+ user2 3 нед. This is a negative comment! Отметки "Нравится": 5
247
  """
248
 
249
+ analyzer = InstagramCommentAnalyzer()
250
+ formatted_comments = analyzer.process_comments(example_text)
251
+ for formatted_comment in formatted_comments:
252
+ print(formatted_comment)
 
 
 
 
 
 
 
 
 
 
 
 
 
253
 
254
  if __name__ == "__main__":
255
  main()