-
-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathpolarity_analysis.py
87 lines (74 loc) · 2.84 KB
/
polarity_analysis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
polyglot_available = True
from google.cloud import translate_v2 as translate
try:
from polyglot.detect import Detector
from polyglot.detect.base import UnknownLanguage
from polyglot.text import Text
except Exception as e:
print("Warning! Polyglot couldn't start: " + str(e))
polyglot_available = False
from textblob import TextBlob
from collections import Counter
import random
class Analizer:
def __init__(self):
self.official_api = True
self.language_counter = Counter()
try:
self.translate_client = translate.Client()
except Exception as e:
print('Warning! Translator couldn\'t be initialized, fallbacking to unofficial translation engine: ' + str(e))
self.official_api = False
def get_sentiment(self, text):
try:
try:
if (polyglot_available):
detector = Detector(text)
language = detector.language.code
else:
language = self.detect_language_heuristic(text)
except UnknownLanguage:
language = self.detect_language_heuristic(text)
self.language_counter.update({language: 1})
# print(self.language_counter)
if (language == 'en'):
return self.proccess_eng(text)
if (language == 'google'):
return self.process_google(text)
try:
return self.process_poly(text)
except ZeroDivisionError:
return 'N'
except Exception as e:
print(e)
return self.process_google(text)
except Exception as e:
print(e)
return self.proccess_eng(text)
def process_google(self, text):
if (self.official_api):
result = self.translate_client.translate(text, target_language="en")
return self.proccess_eng(result["translatedText"])
else:
return self.proccess_eng(str(TextBlob(text).translate()))
def proccess_eng(self, text):
blob = TextBlob(text)
if (blob.sentiment.polarity > 0.05):
return '+'
if (blob.sentiment.polarity < -0.05):
return '-'
return 'N'
def process_poly(self, text):
poly_text = Text(text)
if (poly_text.polarity > 0.35):
return '+'
# If polarity is -1 there isn't enough information to determine if it's negative therefore we introduce randomness
if (poly_text.polarity < -0.35 and (poly_text.polarity > -1 or random.random() > 0.25)):
return '-'
return 'N'
def detect_language_heuristic(self, text):
if (len(text) <=2):
language = 'en'
else:
language = 'google'
return language