前提・実現したいこと
Twitterから取得したツイートをAIに学習させてツイートを生成したいと思っています。
そこで保存するときに一次元リストを多次元リストに変換する必要があったので質問しました。
具体的には、1番目のような一次リストがあったら、カンマで切って2番目のようにしたいです。
#1.['あいうえお<|endoftext|>,かきくけこ<|endoftext|>'] #2.[['あいうえお<|endoftext|>'], ['かきくけこ<|endoftext|>']]
また、最初から入る文字列の数などが決まっていないので、そこもどうしたら良いのかわからないので教えてほしいです。
該当のソースコード
import tweepy import csv import pprint import pandas as pd import os import time import datetime import re import itertools #ここはお決まりです。 consumer_key = '' consumer_secret = '' access_token = '' access_token_secret = '' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) #ツイートを保存するGoogle Driveのディレクトリです。事前に作っておきましょう。 drive_path = '/content/drive/MyDrive/tweet' #学習用のデータセットで必要なツイート数を指定しています。 max_tweets = 10000 def getMtTweet(): #取得したツイートを格納するための配列 tweets = [] num = 0 i = 1 print('page ' + str(i)) #自分のタイムラインを取得するためuser_timelineを使用します。1リクエストで取得できるツイートの上限数は100です。 tweet_data = api.home_timeline(count=100) if(len(tweet_data) > 0): for tweet in tweet_data: #データセット用に各ツイートの最後に<|endoftext|>をつけて整形します。 tweets.append([tweet.text+"<|endoftext|>"]) num += 1 i += 1 next_max_id = tweet_data[-1].id while True: print('page ' + str(i)) tweet_data = api.user_timeline(count=100, max_id=next_max_id-1) if(len(tweet_data) > 0): next_max_id = tweet_data[-1].id for tweet in tweet_data: tweets.append([tweet.text+"<|endoftext|>"]) num += 1 if(num >= max_tweets): break i += 1 #Twitter API制限の上限でエラーにならないようにディレイをかけています。 time.sleep((15*60)/180) else: break saveTweets(tweets) else: print('zero tweet') def saveTweets(tweets): print(tweets) ut = time.time() tweets=list(itertools.chain.from_iterable(tweets)) tweets=','.join(map(str, tweets))#list型をstr型に変換 tweets=re.sub(r'https?://[\w/:%#$&?()~.=+\-…]+', "", tweets) tweets=re.sub('RT', "", tweets) tweets=re.sub('お気に入り', "", tweets) tweets=re.sub('まとめ', "", tweets) tweets=re.sub(r'[!-~]', "", tweets)#半角記号,数字,英字 tweets=re.sub(r'[︰-@]', "", tweets)#全角記号 tweets=re.sub('\n', " ", tweets)#改行文字 print(tweets) tweets = tweets.split(' ')#str型からlist型へ変換 print(tweets) #テキストファイルで保存 file_path = drive_path+'myTweets_' + str(ut) + '.txt' file = open(file_path, 'w') w = csv.writer(file) w.writerows(tweets) file.close() with open(file_path) as f: print(f.read()) getMtTweet()
ここの部分で、一次元リストから多次元リストに変換したいと思っています。
ツイートを格納している変数はtweetsです。
tweets=list(itertools.chain.from_iterable(tweets)) tweets=','.join(map(str, tweets))#list型をstr型に変換 tweets=re.sub(r'https?://[\w/:%#$&?()~.=+\-…]+', "", tweets) tweets=re.sub('RT', "", tweets) tweets=re.sub('お気に入り', "", tweets) tweets=re.sub('まとめ', "", tweets) tweets=re.sub(r'[!-~]', "", tweets)#半角記号,数字,英字 tweets=re.sub(r'[︰-@]', "", tweets)#全角記号 tweets=re.sub('\n', " ", tweets)#改行文字 print(tweets) tweets = tweets.split(' ')#str型からlist型へ変換 print(tweets)
よろしくお願いします。
試したこと
Webサイトなどで調べても特定の文字で区切る方法が見つからなかったので質問させていただきました。
回答1件
あなたの回答
tips
プレビュー