セット2

セット2です。

 

(1)「拡散希望」という文字列を含むツイートを抽出

#!usr/bin/env python3
# -*- 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()

compileで正規表現のパターンをコンパイルします。

 

ここではツイート一つ一つが<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先へのコメント部分のみを抽出

#!usr/bin/env python3
# -*- 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) ツイッターのユーザー名(@で始まる文字列)を抽出

#!usr/bin/env python3
# -*- 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断片)に置換

#!usr/bin/env python3
# -*- 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) 括弧表現のうち,括弧の内側がアルファベット大文字の文字列,括弧の左側が漢字の文字列のものを抽出.このとき,括弧の左側の表現と括弧の内側の表現をタブ区切り形式で出力

#!usr/bin/env python3
# -*- 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) 人名らしき表現にマッチする正規表現を各自で設計し,抽出

#!usr/bin/env python3
# -*- 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) 仙台市の住所らしき表現にマッチする正規表現を各自で設計し,抽出

#!usr/bin/env python3
# -*- 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要素を組で(まとめて)抽出

#!usr/bin/env python3
# -*- 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)ツイートから絵文字らしき文字列を抽出せ

#!usr/bin/env python3
# -*- 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)とか種類が多すぎて大変。

└( ^ω^ )みたいな腕生えてる奴もいるし。絶対まだまだいっぱいある。

*1:[一-龠])+ちゃん|([一-龠])+さん|([一-龠])+くん|([一-龠])+君|([一-龠])+氏|[あ-ん]+ちゃん|[あ-ん]+さん|[あ-ん]+氏|[あ-ん]+君)")

f = open('tweets.txt',"r")
data = f.read()

tm=tweet.findall(data)

for i in range(len(tm