Thursday, July 31, 2008

[Regex] '/x' option

Mastering perl에서...




Regex에서 '/x' option은 regex 의 패턴 안의 모든 공백, new line을 무시한다.
즉, regular pattern / / 사이의 expression에 대해 '\S' 와 매치되지 않는 다른 모든 것들을 substitution 한 것과 같은 상태로 패턴을 찾는다.


$string='what is this';
$string=~/w h a t/x;


/x 옵션 없이는 위의 regex과 매치된느 것이 없지만, /x 옵션이 'w h a t' 사이의 공백을 무시하기 때문에 위의 regex은 'what' 과 매치된다.

이런 특성을 이용하면 regex이 길고 복잡한 경우 regex을 readable 한 형태로 깔끔하게 표현할 수 있다.

$string=~/(\s+)\s+\d{3,8}(\.\,)\d{2}\w+\W\n/; 와 같은 복잡하고 알아보기 힘든 정규식이 아래와 같이 읽기 용이한 ( 여전히 복잡해 보이기 하지만 ) 형태로 바뀌어질 수 있다.

$string=~/(\s+)\s+

\d{3,8}
(\.\,)
\d{2}
\w+\W
\n
/x;

Wednesday, July 23, 2008

Silhouette Coefficient

Silhouette coefficient : Clustering evalution 에 널리 사용되는 방법으로 개개의 element에 대한 clustering quality를 측정하는 척도가 된다.

Clustering 결과 각 element의 distance 분포가 아래 그림과 같다고 한다면,


붉은색 element ( ith element )에 대한 silhouette coefficient는 아래와 같은 순서로 구한다.
1. 같은 cluster 안의 모든 element와의 거리의 평균 A(i) 를 구한다.
2. ith element 를 포함하지 않은 다른 모든 cluster 안의 element에 대해, ith element와 가장 가까운 element와의 거리 B(i) 를 구한다.
3. Silhouette coefficient S(i)= (B(i)-A(i)) / max(A(i),B(i))

[CPAN] WWW::Mechanize

때때로 Web-page 의 입력 폼에 query를 던져 그에 대해 프로세싱 된 결과가 필요한 경우가 있다. 문제는 대량의 query에 대해 같은 작업을 반복해야 하는 경우인데, 대여섯번 정도의 반복 정도까지는 처리할 수 있겠지만, 수십 수백번 반복이 필요한 경우라면 자동화하지 않고는 곤란하다.

Large scale data processing이 일상화된 생물학 계열 연구자들은 이런 상황에 매우 빈번하게 노출된다. 예를 들면, 관련된 gene 이나 protein에 대한 BLAST 결과를 얻고자 하는 경우, 관련된 gene set에 대한 web-server의 결과를 얻고자 하는 상황이다. 주변의 연구자들 얘기를 들어보면 실제로 생물학 실험실에서는 이런 작업을 '수작업' 으로 몇일 밤을 세가면서 컨트롤+C, 컨트롤+v 키를 눌러제끼며 web-server의 결과를 정리하는 경우가 있다고 한다.

WWW::Mechanize는 이런 상황에 사용하기에 적합한 perl package다.

기본적인 사용 틀은 아래와 같다.

Use WWW::Mechanize;
my $mech->WWW::Mechanize->new();
my $url='http:// address of your interest';
$mech->get($url);

my $field={

'field1 id'='good',
'field2 id'='bad'

};
my $r=$mech->submit_form(

form_number=>1,
fields=>$field;

);
my $result=shift;
print $result->content;