Skip to content

Instantly share code, notes, and snippets.

@yum45f
Last active November 20, 2018 11:46
Show Gist options
  • Save yum45f/e8c959dd4903e0d4692a96008c03ece5 to your computer and use it in GitHub Desktop.
Save yum45f/e8c959dd4903e0d4692a96008c03ece5 to your computer and use it in GitHub Desktop.
中学生でも1日あれば作れる、人工無脳 Twitter Bot ! ref: https://qiita.com/YuSan19/items/a14c4ba22495322fce92
$ pip install borscht
1. 学習元のテキスト収集
2. 形態素解析をする
3. 3つ連続した形態素の三つ組を作る
4. 出てきた三つ組を全部配列Aに代入
5. なんか最初の単語を一つ勝手に選ぶ
6. 配列Aからその単語で始まる三つ組全てを抽出して別の配列Bに代入
7. 配列B からランダムで選ぶ
8. 選ばれた3つ組の最後の単語から始まる三つ組全てを抽出して配列Bに代入
9. 文の終わりまで繰り返す
10. できた分を Twitter へ投稿
root/
  ├ - get-tweets.py
  ├ - post-tweets.py
  ├ - ChainGenerator.py
  └ - TextGenerator.py
$ pip install twitter
[
[
"BOS", # 一つ目
"これ", # 二つ目
"は", # 三つ目
2 # 出てきた回数
],
[
"これ",
"は",
"大",
1
],
[
"は",
"大",
"思春期",
2
]
from ChainGenerator import *
from TextGenerator import *
from twitter import *
# tweet = 生成された文章
twitter_clients.statuses.update(status=tweet)
print("Finished Tweet: " + tweet)
# Import borscht.
from borscht import ChainGenerator
from borscht import TextGenerator
# Text used for chain generation of Markov chain
learned_text = """
 親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。
なぜそんな無闇をしたと聞く人があるかも知れぬ。別段深い理由でもない。
新築の二階から首を出していたら、同級生の一人が冗談に、いくら威張っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃したからである。
小使に負ぶさって帰って来た時、おやじが大きな眼をして二階ぐらいから飛び降りて腰を抜かす奴があるかと云ったから、この次は抜かさずに飛んで見せますと答えた。
 親類のものから西洋製のナイフを貰って奇麗な刃を日に翳して、友達に見せていたら、一人が光る事は光るが切れそうもないと云った。
切れぬ事があるか、何でも切ってみせると受け合った。そんなら君の指を切ってみろと注文したから、何だ指ぐらいこの通りだと右の手の親指の甲をはすに切り込んだ。
幸ナイフが小さいのと、親指の骨が堅かったので、今だに親指は手に付いている。しかし創痕は死ぬまで消えぬ。
 庭を東へ二十歩に行き尽すと、南上がりにいささかばかりの菜園があって、真中に栗の木が一本立っている。
これは命より大事な栗だ。実の熟する時分は起き抜けに背戸を出て落ちた奴を拾ってきて、学校で食う。
菜園の西側が山城屋という質屋の庭続きで、この質屋に勘太郎という十三四の倅が居た。
勘太郎は無論弱虫である。弱虫の癖に四つ目垣を乗りこえて、栗を盗みにくる。ある日の夕方折戸の蔭に隠れて、とうとう勘太郎を捕まえてやった。
その時勘太郎は逃げ路を失って、一生懸命に飛びかかってきた。向うは二つばかり年上である。
弱虫だが力は強い。鉢の開いた頭を、こっちの胸へ宛ててぐいぐい押した拍子に、勘太郎の頭がすべって、おれの袷の袖の中にはいった。
邪魔になって手が使えぬから、無暗に手を振ったら、袖の中にある勘太郎の頭が、右左へぐらぐら靡いた。
しまいに苦しがって袖の中から、おれの二の腕へ食い付いた。痛かったから勘太郎を垣根へ押しつけておいて、足搦をかけて向うへ倒してやった。
山城屋の地面は菜園より六尺がた低い。勘太郎は四つ目垣を半分崩して、自分の領分へ真逆様に落ちて、ぐうと云った。
勘太郎が落ちるときに、おれの袷の片袖がもげて、急に手が自由になった。その晩母が山城屋に詫びに行ったついでに袷の片袖も取り返して来た。
 この外いたずらは大分やった。大工の兼公と肴屋の角をつれて、茂作の人参畠をあらした事がある。人参の芽が出揃わぬ処へ藁が一面に敷いてあったから、
その上で三人が半日相撲をとりつづけに取ったら、人参がみんな踏みつぶされてしまった。古川の持っている田圃の井戸を埋めて尻を持ち込まれた事もある。
太い孟宗の節を抜いて、深く埋めた中から水が湧き出て、そこいらの稲にみずがかかる仕掛であった。
その時分はどんな仕掛か知らぬから、石や棒ちぎれをぎゅうぎゅう井戸の中へ挿し込んで、水が出なくなったのを見届けて、うちへ帰って飯を食っていたら、
古川が真赤になって怒鳴り込んで来た。たしか罰金を出して済んだようである。
"""
# 夏目漱石 「坊っちゃん」より
cg = ChainGenerator(text) # Generate instance of class that generate chains
cg.dump() # Dump json file written about chains' info.
tg = TextGenerator("chain.json") # Generate instance of class that generate sentence
for i in range(10):
sentence = tg.generate() # Generate sentence
print(tg.generate())
from twitter import *
import json
import re
twitter_clients = Twitter(
auth=OAuth(<ACCESS_TOKEN>, <ACCESS_TOKEN_SECRET>, <API_KEY>, <API_SECRET>)
timelines = twitter_clients.statuses.home_timeline(count=200) # 最大200件TLを取得
with open('tweets.txt', 'a') as f:
for tl_tweet in timelines:
content = tl_tweet['text'].replace("\n", "")
result = re.sub(r"https?://[\w/:%#\$&\?\(\)~\.=\+\-]+", "", content) # URLを除去
result = re.sub(r'RT @.+: ', "", result) # RT情報を除去
f.write(result + '\n')
mecab-python3==0.7
twitter==1.18.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment