2007年 10月 18日

ngram 類似度 Ruby

無駄なことやりまくる

require "enumerator"

def ngram(data, n)
	ret = []
	data.split(//u).each_cons(n) do |a|
		ret << a.join
	end
	ret
end

def sim(a, b, n)
	agram = ngram(a, n)
	bgram = ngram(b, n)

	all  = (agram | bgram).size.to_f
	same = (agram & bgram).size.to_f

	same / all
end


require "rexml/document"
require "open-uri"
include REXML

entries = []
doc = Document.new(open("http://d.hatena.ne.jp/cho45/rss").read)
doc.elements.each("//item") do |e|
	title = e.elements["title"].text
	link  = e.elements["link"].text
	text = e.elements["content:encoded"].text
	text.gsub!(/<[^>]+>/, "")
	text.gsub!(/¥s+/, " ")
	entries << {
		:title => title,
		:link  => link,
		:text  => text,
	}
end

results = {}
entries.each do |a|
	entries.each do |b|
		next if a[:link] == b[:link]
		key = [a[:link], b[:link]].sort
		next if results[key]
		results[key] = {
			:a => a,
			:b => b,
			:sim => sim(a[:text], b[:text], 3)
		}
	end
end
results.sort_by {|k,i| i[:sim] }.each do |k,v|
	puts "%s: %s" % [v[:a][:link], v[:a][:title]]
	puts "%s: %s" % [v[:b][:link], v[:b][:title]]
	puts v[:sim]
	puts
end
2007年 10月 17日

Vertigo on Mac

なんかうまく表示されないのですよ

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);


.tabbrowser-tabs * {
	width: 100% !important;
}

.tabs-stack {
	width: 10em !important;
}

とりあえずこうしたらちゃんとした。DOMInspector をインストールする方法さがすほうが大変だった……

「嫌いじゃないけど好きじゃない」
「好きじゃないけど嫌いじゃない」

は違う。


こうすると解りやすい

「嫌いじゃないけど好きじゃない (^^;)」-> リアル
「好きじゃないけど嫌いじゃない (#//)」-> ツンデレ

2007年 10月 16日

ネタ

「ネタなのかどうか、パッと見よくわからない」というネタが好き

あるいは、逆に「パッと見明かにネタなのに、中身は普通」というのも好き

はてなのマルチアカウントをうまくつかう userChrome.js スクリプト

http://svn.coderepos.org/share/lang/javascript/userchrome/hatena-multi.uc.js

はてなツールバーにも一応機能があるんだけど、よくわからないタイミングでクリアされたりする (クッキーの使いまわしで実装してるから?) ので tumblr のやつコピペして作った。

このスクリプトは Fx 全体へのフックとかは一切かけていないので、Window の初期化がちょっと遅くなる以外はパフォーマンスに影響しないはず

たたくべき相手間違ってるもんなぁ

テレビを日常的に見てああいうのに影響されたりする「友達」を多く持つ方々は、さぞリアル生活が充実しているのだろうなぁ。

いんぷれーす

お、グループにもその場編集機能だ。