본문 바로가기
Knowledge/Academic

Perl로 짠 HTML/XML 태그 제거 스크립트.

by Donk 2009. 10. 20.

아주 간단하게 XML이나 HTML 태그를 제거하고 중간에 있는 텍스트 정보만 출력하는 스크립트를 짜보았다.
대부분의 <, > 괄호 안에 데이터들은 바로 제거가 된다.
한가지 더. 이메일 주소를 <, > 괄호 안에 넣는다면, 바로 제거가 됩니다.ㅋㅋ

추가. 파이썬에서는 regular expression을 이용해서 unicode를 처리하는 부분이 상당히 취약하다.
그래서 펄에서 이 스크립트를 짰고, 이 스크립트는 유니코드 파일에서도 문제없이 동작했다.
파이썬에서 유니코드 처리하는 부분이 더 있는지 찾아봐야 할 것 같다.

#!/usr/bin/perl -w

# system을 이용해 쉘 커맨드를 실행.
# 출력용 디렉토리 생성.
system 'mkdir output';

# 읽어들일 파일들. 배열로 읽어들인다.
@files = <out/*/*>;

# 각 파일들을 반복한다.
foreach $file (@files){
        # 패스를 각 부분으로 나눔.
        # out/a/b 를 ["out", "a", "b"]로 넣음.
        @curr = split(/\//, $file);

        # 각각의 중간단계 디렉토리를 생성.
        # 중복시에 에러 메세지 출력 안 되도록 '> /dev/null 2>&1' 을 추가해줌.
        system "mkdir output/".$curr[1]." > /dev/null 2>&1";

        # 한 파일을 FILE_IN에 읽어들임.
        open FILE_IN, "<:encoding(UTF-8)", $file or die $!;

        # 입력파일의 여러 줄을 한 스트링으로 합치는 과정.
        $input = "";
        while (my $line = <FILE_IN>) {
                $line =~ s/\s+$//g;
                $input = $input." ".$line;
        }

        # 태그 부분을 제거하는 regular expression.
        # \p{C}: Control Characters.
        # \p{S}: Math Symbols .
        # \p{N}: Numeric Characters.
        # \p{L}: Any Languages.
        # \p{P}: Punctuation Characters.
        # \p{Z}: White Spaces.
        # \p{M}: Special Marks.
        # \s : White Spaces.
        # \:, \; : Semi-colon, Colon.
        # s는 스위치를 의미, 마지막에 g는 모든 occurrence 전부 변경.
        $input =~ s/<[\p{C}\p{S}\p{N}\p{L}\p{P}\p{Z}\p{M}\:\;\s]+>//g;

        # 출력용 파일.
        # utf-8로 인코딩해서 출력.
        open FILE_OUT, ">>:encoding(UTF-8)", "output/".$curr[1]."/".$curr[2] or die $!;
        print FILE_OUT $input."\n";

        # 파일들 닫기.
        close FILE_OUT;
        close FILE_IN;
}

댓글