|
@@ -0,0 +1,60 @@
|
|
|
|
+import os
|
|
|
|
+import time
|
|
|
|
+from wordcloud import WordCloud, STOPWORDS
|
|
|
|
+
|
|
|
|
+from django.conf import settings
|
|
|
|
+from gauth.models import Location
|
|
|
|
+from review.models import Review
|
|
|
|
+from facebook_app.models import FacebookReview
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+WC = WordCloud(
|
|
|
|
+ width=1200,
|
|
|
|
+ height=300,
|
|
|
|
+ background_color='white',
|
|
|
|
+ stopwords=STOPWORDS
|
|
|
|
+)
|
|
|
|
+GOOGLE_PATH = os.path.join(settings.BASE_DIR, 'media', 'google')
|
|
|
|
+FACEBOOK_PATH = os.path.join(settings.BASE_DIR, 'media', 'facebook')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def create_wc_for_google(location_id):
|
|
|
|
+ reviews = Review.objects.filter(location_id=location_id).exclude(comment=None)
|
|
|
|
+ pos_reviews = reviews.filter(star_rating__gte=4)[:100]
|
|
|
|
+ neg_reviews = reviews.filter(star_rating__lte=3)[:100]
|
|
|
|
+ pos_text = ' '.join([review.comment for review in pos_reviews])
|
|
|
|
+ neg_text = ' '.join([review.comment for review in neg_reviews])
|
|
|
|
+ if len(pos_text) == 0:
|
|
|
|
+ pos_text = "No positive Review found."
|
|
|
|
+ if len(neg_text) == 0:
|
|
|
|
+ neg_text = "No negative Review found."
|
|
|
|
+ wc = WC.generate_from_text(pos_text)
|
|
|
|
+ wc.to_file(GOOGLE_PATH+'/positive/'+f'{location_id}.png')
|
|
|
|
+ wc = WC.generate_from_text(neg_text)
|
|
|
|
+ wc.to_file(GOOGLE_PATH+'/negative/'+f'{location_id}.png')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def create_wc_for_facebook(location_id):
|
|
|
|
+ reviews = FacebookReview.objects.filter(page__location_id=location_id).exclude(review_text=None)
|
|
|
|
+ pos_reviews = reviews.filter(recommendation_type=True)[:100]
|
|
|
|
+ neg_reviews = reviews.filter(recommendation_type=False)[:100]
|
|
|
|
+ pos_text = ' '.join([review.review_text for review in pos_reviews])
|
|
|
|
+ neg_text = ' '.join([review.review_text for review in neg_reviews])
|
|
|
|
+ if len(pos_text) == 0:
|
|
|
|
+ pos_text = "Didn't found posted any positive Review."
|
|
|
|
+ if len(neg_text) == 0:
|
|
|
|
+ neg_text = "Didn't found posted any negative Review."
|
|
|
|
+ wc = WC.generate_from_text(pos_text)
|
|
|
|
+ wc.to_file(FACEBOOK_PATH+'/positive/'+f'{location_id}.png')
|
|
|
|
+ wc = WC.generate_from_text(neg_text)
|
|
|
|
+ wc.to_file(FACEBOOK_PATH+'/negative/'+f'{location_id}.png')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def generate_word_clouds():
|
|
|
|
+ locations = Location.objects.all()
|
|
|
|
+ start = time.time()
|
|
|
|
+ for loc in locations:
|
|
|
|
+ create_wc_for_google(location_id=loc.location_id)
|
|
|
|
+ create_wc_for_facebook(location_id=loc.location_id)
|
|
|
|
+ end = time.time()
|
|
|
|
+ print('Elapsed time: ', end-start, 'millisecond.')
|