質問するログイン新規登録

質問編集履歴

4

修正

2019/07/22 06:30

投稿

walkwater
walkwater

スコア11

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  twitterから取得したツイートに返信などの@ユーザー名や、画像・動画などのURLがある場合に削除をするプログラムを作りたい。
2
2
 
3
3
 
4
- @twitter こんにちは pic....
4
+ @ twitter こんにちは pic.twitter.com/XXXXXXXXXXXXXXX
5
5
 
6
6
  こんにちは
7
7
 

3

修正

2019/07/22 06:30

投稿

walkwater
walkwater

スコア11

title CHANGED
File without changes
body CHANGED
@@ -109,7 +109,7 @@
109
109
 
110
110
  sys.stderr.write("*** 開始 ***\n")
111
111
  #
112
- screen_name = "ualntewrtrn2651"
112
+ screen_name = "********"
113
113
  subete = 0
114
114
  onaji = 0
115
115
  tigau = 0

2

修正

2019/07/17 03:47

投稿

walkwater
walkwater

スコア11

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,7 @@
5
5
 
6
6
  こんにちは
7
7
 
8
+ fil3で処理をするつもりです。
8
9
  ```
9
10
  #! /usr/bin/python3
10
11
  # -*- coding: utf-8 -*-

1

修正

2019/07/17 03:41

投稿

walkwater
walkwater

スコア11

title CHANGED
File without changes
body CHANGED
@@ -5,4 +5,161 @@
5
5
 
6
6
  こんにちは
7
7
 
8
+ ```
9
+ #! /usr/bin/python3
10
+ # -*- coding: utf-8 -*-
11
+ #
12
+ # get_tweet.py
13
+ #
14
+ # Dec/21/2017
15
+ # --------------------------------------------------------------------
16
+ import sys
17
+ import json
18
+ import config2
19
+ import oauth2 as oauth
20
+ import got3 as got
21
+ import re
22
+ import nltk
23
+ #
24
+ from requests_oauthlib import OAuth1Session
25
+ from define_client2 import define_client2_proc
26
+ #
27
+ CK = config2.CONSUMER_KEY
28
+ CS = config2.CONSUMER_SECRET
29
+ AT = config2.ACCESS_TOKEN
30
+ ATS = config2.ACCESS_TOKEN_SECRET
31
+ twitter = OAuth1Session(CK, CS, AT, ATS)
32
+ # --------------------------------------------------------------------
33
+ # [8]:
34
+ def get_tweets_proc(client,screen_name):
35
+ nnx = 200
36
+ url_base = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name="
37
+ url = url_base + screen_name + "&count=" + str(nnx)
38
+ array_aa = []
39
+ response, data = client.request(url)
40
+ if response.status == 200:
41
+ json_str = data.decode('utf-8')
42
+ # print(json_str)
43
+ array_aa = json.loads(json_str)
44
+ sys.stderr.write("len(array_aa) = %d\n" % len(array_aa))
45
+ #
46
+ else:
47
+ sys.stderr.write("*** error *** get_ids_proc ***\n")
48
+ sys.stderr.write("Error: %d\n" % response.status)
49
+ #
50
+ return array_aa
51
+ # --------------------------------------------------------------------
52
+ def filter(text):
53
+ """
54
+ :param text: str
55
+ :rtype : str
56
+ """
57
+ # アルファベットと半角英数と記号と改行とタブを排除
58
+ text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text)
59
+ text = re.sub(r'[!"“#$%&()*+\-.,/:;<=>?@[\]^_`{|}~]', '', text)
60
+ text = re.sub(r'[\n|\r|\t]', '', text)
61
+
62
+ # 日本語以外の文字を排除(韓国語とか中国語とかヘブライ語とか)
63
+ jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[ぁ-んァ-ンー\u4e00-\u9FFF]+)')
64
+ text = "".join(jp_chartype_tokenizer.tokenize(text))
65
+ return text
66
+ # -----------------------------------------------------------------------
67
+ def fil2(text):
68
+ """
69
+ :param text: str
70
+ :rtype : str
71
+ """
72
+ #text = re.sub(r'[!"“#$%&()*+\-.,/:;<=>?@[\]^_`{|}~]', '', text)
73
+ text = re.sub(r'[\n|\r|\t]', '', text)
74
+ text = re.sub(r'(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)', '', text)
75
+ text = re.sub(r'[─│━┃┌┏┐┓└┗┘┛├┝┠┣┤┥┨┫┬┯┰┳┴┷┸┻┼┿╂╋\  ]', '', text)
76
+ return text
77
+ #------------------------------------------------------------------------
78
+ def n_gram(target, n):
79
+
80
+ return [ target[idx:idx + n] for idx in range(len(target) - n + 1)]
81
+ #------------------------------------------------------------------------
82
+ def jaccard_similarity_coefficient(list_a,list_b):
83
+ #集合Aと集合Bの積集合(set型)を作成
84
+ set_intersection = set.intersection(set(list_a), set(list_b))
85
+ #集合Aと集合Bの積集合の要素数を取得
86
+ num_intersection = len(set_intersection)
87
+
88
+ #集合Aと集合Bの和集合(set型)を作成
89
+ set_union = set.union(set(list_a), set(list_b))
90
+ #集合Aと集合Bの和集合の要素数を取得
91
+ num_union = len(set_union)
92
+
93
+ #積集合の要素数を和集合の要素数で割って
94
+ #Jaccard係数を算出
95
+ try:
96
+ return float(num_intersection) / num_union
97
+ except ZeroDivisionError:
98
+ return 1.0
99
+ #--------------------------------------------------------------------
100
+ def fil3(text):
101
+ """
102
+ :param text: str
103
+ :rtype : str
104
+ """
105
+ text = re.sub('@.+:\s',"", text)
106
+ return text
107
+ #-------------------------------------------------------------------------
108
+
109
+ sys.stderr.write("*** 開始 ***\n")
110
+ #
111
+ screen_name = "ualntewrtrn2651"
112
+ subete = 0
113
+ onaji = 0
114
+ tigau = 0
115
+ nagai = 0
116
+ #
117
+ client = define_client2_proc()
118
+ #
119
+ array_aa = get_tweets_proc(client,screen_name)
120
+ #
121
+ sys.stderr.write("len(array_aa) = %d\n" % len(array_aa))
122
+ #
123
+ for unit_aa in array_aa:
124
+ #text = filter(unit_aa['text'])
125
+ text = fil2(unit_aa['text'])
126
+ print (text)
127
+ print('----------------------------------------------------')
128
+ if not text:
129
+ print('null')
130
+ else:
131
+ subete = subete + 1
132
+ tweetCriteria = got.manager.TweetCriteria().setQuerySearch('"%s"' % text).setSince("2014-01-01").setUntil("2019-04-01").setMaxTweets(5)
133
+ print(len(got.manager.TweetManager.getTweets(tweetCriteria)))
134
+ if len(text) > 90:
135
+ print("長さオーバー")
136
+ nagai = nagai + 1
137
+ else:
138
+ for i in range(5):
139
+ if len(got.manager.TweetManager.getTweets(tweetCriteria)) < i + 1:
140
+ print("該当なし")
141
+ tigau = tigau + 1
142
+ break
143
+ else:
144
+ tweet = got.manager.TweetManager.getTweets(tweetCriteria)[i]
145
+ if tweet.username == screen_name:
146
+ print("本人")
147
+ else:
148
+ print(tweet.text)
149
+ print(tweet.username)
150
+ tweettext = fil3(tweet.text)
151
+ print(tweettext)
152
+ onaji = onaji + 1
153
+ list_a = n_gram(unit_aa['text'], 2)
154
+ list_b = n_gram(tweettext, 2)
155
+
156
+ jaccard = jaccard_similarity_coefficient(list_a,list_b)
157
+ print(jaccard)
158
+ #break
159
+ #
160
+ print("ツイート数 = %d, 同様ツイート数 = %d, 該当なし = %d, 長さオーバー = %d" % (subete, onaji, tigau, nagai))
161
+ sys.stderr.write("*** 終了 ***\n")
162
+ # --------------------------------------------------------------------
163
+ ```
164
+
8
165
  指定した文字から指定した文字までを削除するなどの方法を考えたのですが、それらのやり方も分からなかったので教えていただけると幸いです。