Есть ли способ создать регистр как оператор IF в Python / Jupyter для мониторинга подстрок в твитах с помощью Tweepy? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь отслеживать учетные записи Twitter нескольких предприятий, экспортируя твиты в .csv, чтобы посмотреть на позитивность или негативность твитов, которые включают название компании, которое затем будет визуализировано.

Чтобы мне было проще, я присваиваю каждому твиту только одно число, от 1 (отрицательное) до 10 (положительное), однако код, который я написал, не дает никакой обратной связи (остается на 0), получает застрял в цикле For или получил синтаксическую ошибку.

Используя блокнот Jupyter, я попытался создать 10-строчный оператор If / Elif - из-за того, что в Python нет оператора case, и вставил этот код как в метод 'get Tweets', так и в метод 'write csv' .

Получить твиты

api = tweepy.API(auth)

query = "ASOS"

language = "en"

results = api.search(q=query, lang=language, count=100)

for tweet in results:
    if (not tweet.retweeted) and ('RT @' not in tweet.text):
        print(tweet.user.screen_name,"Tweeted:",tweet.text,**rating**)
        print()

Запись CSV

import csv

api = tweepy.API(auth)

csvFile = open('ASOS with emojis1.csv', 'a')

csvWriter = csv.writer(csvFile)

results = api.search(q=query, lang=language, count=100)

for tweet in results:
if (not tweet.retweeted) and ('RT @' not in tweet.text):
    csvWriter.writerow([tweet.created_at, tweet.user.screen_name, tweet.text, **rating**])

csvFile.close()

Если / Elif Заявление, которое я написал

rating = '0'

if 'abysmal' or 'appalling' or 'dreadful' or 'awful' or 'terrible' or 'very bad' or 'really bad' or '?' or '?' or '?' in tweet.text:
                (rating = '1')
            elif 'rubbish' or 'unsatisfactory' or 'bad' or 'poor' or '?' or '?' or ':(' or '):' or '?' in tweet.text:
                (rating = '2')
            elif 'quite bad' or 'pretty bad' or 'somewhat bad' or 'below average' or '?' or '?' or '☹️' or '?' or '?' in tweet.text:
                (rating = '3')
            elif 'mediocre' or '?' or '?' or '?' or '?' or '?' in tweet.text:
                (rating = '4')
            elif 'average' or 'not bad' or 'fair' or 'alright' or 'ok' or 'satisfactory' or 'fine' or 'somewhat good' or '?' or '?' or '?' or '?' or '?' or '?' or '?' or 'omg' in tweet.text:
                (rating = '5')
            elif 'quite good' or 'decent' or 'above average' or 'pretty good' or 'good' or '?' or '?' or '?' or '?' or '?' in tweet.text:
                (rating = '6')
            elif 'great' or 'gr8' or 'really good' or 'rlly good' or 'very good' or 'v good' or '?' or '☺️' or '?' or '?' or '?' or '?' or '?' ':)' or '(:' or '?' or '?' or '?' or '?' or '?' in tweet.text:
                (rating = '7')
            elif 'awesome' or 'fantastic' or '?' or '?' or '?' or '?' or '❤' or '♥' or '?' or '?' or '✅' or '?' or '?' or '?' or '✨' in tweet.text:
                (rating = '8')
            elif 'superb' or 'brilliant' or 'incredible' or 'excellent' or 'oustanding' or '?' or '?' or '?' or '?' in tweet.text:
                (rating = '9')
            elif 'perfect' in tweet.text:
                (rating = '10')
            else:
                (rating = 'N/A')

Ожидается: файл .csv с различными номерами в

.

Actual: (rating = '1') SyntaxError: неверный синтаксис

1 Ответ

0 голосов
/ 04 апреля 2019

Ваши условия не работают должным образом.Чтобы связать условное выражение:


mylist = [1, 2, 3]

# Note that the full condition must be specified for
# each desired conditional
if 1 in mylist or 2 in mylist or 3 in mylist:
    print("True")

# True

Проблема с тем, что вы используете, заключается в том, что вы подходите к логике так, как вы бы говорили , а не к тому, как интерпретатор ее читает.В качестве примера:

if 'a' or 'b':
    print('True')

# True

Заполненные строки действуют как True и будут оценивать ваше состояние как таковое, поэтому необходимо внести изменение, чтобы было задано все условие:

# Evaluates to True, though it's not what you want
if 'a' and 'b' in 'bc':
    print(True) # This is not what you want, but 'a' is read as 'true'
# True

if 'a' in 'bc' and 'b' in 'bc':
    print(True)
# Doesn't print True because 'a' in 'bc' is False

Здесь может помочь any функция, которая будет выглядеть, если какое-либо из значений оценивается как True:

mylist = [1, 2, 3]

if any([i in mylist for i in range(2,5)]):
    print("True")

# True

Кроме того, нет необходимости в скобках вокруг назначения переменной:

if 'abysmal' in tweet.text or 'horrible' in tweet.text:
    rating = 0

elif ...:
    rating = 1

# So on and so forth
...