정규표현식을 활용한 html 태그 제거
String 자료형을 다루기 위한 좋은 방법 중 하나로 정규표현식이라는 것이 있다.
본 프로젝트에서 사용된 크롤러에서도 들어가 있는 내용 중 하나로, 한번 만들어두면 계속해서 사용할 수 있기 때문에 이 곳에 적어두도록 한다.
%s는 지우고 싶은 태그명을 넣어두면 된다. 방법에 따라 분류하도록 한다.
1. html의 태그를 지울때 내용까지 지우는 방식이다. 예를들어 <script>asd</script> 로 되어 있다면, asd까지 모두 지우게 된다. 이러한 것은 html문서 중 내용으로써, 쓸모없는 부분인 script나 style태그 등 뷰의 값을 지정해둔 부분을 모두 지워버리기에 유용하다.
<( )*%s([^>])*?> -> <%s>로 치환
<( )*(/)( )*?%s()*> -> </%s>로 치환
--> 여기까지 태그안의 내용이 있는 부분을 모두 지우고, 태그만으로 남길수 있다. 예를 들면, <style weight = ...........>로 되어있다면, <style>로 변환한다.
(<%s>)([^(<%s>\.</%s>)])*?(</%s>) 는 공백으로 치환
(<%s>)[\s\S]*?(</%s>) 역시 공백으로 치환
2. html의 태그를 지울때 태그만 지우는 방식이다. <script>asd</script> 로 되어 있다면, asd만 남기게 된다.
<( )*%s([^>])*?> -> <%s>로 치환
<( )*(/)( )*?%s()*> -> </%s>로 치환
태그를 정규화후, 해당 태그만을 지우면 된다. <%s>, </%s> 등으로 공백으로 삭제.
3. 기타 쓰레기 값 삭제 부분이다. 파싱을 하다보면, html태그가 아닌 이상한 value가 존재한다. 이런 것들은 휴리스틱하게 찾아보는 수밖에 없는 것 같다.
(°(;)|<(;)|>(;)|"(;)| (;)|&(;)|&lsquo(;)
|&rsquo(;)| (;)|&ldquo(;)|&rdquo(;)|&sdot(;))
를 공백으로 바꿔주면 된다.
4. 개행문자 삭제 부분이다.
(\\r){1,20}|(\\n){1,20}|(\\r\\n){1,20} {1,20}는 은 해당 그룹 (???)의 출현빈도에 따라서 적용할 수 있는 방법이다.
5. 모든 태그를 지우는 방법은 다음과 같다.
<(/)?([a-zA-Z0-9]*)(\\s[a-zA-Z0-9]*=[^>]*)?(\\s)*(/)?>
남은 응용은 정규표현식과 관련된 내용을 찾아서 응용하길 바란다.
'개발이야기 > 텍스트 마이닝 진행중..' 카테고리의 다른 글
[개발 현황] 뉴스 클러스터링 문서 100개에 대한 결과 (0) | 2015.02.07 |
---|---|
[개발 현황] 뉴스 클러스터링 (0) | 2015.02.07 |
Crawler의 개발 과정 (0) | 2015.02.07 |
데이터 마이닝을 위한 웹 크롤러 개발 돌입. (0) | 2015.02.07 |