2019年8月18日日曜日

UbuntuにRMecabをインストールする

あまプロではRを使ってテキストマイニングの授業を行う事が有ります。

先日、生徒さんへRの環境構築を教えた際にハマりポイントが有りましたのであメログ。

Ubuntu19.04では以下のコマンドでR言語とmecabをインストール出来ます。
sudo apt install r-base mecab
確認
R --version
R version 3.5.2 (2018-12-20) -- "Eggshell Igloo"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.
現時点の最新版(3.6.1)やないけどまぁ良ぇわ
続いて確認
mecab --version
mecab of 0.996
これでRとMecabをインスール出来ます。
最後にRからMecabを利用する為に、RMecabをインストールします。
Rを起動して
R
R上でRMecabをインストールします。
install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")
なんですが、私の環境では下記のエラーが出ました。
/usr/bin/ld: -lmecab が見つかりません
collect2: error: ld returned 1 exit status
make: *** [/usr/share/R/share/make/shlib.mk:6: RMeCab.so] エラー 1
ERROR: compilation failed for package ‘RMeCab’
* removing ‘/home/masayuki/R/x86_64-pc-linux-gnu-library/3.5/RMeCab’

 ダウンロードされたパッケージは、以下にあります
     ‘/tmp/RtmpZVhDFY/downloaded_packages’
 警告メッセージ:
 install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source") で:
   パッケージ ‘RMeCab’ のインストールは、ゼロでない終了値をもちました
mecabをインストールしたのにmecabが見付からへんと言うております。
どうやらRからmecabを参照出来てへん様です。
探してみます。
locate mecab
︙
/usr/lib/x86_64-linux-gnu/libmecab.so.2
/usr/lib/x86_64-linux-gnu/libmecab.so.2.0.0
有るやんけ
なもんで、リンボリックリンクを作って参照を追加したります。
sudo ln -s /usr/lib/x86_64-linux-gnu/libmecab.so.2 /usr/lib/x86_64-linux-gnu/libmecab.so
こんだけ
再度、R上からRMecabをインストール。
install.packages( "RMeCab", repos = "http://rmecab.jp/R", type = "source")
︙
installing to /home/masayuki/R/x86_64-pc-linux-gnu-library/3.5/RMeCab/libs
** R
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (RMeCab)

 ダウンロードされたパッケージは、以下にあります
     ‘/tmp/RtmpH1Viwj/downloaded_packages’
今度は上手いこと行けました。
library( RMeCab)
ライブラリを追加して、
unlist( RMeCabC( "すもももももももものうち"))
    名詞     助詞     名詞     助詞     名詞     助詞     名詞
"すもも"     "も"   "もも"     "も"   "もも"     "の"   "うち"
正しく品詞を解析出来てます。

RとMecabを用いると日本語アンケートの解析とかが出来る様になるんで便利です。

2019年8月17日土曜日

Scratch3.0のバグについて

あまプロではScratchを使ったプログラミングを教えています。

先日、生徒がScratch3.0でバグを見付けました。
スクラッチのコスチューム編集で、ある一定の操作をするとスクラッチがクラッシュするという物で、簡単に回避は出来るんですけど、毎回わざわざ回避せなあかんのは面倒なんで、改修してもらおうと考えてます。
なので、GitHubにバグ報告を挙げときましたオネガイエライヒト!

恐らく近々改修されると思うので、生徒にはこの際にエラーの種類について教えときました。
  1. シンタクスエラー 形式エラー
  2. ランタイムエラー 実行時エラー
  3. ロジックエラー  論理エラー
エラーにも色々有るんやでぇ〜という話で盛り上がりました。

2019年7月1日月曜日

JavaScriptのforループについて

あまプロではウェブサイトを作成する事が有ります。

その際、謎現象に遭遇したのであメログ。

JavaScriptでHTML要素をgetElementsByTagName( )で取得し
var elements = document.getElementsByTagName( 'tr');
for( var i in elements)
{
    console.log( i);
}
の様にfor inループで回すと、何故か
0
1
2
3
︙
item
という結果が出力されます。
何やねんitemって…。
ちなみに
var elements = document.getElementsByTagName( 'tr');
for( var i = 0; i < elements.length; i++)
{
    console.log( i);
}
という様にインクリメントするforやと発生しません。
なんかJavaScriptのfor...inループって癖が有りますね。

どないなってるんかなぁ…と思って調べたら
こういう仕様でした。
forループとfor...inループとfor...ofループ、それぞれ微妙にちゃう様です。
なので今回は
for( var element of document.getElementsByTagName( 'tr'))
{
    console.log( element);
}
for...ofループにし様としたんですが、for...ofはスマホのデフォルトブラウザで動かなかったので、諦めて普通のforループに戻しましたとさ…。

2019年6月28日金曜日

端末からクリップボードへコピーについて

あまプロではターミナルからクリップボードへコピーする場合があります。

コマンドでクリップボードにコピーする方法をあメログ。

xclip -sel clip < 適当なファイル名

xclipがインストールされてない場合は適宜インストールして下さい。

2019年6月24日月曜日

グーグルフォームの回答のコピーメールについて

あまプロではフォームの作成をお受けする事が有ります。

グーグルフォームを良く使うのですが、初期設定だと少し使い難いので、あメログ。

グーグルフォームには回答のコピーをメールで送信する機能が有ります。
しかし、このメールをHTML未対応(テキスト形式のみスマホの標準メーラ等)のメーラで受信するとかなり見難くなります。

致命的なのが、チェックボックスやドロップダウンリストで選択項目が送られません。
つまりフォームで何を選択したか確認できないのです。

この不具合はいつかは改修されるかもしれませんが、GoogleAppsScriptを使えば今から改修できます。

サンプルはこんな感じ。
function submitForm(e)
{
  var vName = 'グーグルフォーム';
  var vFrom = 'form@google.com';
  var vTo   = e.response.getRespondentEmail( );
  var vSub  = 'グーグルフォーム内容確認';
  var vBody = 'フォームの内容の写しをお送りします。\n\n';
  for( var i in e.response.getItemResponses( ))
  {
    vBody += e.response.getItemResponses( )[ i].getItem( ).getTitle( ) +' '+ e.response.getItemResponses( )[ i].getResponse( ) +'\n';
  }
  MailApp.sendEmail( {from:vFrom, to:vTo, subject:vSub, name:vName, body:vBody});
}
グーグルフォーム側ではメールアドレスを収集するにチェックを付け、回答のコピーを送信のチェックは外す。
プロジェクトのトリガーでフォーム送信時にスクリプトを実行する様に設定するだけです。
フォームの入力内容をメール本文に出力しているだなので、適宜メール本文は編集して下さい。

2019年6月9日日曜日

ExcelのVBAで文字列の中でダブルクオーテーションを使う

あまプロでは表計算のマクロ(スクリプト)の授業を行う事が有ります。
先日、文字列の扱いで質問が出たのであメログ。

LibreOfficeでもGoogleAppsScriptでもExcelでも文字列はダブルクオーテーションでくくります。
MsgBox "こんな感じ"

で、文字列内でダブルクオーテーションを使いたい場合はエスケープする必要が有ります。

LibreOfficeとExcelではこんな感じ
  MsgBox "これが""ダブルクオーテーション""です。"
GoogleAppsScriptではこんな感じ
  Logger.log( "これが\"ダブルクオーテーション\"です。")

例えばマクロで表計算の関数を出力したいとかはこの様にします。

2019年3月21日木曜日

Scratch3.0対応ブラウザについて

あまプロではScratchでプログラミングを教えています。

先日Scratchを表示し様として問題が発生したのであメログ。
あまプロでは通常firefoxをデフォルトブラウザにして授業を行っているのですが、
Scratch3.0を表示すると
こんなエラーが発生しました。
PCかブラウザがWebGLに対応してへんからスクラッチ出来へんで、と言うてます。
でもご覧になれば解る通り、後ろに薄っすらスクラッチのブロックが表示されてて、ぱっと見使えそうです。

しかし同じPCのchromiumで表示すると
表示出来ます。
バージョンはどちらも最新版で、OSはUbuntu18.04です…。

何ででしょうね?他のPCではこんな事は起きないんですが…原因不明です。