Advertisement
overloop

jisho_sentences.js

Nov 15th, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Output() {
  2.   this.init = function() {
  3.     $('body').append('<div id="result-div"><table id="result-table"></table></div>');
  4.     $('#result-table').html('');
  5.     $('#result-div').css('position','fixed').css('left','0').css('top','0').css('background','white').css('overflow','scroll').css('max-height','100%');
  6.   }
  7.   this.add = function(ja,en) {
  8.     $('#result-table').append('<tr><td>'+ja+'</td><td>'+en+'</td></tr>');
  9.   }
  10. }
  11.  
  12. function Dictionary() {
  13.   this.dict = [];
  14.   this.ranges = {hiragana:[0x3040,0x309f],katakana:[0x30a0,0x30ff],kanji:[0x4e00,0x9faf]};
  15.  
  16.   this.statKnown = function(text) {
  17.     var known = 0;
  18.     var unknown = 0;
  19.     for (var i=0;i<text.length;i++) {
  20.       var c = text.charCodeAt(i);
  21.       // count kanji characters only
  22.       if (c >= this.ranges['kanji'][0] && c <= this.ranges['kanji'][1]) {
  23.         if (c in this.dict) {
  24.           known++;
  25.         } else {
  26.           unknown++;
  27.         }
  28.       }
  29.     }
  30.     return [known,unknown];
  31.   }
  32.  
  33.   this._textToDict = function(text) {
  34.     var dict = [];
  35.     for (var i=0;i<text.length;i++) {
  36.       dict[text.charCodeAt(i)] = 1;
  37.     }
  38.     return dict;
  39.   }
  40.  
  41.   this.init = function(kanji) {
  42.     this.dict = this._textToDict(kanji);
  43.   }
  44. }
  45.  
  46. function Parser() {
  47.   this.sentences = function(data,dictionary,output) {
  48.     var ja = $(data).find('td.japanese');
  49.     var en = $(data).find('td.english');
  50.     for (var i=0;i<ja.length;i++) {
  51.       var ja_ = $(ja[i]).text();
  52.       var en_ = $(en[i]).text();
  53.       var stat = dictionary.statKnown(ja_);
  54.       //console.log(stat);
  55.       if (stat[1] < 3) {
  56.         output.add(ja_,en_);
  57.       }
  58.     }
  59.   }
  60.  
  61.   this.pages = function(data,pageLimit) {
  62.     var pages=[];
  63.     $(data).find('a').each(function(i,item){
  64.       //console.log($(item).attr('class'))
  65.       if ($(item).attr('href')) {
  66.           var href = $(item).attr('href');
  67.           var matched = href.match(/page=([0-9]*)$/);
  68.         if (matched) {
  69.           pages[matched[1]] = true;
  70.          }
  71.       }
  72.     });
  73.     var pages_ = [];
  74.     var maxPage = Math.min(pages.length,pageLimit+1);
  75.     for (var i=2;i<maxPage;i++) {
  76.       pages_.push(i);
  77.     }
  78.     return pages_;
  79.   }
  80.  
  81. }
  82.  
  83. function Jobs(dictionary,words,parser,output,pageLimit) {
  84.   this.dictionary = dictionary;
  85.   this.words = words;
  86.   this.pages = [];
  87.   this.word = '';
  88.   this.pageLimit = pageLimit;
  89.   this.parser = parser;
  90.   this.output = output;
  91.  
  92.   this._fetch = function(word,page) {
  93.     var url = '';
  94.     console.log('fetching word ' + word + '; page ' + page);
  95.     if (page == 1) {
  96.       url = '/sentences?jap=' + word;
  97.     } else {
  98.       url = '/sentences?jap=' + word + '&page=' + page;
  99.     }
  100.     var this_ = this;
  101.     $.ajax({
  102.       url: url,
  103.       success: function(data) {
  104.         parser.sentences(data,dictionary,output);
  105.         if (page == 1) {
  106.           this_.pages = parser.pages(data,pageLimit);
  107.         }
  108.       }
  109.     });
  110.   }
  111.  
  112.   this.run = function() {
  113.     if (this.words.length == 0 && this.pages.length == 0) {
  114.       console.log('all job is done');
  115.       return ;
  116.     }
  117.     if (this.pages.length > 0) {
  118.       var page = this.pages.shift();
  119.       //console.log('schedule page ' + page);
  120.       this._fetch(this.word,page);
  121.     } else if (this.words.length>0) {
  122.       this.word = this.words.shift();
  123.       //console.log('schedule word ' + this.word);
  124.       this._fetch(this.word,1);
  125.     }
  126.     var this_ = this;
  127.     setTimeout(function(){this_.run()},2000);
  128.   }
  129. }
  130.  
  131. var kanji = '一二三四五六七八九十百千上下左右中大小月日年早木林山川土空田天生花草虫犬人名女男子目耳口手足見音力気円入出立休先夕本文字学校村町森正水火玉王石竹糸貝車金雨赤青白数多少万半形太細広長点丸交光角計直線矢弱強高同親母父姉兄弟妹自友体毛頭顔首心時曜朝昼夜分週春夏秋冬今新古間方北南東西遠近前後内外場地国園谷野原里市京風雪雲池海岩星室戸家寺通門道話言答声聞語読書記紙画絵図工教晴思考知才理算作元食肉馬牛魚鳥羽鳴麦米茶色黄黒来行帰歩走止活店買売午汽弓回会組船明社切電毎合当台楽公引科歌刀番用何丁世両主乗予事仕他代住使係倍全具写列助勉動勝化区医去反取受号向君味命和品員商問坂央始委守安定実客宮宿寒対局屋岸島州帳平幸度庫庭式役待急息悪悲想意感所打投拾持指放整旅族昔昭暑暗曲有服期板柱根植業様横橋次歯死氷決油波注泳洋流消深温港湖湯漢炭物球由申界畑病発登皮皿相県真着短研礼神祭福秒究章童笛第筆等箱級終緑練羊美習者育苦荷落葉薬血表詩調談豆負起路身転軽農返追送速進遊運部都配酒重鉄銀開院陽階集面題飲館駅鼻';
  132. var dictionary = new Dictionary();
  133. dictionary.init(kanji);
  134. var words = ['人間','彼女'];
  135. var parser = new Parser();
  136. var output = new Output();
  137. output.init();
  138. var pageLimit = 3;
  139. var jobs = new Jobs(dictionary,words,parser,output,pageLimit);
  140. jobs.run();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement