2013年3月28日 星期四

WEKA 筆記

WEKA, Waikato Environment for Knowledge Analysis的簡稱
是一個可用來做資料探勘的好用工具
下載點 (版本3.6/2013/03/28)

[基本使用]

安裝完後主要有四種模式可以運用,點擊工具列的Applications就可看到

  • Explorer
  • Experimenter
  • KnowledgeFlow
  • SimpleVLI
我主要是使用Explorer,基本使用方式直接參考Ref
主要支援的檔案格式為ARFF,亦可使用CSV

Ref.

[在你的Java程式使用Weka]



訓練資料(Train Data)生成方式有兩種

1. 讀檔
2. 程式內自己產生
主要會用到下面的類別
weka.core.Attribute
weka.core.FastVector
weka.core.Instance
weka.core.Instances

建立訓練模型

主要會用到下面的類別
weka.classifiers.Classifier
weka.classifiers.Evaluation

Ref 2和3有範例可以參考

Ref.

php-java bridge 筆記

為了在php使用weka的函式庫

最近用了一個方便的東西:PHP/Java Bridge

它的運作原理暫時還不是很了解

先筆記一下要怎麼安裝和使用

[安裝]

下載點(版本:6.2.1/2013/03/28)

下載後是一個壓縮檔,裡面有兩個檔案,documentation和JavaBridge.war(WAR file format)

建立一個資料夾JavaBridge(自己命名),將JavaBridge.war丟進去

打開cmd,cd至JavaBridge

java -classpath JavaBridge.war TestInstallation

執行完後出現兩個資料夾:ext, java
                        兩個檔案:RESULT.html, test.php

ext內有四個jar檔:JavaBridge.jar, php-script.jar, php-servlet.jar,script-api.jar

java內有一個Java.inc

滿身大汗戰戰兢兢地弄到這步後,怎麼知道成功了沒?

讓我們把焦點移至test.php

這個php檔案裡面已經有幫寫好的測試,它大致上要做的是先列出phpinfo

然後呼叫java.lang.System.getProperties()列出環境資訊

所以假設http://localhost:8080/JavaBridge/test.php有先列出phpinfo後再列出java 環境資訊大概就是成功了。

不過Ref 1中的第5點有提到 
Copy JavaBridge.jar and php-script.jar to your J2SE/Java SE ext directory ({JAVA_HOME}/jre/lib/ext).
不曉得是否為必須動作

Ref:
1. http://www.developer.com/java/other/php-with-java-using-php-java-bridge-tutorial.html
2. http://blog.wabow.com/archives/62
3. http://www.fkblog.org/blog562

[使用外部jar檔]

Ref 2中有提到
開發者似乎在version 6.0時已經將java_require( )給拿掉
所以6.0後的版本,利用java_require(weka.jar)這樣的方式會出現warning
參考Ref 1中的一個解法


  1. package your code to jar, and copy it to java.ext.dirs which you can found in JavaBridge.log
  2. copy the related class libraries to java.ext.dirs
  3. restart the service of JavaBridge
意思就是將weka.jar丟到jre的ext資料夾內然後重新啟動JavaBridge服務


Ref:
1. http://stackoverflow.com/questions/5389689/working-with-php-java-bridge
2. PHP/Java Bridge FAQ

[使用方式]

在php檔中宣告java的Instance
$s = new Java("java.lang.String", "我在php中運行java");
echo $s;


第一個參數填入欲使用類別,就像import一樣
第二個參數以後填入的是此類別Constructor的參數,
若是Constructor有一個以上的參數,目前測試的結果是依序填下去就可以


$fvNominalVal = new Java("weka.core.FastVector",2);
$fvNominalVal->addElement("yes");
$fvNominalVal->addElement("no");
//Constructor have two parameters
$Identity = new Java("weka.core.Attribute","Identity", $fvNominalVal); 

使用函式的方法要照php的方式來用
原本在java使用函式為 fvNominalVal.addElement("yes");
要改成  $fvNominalVal->addElement("yes");

將Java的Instance轉換為相對應的php value
Ref 1中提到
Use java_values() to convert a Java object into an equivalent PHP value

若要做反向的動作
Use java_closure() to convert a PHP object into an equivalent Java object.

Ref:
1. PHP/Java Bridge API

2013年3月1日 星期五

chrome bowserAction

chrome.browserAction.onClicked.addListener(function(tabs.Tab tab) {...});

Fired when a browser action icon is clicked. This event will not fire if the browser action has a popup.

假如browser action有開啟popup.html,此事件就不會被觸發!!

所以假設我一定要有popup.html,
我就不能用chrome.browserAction.onClicked的方式注入content script
而要在manifest.json定義


{
  "name": "My extension",
  ...
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "css": ["mystyles.css"],
      "js": ["jquery.js", "myscript.js"]
    }
  ],
  ...
}


Ref:
1. http://developer.chrome.com/extensions/browserAction.html
2. http://studio.zeuik.com/?p=850#sthash.cWrFaEEC.25PMSXkS.dpbs