è¿æ³å ±å
第äºåä¸å
æè¿ã¯ç 究ãå¿ããã®ã¨ï¼Railsããã£ããããã£ã¦ããã ããBlogãRailsã¢ããªã«ããã¹ããããªãï¼ã¨ããç絡çãªæèã§typoã§Blogã作ってみましたï¼
acts_as_ludia ãï¼acts_as_find_or_initialize_by ã¨ãã£ããã©ã°ã¤ã³ã®ãã¨ãã¡ããã£ã¨æ¸ãã¦ã¾ãï¼
ç§èªèº«ãé常ã«é£½ãã£ã½ãã®ã§ãã¤ã¾ã§ç¶ããåããã¾ãããï¼ãæéãããã°ã®ããã¦ããã¦ãã ããï¼
æ°ããä½ã£ãBlogã¯ãã¡ããtypoããã¼ã¹ã«ãªã£ã¦ãã¾ããï¼å®ã¯Ruby-GetText-Packageãå©ç¨ãã¦æ¥æ¬èªåãããã¨ç®è«ãã§ããããã¾ãï¼è¨å®ç»é¢ã®ä¸é¨ãªã©ãä»ã¯æ¥æ¬èªã«ãªã£ã¦ãã¦ãã¾ãï¼ãã®è©±ãããããï¼
typoãã¼ã¹ã®ç§ã®ããã°
Ludiaã§Wikipediaæ¥æ¬èªçã対象ã«ã¤ã³ããã¯ã¹ãæ§ç¯ããã¨ãããæé
第äºåå
[myname@localhost wikipedia]$ rake db:migrate (in /home/myname/rails/wikipedia) == AddLudiaIndex: migrating =================================================== -- execute("CREATE INDEX plain_text_index ON documents USING fulltext(plain_text);") -> 3594.9286s == AddLudiaIndex: migrated (3594.9307s) =======================================
ç°å¢ã¨ã
VMWareServer1.01ä¸ã§ä»®æ³ãµã¼ããæ§ç¯ãã¦è©¦ãã¾ããï¼
ãã¹ãOS
- WindowsXP
- CPU 3.4GHz
- ã¡ã¢ãª 2GB
ã²ã¹ãOS
- Fedora Core 5
- å²ãå½ã¦ã¡ã¢ãª 1GB
- MeCab 0.95
- senna 1.0.7
- PostgreSQL 8.1.8
- Ludia 1.1.0
ãã¼ã¿ã®è©³ç´°
- Wikipedia:データベースダウンロード - Wikipediaã®ææ°ç jawiki-latest-pages-articles.xml.bz2 ãå©ç¨
- HyperEstraierã®平林さんãä½ããã wpxmltoest ãåèã«ããã¹ãæ½åºãã¦ãã¼ã¿ãã¼ã¹ã¸æ ¼ç´
- ææ¸æ°ã¯373,666件ï¼countã«ãçµæ§æéããããï¼
ææ³ã¨ã
ã»ã¼1æéã§ã¤ã³ããã¯ã¹ä½æã£ã¦ã®ã¯æ©ãã®ããªã©ããªã®ããªï¼ã¡ãªã¿ã«HyperEstraierã§ã¯ï¼
æ©éããestcmd gather -xl -cs 640 casket .ãã§ã¤ã³ãã¯ã·ã³ã°ãã¦ã¿ãã¨ããã45å2ç§ã§å®äºããããã«ãestcmd gather -um casketãã§MeCabã®è£å©ã¤ã³ããã¯ã¹ãä½ã£ãã¨ããã11å3ç§ã§å®äºããã
ã¨ã®ãã¨ãããã®ã§ï¼ã¡ãã£ã¨ã ãHyperEstraierã®æ¹ãæ©ã»ã»ã¨æã£ããã©ãã®è¨äºã¯2005/12/28ã®è¨äºã§ããï¼åãè¨äºã«ã¯ä»¥ä¸ã®ããã«ãæ¸ãã¦ãã£ã¦ï¼
wpxmltoestã¯62å22ç§ã§å®äºããã162030件ï¼1527MBï¼ã®ææ¸ãæ½åºã§ããã1ææ¸å½ãã9.65KBã ãããASCIIã³ã¼ããå°ãæ··ãã£ã¦ãããããåææ¸ã®æåæ°ã¯å¹³åã§ã ããã4000æåãããããªã
ã¨ãããã¨ãªã®ã§ï¼ç§ã¯å以ä¸ã®ææ¸ã«å¯¾ãã¦ã¤ã³ããã¯ã¹ãæ§ç¯ããããã§ãï¼
ãããï¼Wikipediaã®XMLãã¡ã¤ã«ããããã¹ããæ½åºãã¦ãã¼ã¿ãã¼ã¹ã¸æ ¼ç´ããã®ã«ã¯ã ããã丸ä¸æ¥ããããããã¾ããï¼Railsãé ãã®ã§ããããï¼ãã®ã£ãããã¡ã¢ãªä½¿ãã¾ãããï¼ï¼ç§ã®æ¸ããã³ã¼ããæªãã¨ãããããããã©ãã©(ç¬)
ãã¼ã¿ãã¼ã¹ã¸ã®ãã¼ã¿æ ¼ç´ç¨Railsã³ã¼ã
xml2sql --postgresql ã¨ãããããããèãããã§ããï¼äºåã«å¿ è¦ãªPostgreSQLã®ãã¼ãã«æ§æããã¾ãã¡ããåãããªãã£ãã®ã§Railsã®ActiveRecordã«é ¼ãã¾ããï¼ããããç¹ã§ã¯ORMã®ã¡ãªããã§ãããï¼
以ä¸ã«ãã¼ã¿ãã¼ã¹ã¸Wikipediaã®ææ¸ãæ ¼ç´ããã³ã¼ããè¼ãã¦ããã¾ãï¼ããã¯ããããæ¹ãæ©ããªãã¨ãããã°æãã¦ãã ããï¼
app/model/document.rb
class Document < ActiveRecord::Base class << self def import(start_id = 1) file = Pathname.new(RAILS_ROOT) + "db/data/jawiki-latest-pages-articles.xml" list = MyListener.new(start_id) source = File.new(file) REXML::Document.parse_stream(source, list) end class MyListener include REXML::StreamListener BASEURL = "http://ja.wikipedia.org/wiki/" TEXTMINSIZE = 256 def initialize(start_id) @document = nil @buf = nil @start = start_id.to_s @flag = false @count = 0 end def tag_start(name, attrs) if name == "page" @document = nil @buf = StringIO.new end return nil if skip? @buf.write(%|<#{REXML::Text::normalize(name)}|) attrs.each do |pair| @buf.write(%| #{REXML::Text::normalize(pair[0])}="#{REXML::Text::normalize(pair[1])}"|) end @buf.write(">") end def text(text) return nil if skip? @buf.write(REXML::Text::normalize(text)) end def tag_end(name) return nil if skip? @buf.write(%|</#{REXML::Text::normalize(name)}>|) if name == "page" begin proc_document(Hpricot.XML(@buf.string)) rescue => e puts e return ensure @count +=1 end if @document.plain_text @document.wiki_text = @buf.string @document.save end @buf.close exit if @count == 2 end end private def proc_document(doc) id = doc.at(:id).inner_text title = doc.at(:title).inner_text raise "no title error" if title.blank? if @flag elsif id == @start @flag = true else raise "not modified: count = #{@count}" end raise "no indexing document" if title =~ /(Media|ç¹å¥|Wikipedia|å©ç¨è |ãã¼ã|ç»å|Template|Category|Portal)(:|;|-|=|â)/ @document = Document.find_or_new_by_entity_id(id) @document.created_time = Time.parse(doc.at(:timestamp).inner_text) raise "not modified: #{@document.id ? @document.id : ''}" if @document.created_time < (@document.updated_on || Time.parse('2001-05-20T00:00:00Z')) @document.title = title if author = doc.at(:username) || doc.at(:ip) @document.author = author.inner_text else @document.author = "anonymous" end text = doc.at(:text).inner_text @document.plain_text = trimming(REXML::Text::unnormalize(text)) @document.url = BASEURL + CGI.escape(@document.title) end def trimming(text) return nil if self.blank? || (text.size < TEXTMINSIZE) || (text =~ /^#REDIRECT/) text.gsub!(/^=+([^=]+)=+/){ $1 } text.gsub!(/<[^>]+>/, "") text.gsub!(/^\s*[\*#:|;-]+\s*/, "") text.gsub!(/\[\[[^\]\|]+\|([^\]]+)\]\]/){ $1 } text.gsub!(/\[\[([a-zA-Z-]+:)?([^\]]+)\]\]/){ $2 } text.gsub!(/\{\{([^\}\|]+)\|[^\}]+\}\}/){ $1 } text.gsub!(/\{\{([^\}]+)\}\}/){ $1 } text.gsub!(/\[http:[^ \]]+ ([^\]]+)\]/){ $1 } text.gsub!(/'{2,}/, "") text.gsub!(/^ *\{?|/, "") text.gsub!(/^ *[\!\|\}]/, "") text.gsub!(/^\*+/, "") text.gsub!(/[a-zA-Z]+=\"[^\"].*\"/, "") text.gsub!(/[a-z][a-z]+=[0-9]+/, "") text.gsub!(/.*border-style.*/, "") text.gsub!(/.*valign=.*/, "") text.gsub!(/\&[a-zA-Z]+;/, "") text.gsub!(/.*(å©ç¨è |ä¼è©±|ãã¼ã):.*/, "") text.gsub!(/(Wikipedia|Category):/, "") text.gsub!(/.*èª:/, "") text.gsub!(/^thumb\|/, "") text.gsub!(/ç»å:/, "") text.gsub!(/^[ +]*[\|]*/, "") text.gsub!(/\|\|/, " ") text.gsub!(/\s/, " ") return text end def skip? return true unless @buf return true if @buf.closed? end end end end
acts_as_ludia ã使ã£ã¦Ludiaã®ãã¢Webã¢ããªã±ã¼ã·ã§ã³ãä½ãã¾ãã
第ååä¹å
å æ¥ã®ã¨ã³ããªãLudia 用の Rails プラグイン acts_as_ludia を作りました - のほほん徒然ãã§ç´¹ä»ããacts_as_ludiaãã©ã°ã¤ã³ã使ã£ã¦ï¼ç°¡åãªæ¤ç´¢ã¢ããªã±ã¼ã·ã§ã³ãRailsã§ä½ã£ã¦ã¿ã¾ããã®ã§ç´¹ä»ãã¾ãï¼
ã¯ã¦ãªããã¯ãã¼ã¯å ¨ææ¤ç´¢
http://www.unraki.com:3000/bookmarks
ããã¯ãªã«ï¼
id:uchiuchiyamaãã¨ï¼ç§ãã¯ã¦ãªããã¯ãã¼ã¯ããWebãã¼ã¸ã対象ã«Ludiaã使ã£ã¦å ¨ææ¤ç´¢ãè¡ãã¢ããªã±ã¼ã·ã§ã³ã§ãï¼
ã©ããã£ã¦ä½¿ãã®ï¼
ãªã³ã¯å
ã®ãã¼ã¸ã§æ¤ç´¢ããã¯ã¹ã«é©å½ãªãã¼ã¯ã¼ããå
¥ãã¦æ¤ç´¢ãã¿ã³ãæ¼ãã¦ã¿ã¦ãã ããï¼ä¾ãã°id:uchiuchiyamaのはてなブックマークから「rails」を含むWebページを検索ãããã§ãã¾ãï¼
ã¾ãï¼æ¤ç´¢ãã¼ã¯ã¼ãã空ç½ã§åºåãã°ANDæ¤ç´¢ï¼ã OR ãã§åºåãã¨ORæ¤ç´¢ã«ãªãã¾ãï¼ä¾ãã°ï¼id:uchiuchiyamaのはてなブックマークから「rails」を含み,「ludia」か「postgresql」か「senna」を含むWebページを検索ãããã¨ãã§ãã¾ãï¼
ãªã«ãããããã®ï¼
ã¯ã¦ãªããã¯ãã¼ã¯ã§ã¯ï¼ã¿ã°ã«ããæ¤ç´¢ã¨ï¼ã¿ã¤ãã«ããã®ãã¼ã¯ã¼ãæ¤ç´¢ã¯ãµãã¼ããã¦ãã¾ããï¼ããã¯ãã¼ã¯ããWebãã¼ã¸æ¬æã対象ã¨ãããã¼ã¯ã¼ãæ¤ç´¢ã¯ï¼ç§ã®ç¥ãéãï¼ã§ãã¾ããï¼
ããã§ï¼ã確ãCSSã®ã»ã¬ã¯ã¿ã«ã¤ãã¦æ¸ãã¦ãããã¼ã¸ãããã¯ãã¼ã¯ããã¯ããªãã ãã©ã»ã»ãã¨ããã¨ããï¼ãJavaScriptã«è©³ããb:id:amachangããã®ã¯ã¦ãªããã¯ãã¼ã¯ããï¼mochikitã®ãã¨ãæ¸ãã¦ããWebãã¼ã¸ãã»ãããã¨ããå ´åã«æç¨ãªã®ã§ã¯ãªãã§ããããï¼
ã¤ã¾ãï¼ãã®éã®ç¬¬ä¸äººè
ãä¸å®¶è¨ãæã¤äººã®ç¥èãæ¤ç´¢ã§ããï¼ã¨ãããã¨ã«ãªãã¾ãï¼ããã¯ï¼Google Coopã®ããã«ï¼éå®ãããï¼æç¨ãªï¼æ
å ±æºããæ¤ç´¢ãå¯è½ã«ããã¨è¨ããã®ã§ã¯ãªãã§ããããï¼ç§ã¯ï¼ã¯ã¦ãªããã¯ãã¼ã¯ã®ããã«ã½ã¼ã·ã£ã«ãªæ
å ±èç©ãµã¤ãããã¾ãå©ç¨ããã°ï¼ããç°¡åã«ç²¾åº¦ã®é«ãæ¤ç´¢ãè¡ããã®ã§ã¯ãªããã¨æã£ã¦ãã¾ãï¼ãã¨ï¼æ
å ±ãç¥ãããæã«ã¯ãç¥ã£ã¦ã人ããæ¢ãã¨ããã¢ããã¼ãã¯é¢ç½ããã ãªã¼ã¨ãå¦æ³ãã¦ã¾ãï¼
å¶éäºé
ç¾å¨ï¼b:id:uchiuchiyamaã®ã¯ã¦ãªããã¯ãã¼ã¯ã®ãã¡ï¼ã ããã600件ããããæ¤ç´¢å¯¾è±¡ã«ãªã£ã¦ãã¾ãï¼ã¾ãï¼ä»ã®ã¦ã¼ã¶ã®ã¯ã¦ãªããã¯ãã¼ã¯ã対象ã¨ããæ¤ç´¢ã¯ï¼ã¢ã¤ãã¢ã¯ãããã®ã®æéããªãã¦ä½ã£ã¦ã¾ããï¼æéãåºæ¥ãã°ä½ããããªã¨æã£ã¦ã¾ãï¼
èãã¦ãã¾ããï¼Googleã®å¤§è¦æ¨¡æ¥æ¬èªãã¼ã¿å ¬éã«é¢ããç¹å¥ã»ãã·ã§ã³
第ååä¸å
åçã¯Gigazineã®ããã§ã(ç¬)
3æã«æ»è³ã§è¡ãããè¨èªå¦çå¦ä¼å ¨å½å¤§ä¼ã§ãã°ã¼ã°ã«ã
ç¹å¥ã»ãã·ã§ã³ãããããã§ãã大è¦æ¨¡æ¥æ¬èªãã¼ã¿ã«ã¤ãã¦ã
ãã¤ãããã®ããã°ã§ç¥ã£ãGoogleã®ç¹å¥ã»ãã·ã§ã³ï¼
ã°ã¼ã°ã«æ ªå¼ä¼ç¤¾ã§ã¯ãæ¥æ¬èªã®è¨èªå¦çç 究æ¨é²ã®ãã大è¦æ¨¡æ¥æ¬èªãã¼ã¿ã®å ¬éãæ¤è¨ãã¦ãã¾ããã¤ãã¾ãã¦ã¯ä»æ§ã決å®ããã«ããããå®éã«ãã¼ã¿ã御å©ç¨é ãç 究è / æè¡è ã®çæ§ã®ãçã®å£°ããæ¯éã伺ããããåãã¾ããä»åãè¨èªå¦çå¦ä¼æ§ã®å¾¡å¥½æã«ãããä¸è¨ã®ã¨ãããã¼ã¿ä»æ§ã«é¢ããç¹å¥ã»ãã·ã§ã³ãè¨ãã¦é ããäºã«ãªãã¾ããã
はてなブックマークã§ã話é¡ã«ãªã£ã¦ããGoogleã®å¤§è¦æ¨¡æ¥æ¬èªãã¼ã¿å ¬éã«é¢ããç¹å¥ã»ãã·ã§ã³@NLP2007ã«ï¼å®¶ãè¿ããã¨ãããåå ãã¦ãã¾ããã®ã§ï¼ãã®è©³ç´°ãæ¸ãã¾ãï¼
ã¢ã³ã±ã¼ã詳細ï¼Googleã®å¤§è¦æ¨¡æ¥æ¬èªãã¼ã¿å ¬éã«é¢ããç¹å¥ã»ãã·ã§ã³
第ååå «å
Googleã¯æ¥æ¬èªã®è¨èªå¦çç 究ã®ããã«Webã¤ã³ããã¯ã¹ããä½æããã³ã¼ãã¹ãã¼ã¿ã®å ¬éãäºå®ãã¦ããï¼ãã®ãã¼ã¿ã®å½¢å¼ãå 容ãå«ããæ¦è¦ã®ãããå°ãå ¬éãï¼ãããã«å¯¾ããç 究è ã®æè¦ãåºãåãããï¼
先日のエントリã§ãä¼ãããããã«ï¼Googleãæ¥æ¬èªWebã³ã¼ãã¹ãã¼ã¿ãå¦è¡ç¨ã«å
¬éããããã§ãï¼ãã®ã¨ãã®å
¬éãã¼ã¿ã®å½¢å¼ãå
容ã«ã¤ãã¦ï¼è¨èªå¦çå¦ä¼åå è
ããã¢ã³ã±ã¼ãã¨ãã¦æè¦ãåã£ã¦ãã¾ããï¼
ãã®ã¨ã³ããªã§ã¯ï¼ãã®ã¢ã³ã±ã¼ãã®å
容ãåºãå
¬éãã¾ãï¼ç´æ¥æåºããå
ãªã©ã¯ããã¾ãããï¼Webã®ãã¼ã¿ã®è©±ãªã®ã§ï¼Webä¸ã§åºãè°è«ãã¦ã¿ãã®ãè¯ãã®ã§ã¯ãªãã§ããããï¼
Ludia ç¨ã® Rails ãã©ã°ã¤ã³ acts_as_ludia ãä½ãã¾ãã
第ååå å
使ãæ¹ãæ©è½ãªã©ï¼è©³ããã¯å¾ã§æ¸ãã¾ãæ¸ãã¾ããï¼
acts_as_ludiaの更新情報ãã覧ä¸ããï¼
acts_as_ludiaã®æ¦è¦ã¨æ©è½
Ludiaã«ããPostgreSQLã®é«éå
¨ææ¤ç´¢æ©è½ãRuby on Railsããå©ç¨ããããã®ãã©ã°ã¤ã³ã§ãï¼ååã¯acts_as_ludiaã¨ããã¾ãï¼ãã®ã¾ãã¾ã§ããã¾ããï¼ï¼
ä»ã¾ã§RailsããLudiaã使ãå ´åï¼findã®conditionsãªãã·ã§ã³ã«ã¯ã¨ãªãããããæ¸ãå¿
è¦ãããã¾ããï¼
Model.find(:all, :conditions => "body @@ '*D+ ruby rails'")
ãããï¼acts_as_ludiaãå©ç¨ããã¨ä»¥ä¸ã®ããã«ç°¡æ½ã«ã³ã¼ããæ¸ããã¨ãã§ãã¾ãï¼ãã¡ããï¼AND/ORæ¤ç´¢ãæ¥æ¬èªã§ã®æ¤ç´¢ãå¯è½ã§ãï¼
Model.find_fulltext(:body => "ruby rails")
ã¾ãï¼Ludia 1.0.0ãã追å ãããæ¤ç´¢åèªå¨è¾ºã®æç« ï¼ããããã¹ãããã(snippet)ï¼ãç°¡åãªæ¸å¼ã§æ¤ç´¢çµæã¨åæã«åå¾ãããã¨ãã§ãã¾ãï¼
Model.find_fulltext({:body => "ruby rails"}, :snippet => true)
ãã®ã¨ã³ããªã®ç¶ãã«ã¯ï¼acts_as_ludiaã®å°å ¥æ¹æ³ï¼ä½¿ãæ¹ã«ã¤ãã¦æ¸ãã¦ããã¾ãï¼
Sennaã®ã¯ã¨ãªæ¸å¼ããããããã¾ãã
第åååå
æè¿ï¼Ludiaã使ã£ã¦ãã¼ã¿ãã¼ã¹ã®å ¨ææ¤ç´¢ãè¡ã£ã¦ããã®ã§ããï¼Sennaã®ã¯ã¨ãªæ¸å¼ãããåããã¾ããï¼ã¨ãããï¼MySQLã®BOOLEAN MODEãããåãã£ã¦ãªãã®ããããã¾ããï¼
test=# select *from table1; col1 | col2 ------------------------------+-------------------- ãããããããããã®ãã¡ | ãã®å£ºã¯ãããã®ã ããããçã¾ããæ¡å¤ªé | ãã®å£·ã¯ãããã®ã ããããé£ãã ãæ¨ãæºãã | ãã®å£ºã¯æªããã®ã ããªããããã話ãèãããã® | ãã®å£·ã¯æªããã®ã æ¨å¤ãããã®ç¼¶è©°ãéãã | ãã®å£·ã¯ãããã®ã ã«ãã«ã¯ã«ãã«ãã¨ãããã | ãã®å£ºã¯ãããã®ã (6 rows)
ãããªLudiaã®ãã¹ãç¨ãã¼ãã«ãããã¨ãï¼ä»¥ä¸ã®ãããªã¯ã¨ãªãæããã¨çµæãããããï¼ã¨ãããç´å¾ãããªããã®ã«ãªãã¾ãï¼
test=# select *from table1 where col2 @@ '*D+ ãã® ãã OR ãã®'; col1 | col2 ------------------------------+-------------------- ãããããããããã®ãã¡ | ãã®å£ºã¯ãããã®ã ããããçã¾ããæ¡å¤ªé | ãã®å£·ã¯ãããã®ã ããããé£ãã ãæ¨ãæºãã | ãã®å£ºã¯æªããã®ã ããªããããã話ãèãããã® | ãã®å£·ã¯æªããã®ã æ¨å¤ãããã®ç¼¶è©°ãéãã | ãã®å£·ã¯ãããã®ã ã«ãã«ã¯ã«ãã«ãã¨ãããã | ãã®å£ºã¯ãããã®ã (6 rows) test=# select *from table1 where col2 @@ '*D+ ãã® ãã OR 壺'; col1 | col2 --------------------------+-------------------- ãããããããããã®ãã¡ | ãã®å£ºã¯ãããã®ã ããããçã¾ããæ¡å¤ªé | ãã®å£·ã¯ãããã®ã (2 rows) test=# select *from table1 where col2 @@ '*D+ ãã® ãã OR 壺ã¯'; col1 | col2 ----------------------------+-------------------- ãããããããããã®ãã¡ | ãã®å£ºã¯ãããã®ã ã«ãã«ã¯ã«ãã«ãã¨ãããã | ãã®å£ºã¯ãããã®ã ããããé£ãã ãæ¨ãæºãã | ãã®å£ºã¯æªããã®ã ããããçã¾ããæ¡å¤ªé | ãã®å£·ã¯ãããã®ã (4 rows)
åç´ãª AND 㨠OR ã ãã®æ¸å¼ãªãã§ããï¼ã壺ãã¨ã壺ã¯ãã§çµæãéãã®ã¯ãªããªãã§ããããï¼
ãããããã¨ï¼å½¢æ
ç´ è§£æã«å©ç¨ãã¦ããMeCabã®èªã®åºåãæ¹ã®ãããªã®ã§ã¯ï¼ã¨æã£ã¦mecabã§è§£æãã¦ã¿ãã¨ãããªé¢¨ã«ãªãã¾ãï¼
$ mecab ãã®å£ºã¯ãããã®ã ãã® é£ä½è©,*,*,*,*,*,ãã®,ã¢ã,ã¢ã 壺 åè©,ä¸è¬,*,*,*,*,壺,ãã,ãã 㯠å©è©,ä¿å©è©,*,*,*,*,ã¯,ã,㯠ãã 形容è©,èªç«,*,*,形容è©ã»ã¢ã¦ãªæ®µ,åºæ¬å½¢,ãã,ã¨ã¤,ã¨ã¤ ãã® åè©,éèªç«,ä¸è¬,*,*,*,ãã®,ã¢ã,ã¢ã ã å©åè©,*,*,*,ç¹æ®ã»ã,åºæ¬å½¢,ã ,ã,ã EOS
ãã¼ãï¼è§£æã¯ãã¾ããã£ã¦ãããã§ãï¼ããããªãï¼ãããªã«ããåããã«ãªãæ¹ã¯ã³ã¡ã³ããªã©ããã ããã¨å¹¸ãã§ãï¼
ç°å¢
- PostgreSQL 8.1.8
- Senna 1.0.1
- MeCab 0.93
- Ludia 1.0.0
追è¨ï¼2007/03/24 00:30ï¼
Sennaéçºè ã®id:tasukuchanããããç´ã ã«ã³ã¡ã³ãã¨ãã©ãã¯ããã¯ã§è§£èª¬ãããã ãã¾ããï¼å°ãé·ãã§ããå¼ç¨ããã¦ããã ãã¾ãï¼
ããã OR 壺ãã¨ãã£ãã¯ã¨ãªãå®è¡ããå ´åãèãã¾ãã
ã¾ããããããã¨ãããã¼ã¯ã³ãå«ãææ¸ãæ¤ç´¢ãã¾ãã
ï¼æåã®ãã¼ã¯ã³ãªã®ã§ãæ¤ç´¢çµæãåå¨ãã¾ãã
次ã«ãã壺ãã¨ãããã¼ã¯ã³ãå«ãææ¸ãæ¤ç´¢ãã¾ãã
ï¼æåã®ãã¼ã¯ã³ãªã®ã§ãæ¤ç´¢çµæãé常ã¯åå¨ãã¾ããã
ããã¦ãï¼ã¤ã®æ¤ç´¢çµæãORã§ã¤ãªãã¨ã
çµå±ããããã¨ãããã¼ã¯ã³ãå«ãææ¸ã»ãããçµæã¨ãªã£ã¦ãã¾ãã¾ãã
ãã®æ¤ç´¢çµæ件æ°ã¯0ã§ã¯ãªãã®ã§ãé¨åä¸è´æ¤ç´¢ãè¡ããããã¨ããªãã
ãã®ã¾ã¾æ¤ç´¢çµæãåºåãã¦ãã¾ãã¾ãã
詳ããã¯å¼ç¨å ã®ã¨ã³ããªã«è¨è¼ããã¦ãã¾ãã®ã§ï¼ã覧ãã ããï¼id:tasukuchanãããããã¨ããããã¾ããï¼