質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1933閲覧

取得したツイートの@ユーザー名と画像URLを削除したい

walkwater

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/07/16 12:36

編集2019/07/22 06:30

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") # --------------------------------------------------------------------

指定した文字から指定した文字までを削除するなどの方法を考えたのですが、それらのやり方も分からなかったので教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2019/07/17 00:13

「twitterから取得したツイート」はAPIから取得したJSON形式のデータですか? こういったことが伝わらなくなるので書きかけあっても「コードを載せない」ことはよい選択ではありません。無駄な時間が過ぎるだけです。
walkwater

2019/07/17 03:41

申し訳ありません。このような場を最近使い始めたので勝手がわかっていませんでした。 ソースを追記いたしましたので確認いただけると幸いです。 fil3で今回の処理をする予定です。
guest

回答1

0

どんなデータに対して行うかは分かりませんが、httpsのURLと@以降のユーザー名は、大体こんな感じで削除できると思います(ちょっと複雑ですが...)。

line = re.sub(r'https?://[\w/:%#$&?()~.=+\-…]+', "", line) line = re.sub('@.+:\s', "", line)

投稿2019/07/16 14:17

bamboo-nova

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

walkwater

2019/07/17 15:58

教えていただいたソースコードの2行目、@マークの方を試してみたのですが上手く消すことができませんでした。 教えていただいたコードを入れたコードを追記しましたので、ご確認いただけますと幸いです。 取得したデータの@とユーザー名の間に半角スペースが入っていたのですが、それが原因の可能性はありますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問