twitterから取得したツイートに返信などの@ユーザー名や、画像・動画などのURLがある場合に削除をするプログラムを作りたい。
例
@ twitter こんにちは pic.twitter.com/XXXXXXXXXXXXXXX
↓
こんにちは
fil3で処理をするつもりです。
#! /usr/bin/python3 # -*- coding: utf-8 -*- # # get_tweet.py # # Dec/21/2017 # -------------------------------------------------------------------- import sys import json import config2 import oauth2 as oauth import got3 as got import re import nltk # from requests_oauthlib import OAuth1Session from define_client2 import define_client2_proc # CK = config2.CONSUMER_KEY CS = config2.CONSUMER_SECRET AT = config2.ACCESS_TOKEN ATS = config2.ACCESS_TOKEN_SECRET twitter = OAuth1Session(CK, CS, AT, ATS) # -------------------------------------------------------------------- # [8]: def get_tweets_proc(client,screen_name): nnx = 200 url_base = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" url = url_base + screen_name + "&count=" + str(nnx) array_aa = [] response, data = client.request(url) if response.status == 200: json_str = data.decode('utf-8') # print(json_str) array_aa = json.loads(json_str) sys.stderr.write("len(array_aa) = %d\n" % len(array_aa)) # else: sys.stderr.write("*** error *** get_ids_proc ***\n") sys.stderr.write("Error: %d\n" % response.status) # return array_aa # -------------------------------------------------------------------- def filter(text): """ :param text: str :rtype : str """ # アルファベットと半角英数と記号と改行とタブを排除 text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text) text = re.sub(r'[!"“#$%&()*+\-.,/:;<=>?@[\]^_`{|}~]', '', text) text = re.sub(r'[\n|\r|\t]', '', text) # 日本語以外の文字を排除(韓国語とか中国語とかヘブライ語とか) jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[ぁ-んァ-ンー\u4e00-\u9FFF]+)') text = "".join(jp_chartype_tokenizer.tokenize(text)) return text # ----------------------------------------------------------------------- def fil2(text): """ :param text: str :rtype : str """ #text = re.sub(r'[!"“#$%&()*+\-.,/:;<=>?@[\]^_`{|}~]', '', text) text = re.sub(r'[\n|\r|\t]', '', text) text = re.sub(r'(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)', '', text) text = re.sub(r'[─│━┃┌┏┐┓└┗┘┛├┝┠┣┤┥┨┫┬┯┰┳┴┷┸┻┼┿╂╋\ ]', '', text) return text #------------------------------------------------------------------------ def n_gram(target, n): return [ target[idx:idx + n] for idx in range(len(target) - n + 1)] #------------------------------------------------------------------------ def jaccard_similarity_coefficient(list_a,list_b): #集合Aと集合Bの積集合(set型)を作成 set_intersection = set.intersection(set(list_a), set(list_b)) #集合Aと集合Bの積集合の要素数を取得 num_intersection = len(set_intersection) #集合Aと集合Bの和集合(set型)を作成 set_union = set.union(set(list_a), set(list_b)) #集合Aと集合Bの和集合の要素数を取得 num_union = len(set_union) #積集合の要素数を和集合の要素数で割って #Jaccard係数を算出 try: return float(num_intersection) / num_union except ZeroDivisionError: return 1.0 #-------------------------------------------------------------------- def fil3(text): """ :param text: str :rtype : str """ text = re.sub('@.+:\s',"", text) return text #------------------------------------------------------------------------- sys.stderr.write("*** 開始 ***\n") # screen_name = "********" subete = 0 onaji = 0 tigau = 0 nagai = 0 # client = define_client2_proc() # array_aa = get_tweets_proc(client,screen_name) # sys.stderr.write("len(array_aa) = %d\n" % len(array_aa)) # for unit_aa in array_aa: #text = filter(unit_aa['text']) text = fil2(unit_aa['text']) print (text) print('----------------------------------------------------') if not text: print('null') else: subete = subete + 1 tweetCriteria = got.manager.TweetCriteria().setQuerySearch('"%s"' % text).setSince("2014-01-01").setUntil("2019-04-01").setMaxTweets(5) print(len(got.manager.TweetManager.getTweets(tweetCriteria))) if len(text) > 90: print("長さオーバー") nagai = nagai + 1 else: for i in range(5): if len(got.manager.TweetManager.getTweets(tweetCriteria)) < i + 1: print("該当なし") tigau = tigau + 1 break else: tweet = got.manager.TweetManager.getTweets(tweetCriteria)[i] if tweet.username == screen_name: print("本人") else: print(tweet.text) print(tweet.username) tweettext = fil3(tweet.text) print(tweettext) onaji = onaji + 1 list_a = n_gram(unit_aa['text'], 2) list_b = n_gram(tweettext, 2) jaccard = jaccard_similarity_coefficient(list_a,list_b) print(jaccard) #break # print("ツイート数 = %d, 同様ツイート数 = %d, 該当なし = %d, 長さオーバー = %d" % (subete, onaji, tigau, nagai)) sys.stderr.write("*** 終了 ***\n") # --------------------------------------------------------------------
指定した文字から指定した文字までを削除するなどの方法を考えたのですが、それらのやり方も分からなかったので教えていただけると幸いです。