Цикл сообщений в субреддите с PRAW (+ анализ настроений) - PullRequest
0 голосов
/ 28 апреля 2020

Я получил следующий Python код, в основном я собираю информацию из Reddit и затем анализирую настроения для каждого сообщения :

from IPython import display
import math
from pprint import pprint
import pandas as pd
import numpy as np
import nltk
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='darkgrid', context='talk', palette='Dark2')

import praw 

reddit = praw.Reddit(client_id='myId',
client_secret='mySecret', user_agent='testing_api')

headlines = set()


for submission in reddit.subreddit('politics').new(limit=None):
    headlines.add(submission.title)
    display.clear_output()


    print(len(headlines))



from nltk.sentiment.vader import SentimentIntensityAnalyzer as SIA

sia = SIA()
results = []

for line in headlines:
    pol_score = sia.polarity_scores(line)
    pol_score['headline'] = line
    results.append(pol_score)

pprint(results[:3], width=100)

Вывод:

[{'compound': 0.0,
  'headline': 'Tennessee Restaurants Reopen As State Sees Biggest 1-Day Jump In COVID-19 Cases',
  'neg': 0.0,
  'neu': 1.0,
  'pos': 0.0},
 {'compound': -0.5267,
  'headline': 'Report: Nearly Half of Americans Breathing Unhealthy Air',
  'neg': 0.327,
  'neu': 0.673,
  'pos': 0.0},
 {'compound': -0.0754,
  'headline': 'The Implications of Trump Derangement Syndrome | Even now, vehement Trump '
              'supporters seem to believe that most criticism of the president is explained by '
              'widespread TDS.',
  'neg': 0.11,
  'neu': 0.791,
  'pos': 0.1}]

Интересно, смогу ли я сделать то же самое, но циклически проходить через сообщение в subreddit

Со следующими функциями:

  • Избегать циклического повторения одних и тех же сообщений :

Есть ли способ структурировать код таким образом, чтобы во второй раз он выполнял l oop через следующие 100 новых сообщений (т. Е. Сообщения с 101 по 200) ?

  • Сентиментальный анализ в режиме реального времени В основном сохраняйте ту же функцию анализ настроений во время l oop.

, которое я нашел в Reddit эта функциональность PRAW:

"Библиотека PRAW имеет функции для потоковой передачи сообщений или комментариев. Reddit.Subreddit.stream.comments() и Reddit.Subreddit.stream.submissions() будут выдавать комментарии или представления по мере их появления."

Вот пример использования:

for comment in reddit.subreddit('iama').stream.comments():
    print(comment)

for submission in reddit.subreddit('all').stream.submissions():
    print(submission)

StreamSubmission добавлено:

#WithStreamFunctionality
from IPython import display
import math
from pprint import pprint
import pandas as pd
import numpy as np
import nltk
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='darkgrid', context='talk', palette='Dark2')
import nltk
nltk.download('vader_lexicon')
import praw 

reddit = praw.Reddit(client_id='myId',
client_secret='mySecret', user_agent='testing_api')

headlines = set()

#Changed 

for submission in reddit.subreddit('politics').stream.submissions():
    headlines.add(submission.title)
    display.clear_output()




from nltk.sentiment.vader import SentimentIntensityAnalyzer as SIA

sia = SIA()
results = []




for line in headlines:
    pol_score = sia.polarity_scores(line)
    pol_score['headline'] = line
    results.append(pol_score)

pprint(results[:10], width=100)

df = pd.DataFrame.from_records(results)
df.head()

Но не работает, он застревает ... ошибок в консоли тоже нет ...

Спасибо за любые ответы! Кроме того, я новичок в Python и довольно плохо знаком с работой с API в целом, поэтому, если что-то, что я сказал, не имело смысла или отражает отсутствие понимания, пожалуйста, дайте мне знать!

...