script.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import re
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import sentiment
  5. from imdb import Cinemagoer
  6. def fetch_movie(input):
  7. ia = Cinemagoer()
  8. search = ia.search_movie(title=input)
  9. if(len(search)==0):
  10. print("Not Found")
  11. id = "tt"+search[0].movieID
  12. data = search[0].data
  13. title = data['title']
  14. poster_url = data['cover url']
  15. url = f'https://www.imdb.com/title/{id}/reviews/'
  16. return url, title, poster_url
  17. def html_removal(text):
  18. text = re.compile(r'<[^>]+>').sub('', text)
  19. return text
  20. def reviews_func(url):
  21. page = requests.get(url=url)
  22. soup = BeautifulSoup(page.content, "html.parser")
  23. reviews = soup.find_all("div",class_="text show-more__control")
  24. reviews = list(reviews)
  25. for i in range(len(reviews)):
  26. reviews[i] = html_removal(str(reviews[i]))
  27. return reviews
  28. def sentiment_analysis(movie, language = "English"):
  29. analysis = dict()
  30. url, title, poster_url = fetch_movie(movie)
  31. analysis['title'] = title
  32. reviews = reviews_func(url)
  33. total = len(reviews)
  34. positive = 0
  35. negative = 0
  36. for review in reviews:
  37. score = sentiment.calc_score(str(review))
  38. if score == 'Positive':
  39. positive+=1
  40. elif score == 'Negative':
  41. negative+=1
  42. if(positive>negative):
  43. overall_sentiment = 'Positive'
  44. percentage = f"{round((positive/total),2)*100}%"
  45. elif(positive<negative):
  46. overall_sentiment = 'Negative'
  47. percentage = f"{round((negative/total),2)*100}%"
  48. else:
  49. overall_sentiment = 'Neutral'
  50. percentage = "50%"
  51. analysis['sentiment'] = overall_sentiment
  52. analysis['percentage'] = percentage
  53. if(language == "English"):
  54. return analysis
  55. elif(language == "Hindi"):
  56. if(analysis['sentiment'] == "Positive"):
  57. analysis['sentiment'] = 'उत्तम'
  58. elif(analysis['sentiment'] == "Negative"):
  59. analysis['sentiment'] = 'खराब'
  60. return analysis