norhan12 commited on
Commit
0ef7f55
·
verified ·
1 Parent(s): 9be9a08

Update process_interview.py

Browse files
Files changed (1) hide show
  1. process_interview.py +28 -30
process_interview.py CHANGED
@@ -243,33 +243,31 @@ def identify_speakers(audio: Dict, text: str) -> List[Dict]:
243
  logger.error(f"Speaker identification failed: {str(e)}")
244
  raise
245
 
246
- def train_role_classifier(speakers: List[Dict]):
247
  try:
248
- speech = [u['speech'].split()]
249
- vectorizer = TfidfVectorizer(max_features=500, ngram_range=(1,2))
250
- X_text = vectorizer.fit_transform(speech)
251
  features = []
252
  labels = []
253
- for i, speaker in enumerate(speakers):
254
- utterance = speaker['speech_features']
255
  feat = [
256
- utterance['duration'], utterance['speech_rate'], utterance['duration'], utterance['mean_pitch'],
257
- utterance['min_pitch'], utterance['max_pitch'],
258
- utterance['speech_sd'], utterance['intensityLevel'],
259
- utterance['intensity_level'],
260
- utterance['speechMax']], utterance['speechSD'],
261
  ]
262
- feat.extend(X_text[i].toarray()[0])
263
- doc = nlp(speaker['speech'])
264
- speech.extend([
265
- int(speaker['speech'].endswith('?'))),
266
- len(re.findall(r'\b(why|how|what|when|where|who|which)\b', speaker['speech'].lower())),
267
- len(speaker['speech'].split())),
268
- sum(frequency for token in speech if token.pos_ == 'VERB'),
269
- sum(frequency for token in speech if token.pos == 'NOUN')
270
  ])
271
  features.append(feat)
272
- labels.append((0 if i % 2 == 0 else 1))
273
  scaler = StandardScaler()
274
  X = scaler.fit_transform(features)
275
  clf = RandomForestClassifier(
@@ -284,30 +282,30 @@ def train_role_classifier(speakers: List[Dict]):
284
  logger.error(f"Classifier training failed: {str(e)}")
285
  raise
286
 
287
- def classify_roles(speakers: List[Dict], clf, vectorizer, scaler):
288
  try:
289
- speech = [u['speech'] for u in speakers]
290
- X_text = vectorizer.transform(speech)
291
  results = []
292
- for i, speaker in enumerate(speakers):
293
- prosodic = speaker['speech_features']
294
  feat = [
295
  prosodic['duration'], prosodic['mean_pitch'], prosodic['min_pitch'],
296
  prosodic['max_pitch'], prosodic['pitch_sd'], prosodic['intensityMean'],
297
  prosodic['intensityMin'], prosodic['intensityMax'], prosodic['intensitySD'],
298
  ]
299
  feat.extend(X_text[i].toarray()[0].tolist())
300
- doc = nlp(speaker['speech'])
301
  feat.extend([
302
- int(speaker['speech'].endswith('?')),
303
- len(re.findall(r'\b(why|how|what|when|where|who|which)\b', speaker['speech'].lower())),
304
- len(speaker['speech'].split()),
305
  sum(1 for token in doc if token.pos_ == 'VERB'),
306
  sum(1 for token in doc if token.pos_ == 'NOUN')
307
  ])
308
  X = scaler.transform([feat])
309
  role = 'Interviewer' if clf.predict(X)[0] == 0 else 'Interviewee'
310
- results.append({**speaker, 'role': role})
311
  return results
312
  except Exception as e:
313
  logger.error(f"Role classification failed: {str(e)}")
 
243
  logger.error(f"Speaker identification failed: {str(e)}")
244
  raise
245
 
246
+ def train_role_classifier(utterances: List[Dict]):
247
  try:
248
+ texts = [u['text'] for u in utterances]
249
+ vectorizer = TfidfVectorizer(max_features=500, ngram_range=(1, 2))
250
+ X_text = vectorizer.fit_transform(texts)
251
  features = []
252
  labels = []
253
+ for i, utterance in enumerate(utterances):
254
+ prosodic = utterance['prosodic_features']
255
  feat = [
256
+ prosodic['duration'], prosodic['mean_pitch'], prosodic['min_pitch'],
257
+ prosodic['max_pitch'], prosodic['pitch_sd'], prosodic['intensityMean'],
258
+ prosodic['intensityMin'], prosodic['intensityMax'], prosodic['intensitySD'],
 
 
259
  ]
260
+ feat.extend(X_text[i].toarray()[0].tolist())
261
+ doc = nlp(utterance['text'])
262
+ feat.extend([
263
+ int(utterance['text'].endswith('?')),
264
+ len(re.findall(r'\b(why|how|what|when|where|who|which)\b', utterance['text'].lower())),
265
+ len(utterance['text'].split()),
266
+ sum(1 for token in doc if token.pos_ == 'VERB'),
267
+ sum(1 for token in doc if token.pos_ == 'NOUN')
268
  ])
269
  features.append(feat)
270
+ labels.append(0 if i % 2 == 0 else 1)
271
  scaler = StandardScaler()
272
  X = scaler.fit_transform(features)
273
  clf = RandomForestClassifier(
 
282
  logger.error(f"Classifier training failed: {str(e)}")
283
  raise
284
 
285
+ def classify_roles(utterances: List[Dict], clf, vectorizer, scaler):
286
  try:
287
+ texts = [u['text'] for u in utterances]
288
+ X_text = vectorizer.transform(texts)
289
  results = []
290
+ for i, utterance in enumerate(utterances):
291
+ prosodic = utterance['prosodic_features']
292
  feat = [
293
  prosodic['duration'], prosodic['mean_pitch'], prosodic['min_pitch'],
294
  prosodic['max_pitch'], prosodic['pitch_sd'], prosodic['intensityMean'],
295
  prosodic['intensityMin'], prosodic['intensityMax'], prosodic['intensitySD'],
296
  ]
297
  feat.extend(X_text[i].toarray()[0].tolist())
298
+ doc = nlp(utterance['text'])
299
  feat.extend([
300
+ int(utterance['text'].endswith('?')),
301
+ len(re.findall(r'\b(why|how|what|when|where|who|which)\b', utterance['text'].lower())),
302
+ len(utterance['text'].split()),
303
  sum(1 for token in doc if token.pos_ == 'VERB'),
304
  sum(1 for token in doc if token.pos_ == 'NOUN')
305
  ])
306
  X = scaler.transform([feat])
307
  role = 'Interviewer' if clf.predict(X)[0] == 0 else 'Interviewee'
308
+ results.append({**utterance, 'role': role})
309
  return results
310
  except Exception as e:
311
  logger.error(f"Role classification failed: {str(e)}")