セット2
セット2です。
(1)「拡散希望」という文字列を含むツイートを抽出
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?</text>")
kakusan=re.compile("拡散希望")
f = open('tweets.txt',"r")
data = f.read() # ファイル終端まで全て読んだデータを返す
tm=tweet.findall(data)
for i in range(len(tm)):
m=re.match("<text>([\s\S]*?)</text>",tm[i])
tm[i]=m.group(1)
tm[i]=tm[i].strip()
km=kakusan.search(tm[i])
if(km):
print(tm[i])
print()
f.close()
ここではツイート一つ一つが<text>と</text>で区切られているので<text>と</text>の中の文字すべて([\s\S]*?)でツイートごとに分けます。
findallを使うことによって<text>と</text>で区切られているセンテンスごとにリストに格納できます。
ループを回して、ツイート一つ一つを見ていきます。
matchを使って正規表現と同じかどうか見ることができます。
そして、groupで正規表現の中の括弧(グループ)でサブグループごとに見ていくことができます。
group(1)の1の部分は括弧のことです。
最後にsearchで拡散希望の文字を探し、見つかったらプリントして終わりです。
(2) 「なう」という文字列で終わるツイートを抽出
#!usr/bin/env python3
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>([\s\S]*?)</text>")
nau=re.compile("[\s\S]*?なう$")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
tm[i]=tm[i].strip()
km=nau.search(tm[i])
if(km):
print(tm[i])
print()
f.close()
$で行末と一致という正規表現になります。
(3) 非公式RTのツイートの中で,RT先へのコメント部分のみを抽出
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>([\s\S]*?)<\/text>")
nau=re.compile("[\s\S]*?RT @[\s\S]*?")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
tm[i]=tm[i].strip()
km=nau.search(tm[i])
if(km):
#print(tm[i])
rt=tm[i].split('RT')
print(rt[0])
print()
f.close()
RTでsplitを使うことによってRTの文字が使われるツイートの右と左で別れます。
左がRT先へのコメントなので、rt[0]をプリントします。
(4) ツイッターのユーザー名(@で始まる文字列)を抽出
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?</text>")
nau=re.compile("@[_0-9a-zA-Z]+")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
yu=nau.findall(tm[i])
if(yu):
for j in range(len(yu)):
print(yu[j])
f.close()
[]の正規表現で文字のどれかと一致するとなるので@[_0-9a-zA-Z]と書けばユーザー名のどれかになります。
findallでユーザー名を探します。
ツイート一つに何個もユーザー名がある可能性があるので、lenでユーザー名の個数の分をループさせて表示させます。
(5) ツイッターのユーザー名(例えば@xxxxxxx)を,そのユーザーのページへのリンク(<a href="https://twitter.com/#!/xxxxxxx">@xxxxxxx</a>で囲まれたHTML断片)に置換
# -*- coding: utf-8 -*-
import re
f = open('tweets.txt',"r")
data = f.read()
t=re.sub("@([_0-9a-zA-Z]*)",r'<a href="https://twitter.com/#!/\1">@\1</a>',data)
t=t.replace("<text>\n","")
t=t.replace("</text>","")
print(t)
f.close()
re.subを使うことによって置換することができます。
そして\1で置換する前のものを呼び出すことができます。
これは便利!!
(6) 括弧表現のうち,括弧の内側がアルファベット大文字の文字列,括弧の左側が漢字の文字列のものを抽出.このとき,括弧の左側の表現と括弧の内側の表現をタブ区切り形式で出力
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?<\/text>")
nau=re.compile("([一-龠]+?[(][A-Z]+?[)])")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
km=nau.findall(tm[i])
if(km):
for j in range(len(km)):
km[j] = km[j].replace("(","\t")
km[j] = km[j].replace(")","")
print(km[j])
f.close()
一-龠で漢字全部を意味します。
replaceで(をタブに入れ替えるとタブで区切れます。
(7) 人名らしき表現にマッチする正規表現を各自で設計し,抽出
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?<\/text>")
nau=re.compile("*1:
km=nau.findall(tm[i])
if(km):
for j in range(len(km)):
print(km[j])
人名の後につきそうなものを片っ端から書いていっただけです。
他にもいっぱいありそう。
(8) 仙台市の住所らしき表現にマッチする正規表現を各自で設計し,抽出
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?<\/text>")
nau=re.compile("(仙台市[一-龠]+?区[一-龠]+|仙台市[一-龠]+?区)")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
km=nau.findall(tm[i])
if(km):
for j in range(len(km)):
print(km[j])
仙台市の後に続きそうなやつを書いただけです。
(9) 郵便番号・県名・市町村名の3要素を組で(まとめて)抽出
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?<\/text>")
nau=re.compile("(\d{3,3}-\d{4,4}\s?[一-龠]+県\s?[一-龠]+市|\d{3,3}-\d{4,4}\s?[一-龠]+県\s?[一-龠]+町|\d{3,3}-\d{4,4}\s?[一-龠]+県\s?[一-龠]+村)")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
km=nau.findall(tm[i])
if(km):
for j in range(len(km)):
print(km[j])
f.close()
(10)ツイートから絵文字らしき文字列を抽出せ
# -*- coding: utf-8 -*-
import re
tweet = re.compile("<text>[\s\S]*?<\/text>")
nau=re.compile("([(][^a-zA-SU-Z一-龠あ-ちて-んア-ンキ-ンA-Z1-90-24-9]{2,}[)]|[(][^a-zA-SU-Z一-龠あ-んア-ンキ-ン1-90-9]{2,}[)]|[\\\][^a-zA-SU-Z一-龠あ-ちて-んア-ンキ-ンA-Z1-90-24-9]{2,}[/]{1,1}|[o][^a-zA-SU-Z一-龠あ-ちて-んア-ンキ-ンA-Z1-90-24-9]{2,}[o]|[└][^a-zA-SU-Z一-龠あ-ちて-んア-ンキ-ンA-Z1-90-24-9]{2,}[┐])")
kau=re.compile("[(](/?)[)]")
f = open('tweets.txt',"r")
data = f.read()
tm=tweet.findall(data)
for i in range(len(tm)):
km=nau.findall(tm[i])
yo=kau.findall(tm[i])
if(yo):
continue
elif(km):
for j in range(len(km)):
print(km[j])
f.close()
(つ∀-)(T_T)とか種類が多すぎて大変。
└( ^ω^ )みたいな腕生えてる奴もいるし。絶対まだまだいっぱいある。