아주 간단하게 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' 을 추가해줌.
# 각각의 중간단계 디렉토리를 생성.
# 중복시에 에러 메세지 출력 안 되도록 '> /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 전부 변경.
# 한 파일을 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;
}
# 출력용 파일.
# 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;
}
댓글