エントリに対する被リンク数を計算するプログラム
『多くのニュースサイトに紹介されているエントリは良いエントリであろう.』
この考え方を適用して,集合知のアルゴリズムを考えよう.
要するにGoogleニュースのオタクニュースサイト版を作ろうかと思いました.
しかもほとんど触れたことのないJavaで作ってみようかと…
ソースを全部載っけてもいいんだけど,恥ずかしいのもあるし,長いのでまたの機会にしよう.
でもまだできてなくて,今回はテストとして,かーずSPさん,ふぇいばりっとでいずさん,http://www6.ocn.ne.jp/~katoyuu/さん,ゴルゴ31さんの四箇所で計測してみました.(結果は下で示します)
感想はもうぶっちゃけ『だいじょうぶかな〜?』です.w
それにしてもオブジェクト指向ってなんじゃらほい.
<クラス,Getter> //このメソッドの前にURLからHTMLをとってきて,htmlArea_Sに格納されています. public void Kaiseki(){//ここで何をサーチするのかを指定できます. System.out.println("Start"); htmlArea_S =htmlArea.getText(); //System.out.println(htmlArea_S); while(GetToken()==1){ Search_link(); } } <以下構文解析木みたいなもの?w> public int Search_link(){ if(Token=='<'){ GetToken(); if(Token=='a'){ GetToken(); if(Token==' '){ GetToken(); if(Token=='h'){ GetToken(); if(Token=='r'){ GetToken(); if(Token=='e'){ GetToken(); if(Token=='f'){ GetToken(); if(Token=='='){ GetToken(); String Token_buf=""; while(Token!='>' && Token!=' '){ Token_buf=Token_buf+Token; GetToken(); } //System.out.println(Token_buf); ArrayListTest.check(Token_buf); return 1; } } } } } } } } return 0; } public int GetToken(){ if(Token_c< htmlArea_S.length()){ Token = htmlArea_S.charAt(Token_c); //System.out.print("<"+Token+">"); Token_c++; return 1; }else{ return 0; } }
Search_linkメソッドで,HTML文章から
<a href="****">
の米印部分を取得できます.それをHashMapに格納します.(下)
class ArrayListTest{ //最初にArrayListで実装しようと思いました. public static HashMap list = new HashMap(); public static void ArrayListAdd(String word){ list.put(word,"1"); } public static void Show(){ sort(); } public static void check(String word){ if(null!= list.get(word)){ int word_value=Integer.parseInt(list.get(word).toString()); list.put(word,word_value+1); }else{ ArrayListAdd(word); } } public static void sort(){ ArrayList entries = new ArrayList(list.entrySet()); Collections.sort(entries,new Comparator(){ public int compare(Object o1, Object o2){ Map.Entry e1 =(Map.Entry)o1; Map.Entry e2 =(Map.Entry)o2; int e1Value = Integer.parseInt(e1.getValue().toString()); int e2Value = Integer.parseInt(e2.getValue().toString()); return (e2Value-e1Value); } public boolean equals(Object obj){ return super.equals(obj); } }); System.out.println(entries); } }
このMAPのソートが一番疲れた.構造体で格納できれば楽だったんだけど,JAVAにあるのか?それっぽい機能でもいいから教えてくれ〜〜配列に格納してるのは格好が悪いし,扱いづらいんだけど
慣れれば(というかもっと使い方を知れば),便利になるのかな?
一応,HashMapからArrayListにしてValueの値でソートできたけど,なんかなぁ〜
今回はテストとして,かーずSPさん,ふぇいばりっとでいずさん,http://www6.ocn.ne.jp/~katoyuu/さん,ゴルゴ31さんの四箇所からHTMLを取ってきて上記のプログラムに掛けました.
結果を一部示します.
["http://b.hatena.ne.jp/"=27, "http://pya.cc/"=9, "http://sorakale.blog83.fc2.com/blog-category-0.html"=8, "http://www.akibablog.net/"=7, "http://sorakale.blog83.fc2.com/"=6, "http://retro85.blog33.fc2.com/"=6, "http://kom824.blog113.fc2.com/"=4, "http://www.amazon.co.jp/gp/product/B0009RQKRQ?ie=UTF8&tag=karzusp-22&linkCode=as2&camp=247&creative=1211&creativeASIN=B0009RQKRQ"=4, "http://d.hatena.ne.jp/dooto/"=4, "http://www6.ocn.ne.jp/~katoyuu/"=4, "http://miruto.org/"=4, "http://www1.odn.ne.jp/cjt24200/yamada/"=4, "http://www.amazon.co.jp/gp/product/B000SNUP18?ie=UTF8&tag=karzusp-22&linkCode=as2&camp=247&creative=1211&creativeASIN=B000SNUP18"=3, "http://www.amazon.co.jp/gp/product/B000SQKQT6?ie=UTF8&tag=karzusp-22&linkCode=as2&camp=247&creative=1211&creativeASIN=B000SQKQT6"=3, "http://www.amazon.co.jp/gp/product/B000N5DBDA?ie=UTF8&tag=karzusp-22&linkCode=as2&camp=247&creative=1211&creativeASIN=B000N5DBDA"=3, "http://www.amazon.co.jp/gp/product/B000S93596?ie=UTF8&tag=karzusp-22&linkCode=as2&camp=247&creative=1211&creativeASIN=B000S93596"=3,
予想していたことですが,酷いノイズです.まともなデータが埋まっているのかすら疑問だw
とりあえずはてブへのリンクとかアマゾンへのリンクはノイズとして除去しよう.