2015年1月2日金曜日

boilerpipeをインストールする問題

仮想環境からのboilerpipe呼び出しは、出来た訳ではございますか、何かとめんどくせ〜。bagrant upをいちいちやらされるのは嫌だなは、ソフト方面の習性じゃん。

とのことで、anacondaからboilerpipeを動かせるようにしてみましょう。

・boilerpipe(ダウンロード、インストール)

 Get a binary and optionally also the source tarball from the Downloads pageExtract the files somewhere
   tar xvzf boilerpipe-VERSION-bin.tar.gz
   tar xvzf boilerpipe-VERSION-src.tar.gz
 Add boilerpipe-VERSION.jar, nekohtml-1.9.13.jar and xerces-2.9.1.jar to your Java classpath
 (these jar files are included in the binary tarball).
 (Whereas VERSION needs to be replaced by boilerpipe's version number, e.g. 1.0.3).

ついでに、CLASSPATHを設定しますが、anacondaが.bash_profileをいじってるようですので、真似っこします。

・boilerpipe(CLASSPATH)
(.bash_profile)# added for boilerpipeexport CLASSPATH="//Users/tanakayasuhisa/Downloads/boilerpipe-1.2.0://Users/tanakayasuhisa/Downloads/boilerpipe-1.2.0/lib:$PATH"
でコマンドラインで、シェルを再実行いたします。
MacBook-Air:~ AhoahoMan$ source .bash_profile
boilerpipyはjava実装なので、pythonのラッパー(と呼んでよいか?)をインストールせにゃならんので、以下を実行します。

MacBook-Air:~ AhoahoMan$ sudo pip install boilerpipe

ここでJavaのアップデートなどと色気付いたのが、その後のトラブルの元凶、鬼畜の所業、下衆の振る舞いだったのでしょう。


pythonから以下を実行しますと、”Javaが6じゃねえから動かねえぜ、おバカな君は<詳細情報>のボタンを押しな、ケッ!”と言う意味合いの人間を小馬鹿にしたエラーダイアログをMacBook司教(Air派)が出されます。

  from boilerpipe.extract import Extractor
  u = "http://www.miyadai.com/index.php?itemid=1061"
  e = Extractor(extractor='ArticleExtractor', url=u)
  print e.getText()

こんな時に、腹を立ててパソコンを床に叩きつけると、またまた、余計な出費が発生しますので、機械に小馬鹿にされたぐらいで動じてはいけません。ここは、心静かに<詳細情報>ボタンを押しますと、以下のページが表示されます。

appleのサポート神官に感謝しつつ、記載の内容に従い、かなり怪しげなパッケージをインストールしますと、あら不思議。さきほどのpythonソースが動きます。

こんなとき、何が起こったのかは、子羊であるところの消費者(カスタマー)が疑問をもってはいけません。apple教の深遠な思想を思いやるのは、時間の無駄(あるいは、よき人生の無駄)です。

お疲れっす。

【MIYADAI.com】からテクストをパクる(2)

BeautifulSoupが高機能っぽいんですが、どうもテクストの抽出がもっさりしているんで、嫌だなぁって感じでしたが、ありましたよ、boilerpipeが。

まあ何しろ、出来ることが出来りゃあいいんですが。
と言うわけで、下記に示す。

  from boilerpipe.extract import Extractor
  u = 'http://www.miyadai.com/index.php?itemid=1061'
  e = Extractor(extractor='ArticleExtractor', url=u)
  print e.getText()

あざっす。

2014年12月31日水曜日

入門ソーシャルデータ

んでもって、そろそろまいりましょうか。

■入門 ソーシャルデータ 第2版 ―ソーシャルウェブのデータマイニング

どうも、仮想環境を作んなさいなと著者が言うので、あっさり従うことにします。

・VirtualBox
・Vagrant

サンプルソースはGitで管理されているそうでして、アカウントなしでレポジトリをチェックアウトしますと、さっすがにエラー発生いたします。
従いまして、ここはひとつ素直な心でGitHubのアカウントを作成いたしました。

・GitHub(アカウント作成)
・レポジトリチェックアウト(git clone git@github.com:XXXXXXXX.git)

で、案の定と申しますか、OSX Yosemiteでは動きませんでした。とのことで、下記参照しております。

・issues245
・issues243

On OSX Yosemite host, ran into the following issue installing setup tools (ez_setup & pip).Looks like python was not linked as expected by Chef.Resolved it by running vagrant ssh and then sudo ln -s /usr/bin/python /bin/python.After that I had to run vagrant provision.

ここで、やっとのこと、
http://localhost:8888
にアクセスできるようになりました。

RMeCabは偉い問題

石田基広さんのRMeCabは偉いっ。MeCabはそもそも形態素解析だけで、pythonでN-Gram出ないじゃねえの、めんどくっせ〜と、気づきました。RStudio入れておいてよかった、よかった。

■データマイニング入門

では、基本からいっときます。

library(RMeCab)
library(igraph)

b ← "私はあの力士のことを深く愛している。"
c ← RMeCabC(b)
c
c[[1]]

# "名詞" ← どうも配列の名前で参照のようっす
names(c[[1]])
# "私"
c[[1]][1]

setwd("/Users/OnePunchMan/Desktop/R/rmecab")
getwd()

c ← RMeCabText("./test0.txt")
c

# 頻度
r ← RMeCabFreq("./test1.txt") 
r

# 頻度が5以上
r[r$Freq >= 5, ] 

# 頻度が5以上、かつ品詞が名詞
r[r$Freq >= 5 & r$Info1 == "名詞", ]

# 頻度が5以上、かつ(名詞もしくは動詞)
r[r$Freq >= 5 & (r$Info1 == "名詞" | r$Info1 == "動詞"), ]

# 固有名詞
r[r$Info2 == "固有名詞", ]


# 共起語
r  ← collocate("./test2.txt", node="芸者", span=1)
r

# 共起語(t値、MI値)
r2 ← collScores(r, node="芸者", span=1)
r2

# N-Gram
r  ← Ngram("./test3.txt", type=1, pos="名詞", N=2)
r

# N-Gram(DataFrame)
r2 ← NgramDF("./test.txt", type=1, pos="名詞")
r2

# plot ← .Rprofileの変更しないと文字化けしますぞ
g  ← graph.data.frame(r2)
g
plot(g)

# EOF #

しかし、このplotの見づらさは、何とかならんとは思いつつ。
よろしくお願いいたします。

お掃除ロボットの表紙はいかがなものか問題

なんで、今頃になって python、Rなのかって話は、書いておかないと忘れるので。

■5金スペシャル 人工知能が閻魔大王になる日

どうも、例の『お掃除ロボットの表紙はいかがなものか問題』の編集長さんらしいのですが、神保さん「松尾さん、日頃は研究室で何やってんですか?」、松尾さん「pythonでプログラム書いとりますっ!」ってことで、ふ〜ん、そ〜なんって訳です。

底辺のMATLABたるpythonも本望なことでありましょう。

となりますと、東大の研究所も底辺なの?ってことになっちゃいますが、便利なものはありがたく使わせていただこうとの心意気がグッドです。そうなると、設備投資の差は無いはずなので、あとは<愛>があるかどうかの勝負なのでしょう。

■伽藍とバザール
■ノウアスフィアの開墾
■魔法のおなべ

ところで、「教授っ!、PyPIが大きく変化しました。新しいBeautifulSoup、ここはいっちょう派手めに、いっときます?」って会話は、ほぼほぼ、セクハラじゃないかと心配になります。

【MIYADAI.com】からリンクをパクる

同じネタで、リンクを抜き出しましたが、1階層で我慢しとけ。(後でやっから)

# -*- coding: utf-8 -*-
from urllib import urlopen
from bs4 import BeautifulSoup

f = 'http://www.miyadai.com/index.php?itemid=1061'
s = BeautifulSoup(urlopen(f))

print s.title.string
for h in s.findAll('a'):
 t = str(h.get('href'))
 if 'http:' in t :
  print(t)
 elif 'https:' in t :
  print(t)
 else:
  pass

# EOF #

まったまた、なんかズルをしましたが、年末は何かと忙しいので、許せ。

【MIYADAI.com】からテクストをパクる

さてさて、準備は整った訳ですので、そろそろ解析ネタを集めねばならん。
とのことで、ここからネタを集めることにします。


早速ですが、python+BeautifulSoupからいってみます。
話は横にそれますが、BeautifulSoupって風俗があっても、おかしくはないと思います。
誰かが、すでに商標登録してたら、笑えます。


# -*- coding: utf-8 -*-
from urllib import urlopen
from bs4 import BeautifulSoup

soup = BeautifulSoup(urlopen('http://www.miyadai.com/index.php?itemid=1061'))
print soup.title.string

file = open(soup.title.string+".txt", "w")
file.write(soup.title.string)

for h in soup.findAll(**{"class":"itembody"}):
 l = len(h.contents)
 for n in range(0, l):
  t   = str(h.contents[n])
  t1 = t.replace("<br/>","")
  t2 = t1.replace("<b>","")
  t3 = t2.replace("<b","")
  print(t3)
  file.write(t3)

file.close()
# EOF #

お恥ずかしい話ですが<br/>がど〜しても取れないんで、ズルしました(ついでに、<b>、”<b/>もね)。
まあ、あんまし細かいこと言ってると老けるので、不本意ながら我慢しておきます。