発生している問題・エラーメッセージ
該当の変数はもう定義されているはずなのに、name 'tweets' is not definedというエラーが何故出てしまうのかわからないので教えてほしいです。
エラーメッセージは以下の通りです。
NameError Traceback (most recent call last) <ipython-input-2-e2b16b4975eb> in <module>() 90 return list(itertools.chain.from_iterable(xs)) 91 ---> 92 tweets2d = flatten([[[content] for content in tweet.split(',')] for tweet in tweets]) 93 94 NameError: name 'tweets' is not defined
該当のソースコード
エラーが出た部分はここです。
Python
1def flatten(xs): 2 return list(itertools.chain.from_iterable(xs)) 3 4tweets2d = flatten([[[content] for content in tweet.split(',')] for tweet in tweets])
全体的にはこのようなコードです。
Python
1import tweepy 2import csv 3import pprint 4import pandas as pd 5import os 6import time 7import datetime 8import re 9import itertools 10 11#ここはお決まりです。 12consumer_key = '' 13consumer_secret = '' 14access_token = '' 15access_token_secret = '' 16auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 17auth.set_access_token(access_token, access_token_secret) 18api = tweepy.API(auth) 19 20#ツイートを保存するGoogle Driveのディレクトリです。事前に作っておきましょう。 21drive_path = '/content/drive/MyDrive/tweet' 22#学習用のデータセットで必要なツイート数を指定しています。 23max_tweets = 10000 24 25def getMtTweet(): 26 #取得したツイートを格納するための配列 27 tweets = [] 28 num = 0 29 i = 1 30 print('page ' + str(i)) 31 #自分のタイムラインを取得するためuser_timelineを使用します。1リクエストで取得できるツイートの上限数は100です。 32 tweet_data = api.home_timeline(count=100) 33 if(len(tweet_data) > 0): 34 for tweet in tweet_data: 35 #データセット用に各ツイートの最後に<|endoftext|>をつけて整形します。 36 37 tweets.append([tweet.text+"<|endoftext|>"]) 38 num += 1 39 i += 1 40 next_max_id = tweet_data[-1].id 41 while True: 42 print('page ' + str(i)) 43 tweet_data = api.user_timeline(count=100, max_id=next_max_id-1) 44 if(len(tweet_data) > 0): 45 next_max_id = tweet_data[-1].id 46 for tweet in tweet_data: 47 tweets.append([tweet.text+"<|endoftext|>"]) 48 num += 1 49 if(num >= max_tweets): 50 break 51 i += 1 52 #Twitter API制限の上限でエラーにならないようにディレイをかけています。 53 time.sleep((15*60)/180) 54 else: 55 break 56 saveTweets(tweets) 57 else: 58 print('zero tweet') 59 60 61 62def saveTweets(tweets): 63 print(tweets) 64 ut = time.time() 65 tweets=list(itertools.chain.from_iterable(tweets)) 66 tweets=','.join(map(str, tweets))#list型をstr型に変換 67 tweets=re.sub(r'https?://[\w/:%#$&?()~.=+\-…]+', "", tweets) 68 tweets=re.sub('RT', "", tweets) 69 tweets=re.sub('お気に入り', "", tweets) 70 tweets=re.sub('まとめ', "", tweets) 71 tweets=re.sub(r'[!-~]', "", tweets)#半角記号,数字,英字 72 tweets=re.sub(r'[︰-@]', "", tweets)#全角記号 73 tweets=re.sub('\n', " ", tweets)#改行文字 74 print(tweets) 75 flatten(xs) 76 print(tweets) 77 78 #テキストファイルで保存 79 file_path = drive_path+'myTweets_' + str(ut) + '.txt' 80 file = open(file_path, 'w') 81 w = csv.writer(file) 82 w.writerows(tweets) 83 file.close() 84 85 with open(file_path) as f: 86 print(f.read()) 87 88 89def flatten(xs): 90 return list(itertools.chain.from_iterable(xs)) 91 92tweets2d = flatten([[[content] for content in tweet.split(',')] for tweet in tweets]) 93 94 95getMtTweet()
試したこと
インターネットで調べて関数内で定義した変数は他の関数では使えないことはわかりましたが、ネットで見つけた解決策で上手く解決できなかったのでここで質問させていただきました。
試した解決策はグローバル変数にすることだった気がします。
解決する方法がわかる方、いらっしゃいましたら回答していただけたら幸いです。
追記:変数tweetsはgetMtTweetで作成したものです。
回答3件
あなたの回答
tips
プレビュー