2008-02-27 21:34:54
今日はkwicの練習である。PHPのときも、Rubyのときも、これをやった。そもそも、PHPを最初に使いたいと思った理由の最も大きな理由の一つは、このKwicである。Key word in contextの略で、キーワードがどんな文脈で使われているかを調べるために、検索したい語の前後を含めて抽出するという作業である(多分)。だから、kwicは私に乗っての"Hello World!"のようなものだ。
いつものように、ロード・ダンセイニの『ペガーナの神々』から、言葉を見つけてみる。今回は、一行一文に整形済みのものを対象としている。
#!/usr/bin/python import sys import re word = sys.argv[1] file = sys.argv[2] input = open(file,'r') lines = input.readlines() for line in lines: if word in line: line = re.sub('\n','',line) block = line.split('\t') parts = block[3].split(word) left = parts[0][-20:] right = parts[1][0:20] print left.rjust(20) + word + rightとりあえずは、こんな感じで。
$python kwic1.py knoweth pegana.txt -YOOD-SUSHAI--_none knoweth._." d of song, but none knoweth, for who hath heard hings--whither Mung knoweth." Lahai be true, none knoweth saving only MANA-YO they find that MANA knoweth that they have made NA-YOOD-SUSHAI, and knoweth the wherefore of th know only that man knoweth not." ok: 'Alhireth-Hotep knoweth All Things, for he said Imbaun: 'What knoweth the Prophet of theいちおう、それらしい結果が表示されている。検索語の左側が20文字に満たない場合でも、left = parts[0][-20:]でエラーは出ないようだ。が、これでは一行に複数回検索語が含まれていたとしても、最初の一つしか表示されない。行番号も表示させたりしたい。そのあたりのことは、また今度。その後は、前後の単語のアルファベット順とか出現頻度順で並べ替えるということもしなければならない。