data가 1Gbytes 쯤 되는 text 파일이 있다고 하자.
너무 크기 때문에 인간이 한 번에 checking하기 쉽지 않다.
왠만한 text editor에서 불러오기 조차 힘들다.
이 데이터가 line단위로 되어 있고 sort하여 유사한 line, pattern끼리 옆 줄에 모이게 된다고 치면
similarity(유사도) 계산을 통해 n%(70~80) 이하 되는 line을 filtering하고
sampling을 통해 1/10 정도 또 줄이면
1Gbytes의 파일도 5Mbytes 정도로 줄일 수 있다.
이 technique를 쓸 때 주의할 점 - 반드시 similiarity를 먼저 filtering하고 sampling한다.
반대로 했을 때는 그리 좋지 못한 data를 얻을 수 있다. (포본성 부족)
유사도 계산툴
http://synergy.kaist.ac.kr/~ilashman/bbs/view.php?id=tips&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=453
sampling툴
$ cat nsampler.pl
#!/usr/bin/perl
use Getopt::Std;
# frequency의 배수 번째 line만 출력한다.
# data가 너무 클 때 1/f의 확률로 data를 sampling한다.
$frequency = 10;
%args = ();
getopts("f:", \%args);
if ($args{f}) {
$frequency = $args{f};
}
$count = 0;
while($line = <STDIN>)
{
if ($count % $frequency == 0) {
print $line;
}
++$count;
}
댓글 없음:
댓글 쓰기