![]() |
ノート/テキストマイニング/twitter-2https://pepper.is.sci.toho-u.ac.jp:443/pepper/index.php?%A5%CE%A1%BC%A5%C8%2F%A5%C6%A5%AD%A5%B9%A5%C8%A5%DE%A5%A4%A5%CB%A5%F3%A5%B0%2Ftwitter-2 |
![]() |
訪問者数 1275 最終更新 2012-03-01 (木) 15:15:36
形態素解析プログラムの候補はいろいろあるが、ChasenとMeCabを試してみよう
# -*- coding: utf-8 -*- import sys import codecs import re import pycha import twitter # def hasKanji(s): #Returns True if string s contains a Kanji, False if not. kanji = False for c in s: if (((ord(c)&0xff00) == 0x3000) or (0x4e00 <= ((ord(c)&0xff00) <=0x9f00))): kanji = True break return kanji # r = re.compile(r'([^-]+)-*') api = twitter.Api() timeline = api.GetPublicTimeline() words = [] for s in timeline: t = s.text if hasKanji(t): print "Source> ", t out = pycha.pycha(t) sonota1 = '' sonota2 = '' for go in out: gokan = go[0] if len(go)>=2: yomi = go[1] if len(go)>=3:
実行結果は、
Source> 《殺戮の羅刹デス・クルーザー》 奴に仲間は居ない。それ故に一般的には同士討ちなどの躊躇いが生じる時でも遠慮せずに戦える。 惑わされる物がない、それこそ理想的な最強の証であろう。最凶と呼ばれた覚醒者も所詮仲間に頼る存在でしかないのだ。 gokan: 《 yomi: 《 hinshi: 記号 gokan: 殺戮 yomi: サツリク hinshi: 名詞 gokan: の yomi: ノ hinshi: 助詞 gokan: 羅刹 yomi: ラセツ hinshi: 名詞 gokan: デ yomi: デ hinshi: 助詞 gokan: ス yomi: ス hinshi: 動詞 gokan: ・ yomi: ・ hinshi: 記号 gokan: クルーザー yomi: クルーザー hinshi: 名詞 gokan: 》 yomi: 》 hinshi: 記号 gokan: yomi: hinshi: 記号 gokan: 奴 yomi: ヤツ hinshi: 名詞 gokan: に yomi: ニ hinshi: 助詞 gokan: 仲間 yomi: ナカマ hinshi: 名詞 gokan: は yomi: ハ hinshi: 助詞 gokan: 居 yomi: イ hinshi: 動詞 gokan: ない yomi: ナイ hinshi: 助動隧 gokan: 。 yomi: 。 hinshi: 記号 gokan: それ yomi: ソレ hinshi: 名詞 gokan: 故 yomi: ユエ hinshi: 名詞 gokan: に yomi: ニ hinshi: 助詞 gokan: 一般 yomi: イッパン hinshi: 名詞 gokan: 的 yomi: テキ hinshi: 名詞 gokan: に yomi: ニ hinshi: 助詞 gokan: は yomi: ハ hinshi: 助詞 gokan: 同士 yomi: ドウシ hinshi: 名詞 gokan: 討ち yomi: ウチ hinshi: 動詞 gokan: など yomi: ナド hinshi: 助詞 gokan: の yomi: ノ hinshi: 助詞 gokan: 躊躇い yomi: タメライ hinshi: 動詞 gokan: が yomi: ガ hinshi: 助詞 gokan: 生じる yomi: ショウジル hinshi: 動詞 gokan: 時 yomi: トキ hinshi: 名詞 gokan: でも yomi: デモ hinshi: 助詞 gokan: 遠慮 yomi: エンリョ hinshi: 名詞 gokan: せ yomi: セ hinshi: 動詞 gokan: ず yomi: ズ hinshi: 助動隧 gokan: に yomi: ニ hinshi: 助詞 gokan: 戦える yomi: タタカエル hinshi: 動詞 gokan: 。 yomi: 。 hinshi: 記号 gokan: 惑わさ yomi: マドワサ hinshi: 動詞 gokan: れる yomi: レル hinshi: 動詞 gokan: 物 yomi: モノ hinshi: 名詞 gokan: が yomi: ガ hinshi: 助詞 gokan: ない yomi: ナイ hinshi: 形容詞 gokan: 、 yomi: 、 hinshi: 記号 gokan: それ yomi: ソレ hinshi: 名詞 gokan: こそ yomi: コソ hinshi: 助詞 gokan: 理想 yomi: リソウ hinshi: 名詞 gokan: 的 yomi: テキ hinshi: 名詞 gokan: な yomi: ナ hinshi: 助動隧 gokan: 最強 yomi: サイキョウ hinshi: 名詞 gokan: の yomi: ノ hinshi: 助詞 gokan: 証 yomi: アカシ hinshi: 名詞 gokan: で yomi: デ hinshi: 助動隧 gokan: あろ yomi: アロ hinshi: 助動隧 gokan: う yomi: ウ hinshi: 助動隧 gokan: 。 yomi: 。 hinshi: 記号 gokan: 最 yomi: サイ hinshi: 接頭詞 gokan: 凶 yomi: キョウ hinshi: 名詞 gokan: と yomi: ト hinshi: 助詞 gokan: 呼ば yomi: ヨバ hinshi: 動詞 gokan: れ yomi: レ hinshi: 動詞 gokan: た yomi: タ hinshi: 助動隧 gokan: 覚醒 yomi: カクセイ hinshi: 名詞 gokan: 者 yomi: シャ hinshi: 名詞 gokan: も yomi: モ hinshi: 助詞 gokan: 所詮 yomi: ショセン hinshi: 副詞 gokan: 仲間 yomi: ナカマ hinshi: 名詞 gokan: に yomi: ニ hinshi: 助詞 gokan: 頼る yomi: タヨル hinshi: 動詞 gokan: 存在 yomi: ソンザイ hinshi: 名詞 gokan: で yomi: デ hinshi: 助動隧 gokan: しか yomi: シカ hinshi: 助詞 gokan: ない yomi: ナイ hinshi: 助動隧 gokan: の yomi: ノ hinshi: 名詞 gokan: だ yomi: ダ hinshi: 助動隧 gokan: 。 yomi: 。 hinshi: 記号 gokan: EOS yomi: 。 hinshi: 記号 それ それ の クルーザー 一般 仲間 仲間 凶 同士 奴 存在 故 時 最強 殺戮 物 理想 的 的 羅刹 者 覚醒 証 遠慮
# -*- coding: utf-8 -*- import sys import codecs import re import MeCab import twitter sys.stdout = codecs.getwriter('utf_8')(sys.stdout) def hasKanji(s): #Returns True if string s contains a Kanji, False if not. kanji = False for c in s: if (((ord(c)&0xff00) == 0x3000) or (0x4e00 <= ((ord(c)&0xff00) <=0x9f00))): kanji = True break return kanji # api = twitter.Api() timeline = api.GetPublicTimeline() for s in timeline: t = s.text if hasKanji(t): print "Source> ", t m = MeCab.Tagger('-Ochasen') print m.parse(t.encode('utf_8')) <<< MeCabパッケージはUTF_8のstr型しか受付けないのでencodeしてから食わせる
出力結果は
Source> 晴れて良かったね。卒業式に雪とか私そうだったわ 晴れ ハレ 晴れる 動詞-自立 一段 連用形 て テ て 助詞-接続助詞 良かっ ヨカッ 良い 形容詞-非自立 形容詞・アウオ段 連用タ接続 た タ た 助動詞 特殊・タ 基本形 ね ネ ね 助詞-終助詞 。 。 。 記号-句点 卒業 ソツギョウ 卒業 名詞-サ変接続 式 シキ 式 名詞-接尾-一般 に ニ に 助詞-格助詞-一般 雪 ユキ 雪 名詞-一般 とか トカ とか 助詞-並立助詞 私 ワタシ 私 名詞-代名詞-一般 そう ソウ そう 名詞-接尾-助動詞語幹 だっ ダッ だ 助動詞 特殊・ダ 連用タ接続 た タ た 助動詞 特殊・タ 基本形 わ ワ わ 助詞-終助詞 EOS
MeCabパッケージでは、解析ノードをノードの形で取り出すことができる。
# -*- coding: utf-8 -*- import sys import codecs import MeCab import twitter sys.stdout = codecs.getwriter('utf_8')(sys.stdout) def hasKanji(s): #Returns True if string s contains a Kanji, False if not. kanji = False for c in s: if (((ord(c)&0xff00) == 0x3000) or (0x4e00 <= ((ord(c)&0xff00) <=0x9f00))): kanji = True break return kanji api = twitter.Api() timeline = api.GetPublicTimeline() for s in timeline: t = s.text if hasKanji(t): print "Source> ", t # Chasenと同じ形式 mt = MeCab.Tagger('-Ochasen') print mt.parse(t.encode('utf_8')) # ノードに整理 mt = MeCab.Tagger() m = mt.parseToNode(t.encode('utf_8')) while m: print m.surface, "\t", m.feature m = m.next print "EOS"
出力は
Source> iPad3買う理由がまた1つ出来たw iPad iPad iPad 名詞-一般 3 3 3 名詞-数 買う カウ 買う 動詞-自立 五段・ワ行促音便 基本形 理由 リユウ 理由 名詞-一般 が ガ が 助詞-格助詞-一般 また マタ また 接続詞 1 1 1 名詞-数 つ ツ つ 助動詞 下二・タ行 基本形 出来 デキ 出来る 動詞-自立 一段 連用形 た タ た 助動詞 特殊・タ 基本形 w w w 名詞-固有名詞-組織 EOS BOS/EOS,*,*,*,*,*,*,*,* iPad 名詞,一般,*,*,*,*,* 3 名詞,数,*,*,*,*,* 買う 動詞,自立,*,*,五段・ワ行促音便,基本形,買う,カウ,カウ 理由 名詞,一般,*,*,*,*,理由,リユウ,リユー が 助詞,格助詞,一般,*,*,*,が,ガ,ガ また 接続詞,*,*,*,*,*,また,マタ,マタ 1 名詞,数,*,*,*,*,* つ 助動詞,*,*,*,下二・タ行,基本形,つ,ツ,ツ 出来 動詞,自立,*,*,一段,連用形,出来る,デキ,デキ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ w 名詞,固有名詞,組織,*,*,*,* BOS/EOS,*,*,*,*,*,*,*,* EOS
TwitterのStreamインタフェースで、連続してツイートをアクセスしてみたい。(そうでないと、アクセス制限があって、連続して見ることができない)
Streamインターフェースについて調べてみると、Pythonからは、裸で使う(自分でリクエストを組み立てて出す)か、ライブラリとしてはTweeetyが便利そうである。
次は、Tweetyを使ってStreamアクセスをしてみる ⇒ ノート/テキストマイニング/twitter-tweepy1