Memo plus Alpha

メモにプラスアルファを加えて価値ある情報に。

RMeCabを使ってwordcloudを作る

(1)RMeCabをインストール
install.packages("RMeCab", repos = "http://rmecab.jp/R")

※場合によっては管理者権限でRを起動する必要あり(ショートカットを右クリックから) 

 

(2)"tm"と"wordcloud"をpackagesのメニューからインストール

 

(3)パッケージの読み込み
library(wordcloud)
library(RMeCab)

 

(3)分析対象を決める
分析対象のテキストをマイドキュメント(Rが自動で参照できるフォルダ)に設置。

ここではdata.txtとした。

 

(4)RMeCabで頻度を解析
data.freq=RMeCabFreq("data.txt")

→結果はこのようになる。

Term Info1 Info2 Freq
1 え フィラー * 1
2 ありがとう 感動詞 * 1
3 おお 感動詞 * 1
4 はい 感動詞 * 1
5 C 記号 アルファベット 1
6 ・ 記号 一般 29

 

(5)データのフィルタリング
data.sub=subset(data.freq, Info1=="名詞" | Info1=="動詞", c(Term,Freq))
# 名詞か動詞を指定。条件には「|」(or)か「&」を使う(||、&&は不可)

#subsetはデータフレームから条件を指定してデータを抜き出せる関数。

#subset(データ,条件(列名で指定可能),出力列)

 

data.sub2=subset(data.freq, Info1=="名詞" & Info2!="数", c(Term, Freq))
#名詞を指定、数を除外

 

(6)描画
wordcloud(data.sub[,1], freq=data.sub[,2], min.freq=3,random.order=F)
#一つ目で単語の行、freq=で単語の頻度、min.freqで最低頻度、random.orderで配置を決める

★色をつける
wordcloud(data.sub[,1],freq=data.sub[,2],min.freq=3,random.order=F, color=c("pink","yellow","green", "blue", "red"))
#右が頻度大の色

wordcloud(data.sub[,1],freq=data.sub[,2],min.freq=3,random.order=F, color=rainbow(7))
#rainbowで色数を指定

★データの書き出し
write.table (data, file = "data.txt", sep = "\t", quote = FALSE, row.names = FALSE)

 

参考:ワードクラウドを作る - langstat blog

Wimaxで追加機器オプションでルーターを登録する

Wimaxでは、月々の基本料金+200円で、ルーターを追加登録できます。

 

これを行うことで、「家用」「外出用」などを使い分けることができ、便利です(※ただし、2つのルーターから同時接続は不可。同時接続を行うプラン(WiMAXファミ得パック)もありますが、これは+2400円程度かかります)。

 

その追加機器の登録方法ですが、躓いたのでメモ。

 

ルーター1(回線契約をしているもの)

こちらに接続をする必要はありません。

 

ルーター2(追加する方)

こちらにPCからアクセスします。ルーターSSIDとパスワードが記載されているはずですので、PCの無線スポットの一覧から選択し、このルーターに接続します(普通にインターネットにつなぐ要領)。

すると設定画面が開きます。開かない場合は、ブラウザを起動します。

その画面から、プロバイダを選び、手持ちのIDとパスワード(SSIDではなく、プロバイダの会員ページに入るものです)でログインします。

追加機器に関するメニューがありますので、そこから登録します。

VBでWordファイルをutf-8のテキストで保存する

ハマったのでメモ。

 

タイトルの通り、VBでWordファイルを開き、utf-8のテキストで保存する方法です。

 

       Dim wdApp

        Dim wdDoc

        wdApp = CreateObject("Word.Application")

        wdDoc = wdApp.Documents.Open(Filename:="C:\Test\test3.docx", ReadOnly:=True)

 

        'テキストファイルとして保存

        wdDoc.SaveAs(FileName:="C:\Test\test3.txt", Encoding:=65001, FileFormat:=7)

 

        wdDoc.Close()

        wdDoc = Nothing

       wdApp.Quit()

        wdApp = Nothing

 

   ポイントはSaveAsのところ。EncodingはmsoEncodingUTF8といくつのサイトにありましたが、これはVB上では認識されません(☓Encoding:=msoEncodingUTF8)。数字で指定すればOKでした。なお、65001はUTF-8にあたるものです。

 http://dobon.net/vb/dotnet/file/readfile.html

 

   FileFormatも同様に数字で。wdFormatUnicodeTextは7を指定します。

http://office.microsoft.com/en-us/word-help/HV080607264.aspxにFileFormatの情報があります。

 

PHPでチェックボックス(checkbox)の値を受け取る

【ポイント】チェックボックスは配列

 

チェックボックスは複数選択可能な入力であるので、注意が必要です。PHPなど、CGIで入力を受け取るとき、値が0のときもあり、1のときもあり、それ以上のときもあるので、それに対応しなければなりません。

 

どのように対応するか、というと、チェックボックスを配列として扱うことです。例えば、checkboxという名前の配列があるとすると、この1つ目にチェックされたチェックボックスのvalueの1つ目が、2つ目にチェックされたチェックボックスのvalueの2つ目が入る、ということです。

 

次の例では、checkboxという配列に値を格納しています。

 

<form method="POST" action="checkbox.php">

<INPUT type="checkbox" id="A"  name="checkbox" value="A">

<LABEL for="comma">Aを選ぶ</LABEL>

<INPUT type="checkbox" id="B"  name="checkbox[]" value="B">

<LABEL for="colon">Bを選ぶ</LABEL>

※labelを設定することで文字列を選んでもチェックできるようになります。

 

両方チェックされていれば、checkbox[0]のvalueはA、checkbox[1]のvalueはBとなります。

 

Aだけチェックされていたら、checkbox[0]はA、checkbox[1]は空っぽです。

 

Bだけチェックされていたら、checkbox[0]はB、checkbox[1]は空っぽです。

 

このとき、必ず0番目から値が埋められていくことに注意してください。つまり、checkbox[0]には、常にはじめにチェックされたもののvalueが格納されるということです(配列番号がチェックボックスの順番と対応しているということではありません)。

 

値の受け取りは、次のようにやはり配列を指定して受け取ります。

<?php

//値の受け取り

$checkbox1 = $_POST["checkbox"][0];

$checkbox2 = $_POST["checkbox"][1]; 

>

この場合、この後に条件分岐をするとすれば、(1)両方チェックされている場合、(2)Aだけチェックされている場合、(3)Bだけチェックされている場合の3つがあります。

 

(1)はif ($checkbox1=="A" AND $checkbox2=="B")

(2)はelseif ($checkbox1=="A") 

(3)はeseif(($checkbox1=="B") 

 

となります。

 

 

 

【Perl】ホームページの更新日時を取得する(html,pdfなど)

ホームページの更新日時取得する方法。

 

「更新が滞っているページ」や「最も古いページ」を調べたい場合、以下のPerlのコードで更新日時を取得できます。

(1) modifieddate.pl

  1. use LWP::Simple;
  2. use HTTP::Status;
  3. require LWP;
  4. require LWP::UserAgent;
  5.  
  6. $ua = new LWP::UserAgent;
  7. $ua->agent("LWP::GETHEAD");
  8. open(URLLIST, "< urllist.txt") or die("error :$!");
  9.  
  10. while (my $line = <URLLIST>){
  11. chomp($line);
  12. $url = $line;
  13. $request = new HTTP::Request HEAD => $url;
  14. $response = $ua->request($request);
  15.  
  16. print "$url\t";
  17. print $response->header('Last-Modified');
  18. print "\n";
  19.  
  20.  
  21. }
  22.  
  23. を参考に作成
  24.  

(2) urllist.txt

調べるURLはurllist.txtに1行ずつ書いておきます。スクリプトと同じフォルダにおいてください。

http:// hogehogehogehoge/xx.html

http:// hogehogehogehoge/yy.html

http:// hogehogehogehoge/zz.html

 

ウェブページからリンクを抽出するには以下のようなサイトが便利(リンク、抽出、で検索)。

http://t.mscl.jp/chk/

 

(3)実行

コマンドラインでmodifieddate.plのフォルダに移動し以下を実行。

perl modifeddate.pl > result.txt

(4)結果

result.txtはこんな感じになります。pdfなどでも取得できるようです。タブ区切りで生成されるのでエクセルなどで読み込んでください。

http:// hogehogehogehoge/zz.pdfThu, 15 Sep 2011 02:23:46 GMT

http:// hogehogehogehoge/zz.html Thu, 15 Sep 2011 02:23:46 GMT