/* ############################################################################ ## ## Copyright (C) 2006-2009 University of Utah. All rights reserved. ## ## This file is part of DeepPeep. ## ## This file may be used under the terms of the GNU General Public ## License version 2.0 as published by the Free Software Foundation ## and appearing in the file LICENSE.GPL included in the packaging of ## this file. Please review the following to ensure GNU General Public ## Licensing requirements will be met: ## http://www.opensource.org/licenses/gpl-license.php ## ## If you are unsure which license is appropriate for your use (for ## instance, you are interested in developing a commercial derivative ## of DeepPeep), please contact us at deeppeep@sci.utah.edu. ## ## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ## ############################################################################ */ /** * @(#) Acentos.java * * Copyright (c) 1997-1999 Departamento de Informática - UFPE * Grupo: * Luciano Barbosa (lab) * Oscar Miranda (ogm) * Thiago Santos (tlvls) * Flavio Couto (frco) */ package focusedCrawler.util.string; /** Classe que fornece metodos para a susbtituicao ou remocao de caracteres acentuados, tanto em HTML como ANSI. @author Thiago Santos */ public class Acentos { /** * Construtor do objeto. */ public Acentos() {} /** * Funcao que retira tanto as notacoes para acentos de HTML como tambem os substitui * pelo caracteres equivalentes sem acentuacao. * @param str String que deve ser modificada. * @return String sem qualquer tipo de acento. */ public static String retirarNotacaoHTMLAcentosANSI( String str ) { String resultado = retirarNotacaoHTML( str ); return retirarAcentosANSI( resultado ); } /** * Retira a notacao HTML. * @param str String que deve ser modificada. * @return String sem a notacao de acentos para o HTML. */ public static String retirarNotacaoHTML( String str ) { int size = str.length(); StringBuffer resultado = new StringBuffer(size); int ultima = 0; int comeco = str.indexOf( "&" ); int fim = str.indexOf( ";" ); while( comeco > -1 && comeco < size && fim > -1 && fim < size ) { resultado.append( str.substring( ultima,comeco ) ); resultado.append( comeco < fim+1 ? caracterANSIEquivalente(str.substring(comeco,fim+1)) : "" ); ultima = fim+1; comeco = str.indexOf("&",fim); fim = str.indexOf(";",comeco); } resultado.append( str.substring( ultima,size ) ); return resultado.toString(); } private static String caracterANSIEquivalente( String pedaco ) { switch( pedaco.length() ) { case 8 : return pedacoCom8( pedaco ); case 7 : return pedacoCom7( pedaco ); case 6 : return pedacoCom6( pedaco ); case 5 : return pedacoCom5( pedaco ); default: return pedaco; } } private static String pedacoCom8( String pedaco ) { char caracter = pedaco.charAt(1); if( pedaco.endsWith("acute;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraAcute(caracter) ); if( pedaco.endsWith("grave;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraGrave(caracter) ); if( pedaco.endsWith("tilde;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraTilde(caracter) ); if( pedaco.endsWith("cedil;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraCedil(caracter) ); if( pedaco.endsWith("slash;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraSlash(caracter) ); return pedaco; } private static char escollhaLetraAcute( char letra ) { switch( (int)letra ) { case 97 : return 'á'; case 65 : return 'Á'; case 101 : return 'é'; case 69 : return 'É'; case 105 : return 'í'; case 73 : return 'Í'; case 111 : return 'ó'; case 79 : return 'Ó'; case 117 : return 'ú'; case 85 : return 'Ú'; case 121 : return 'ý'; case 89 : return 'Ý'; case 110 : return 'ñ'; case 78 : return 'ñ'; default : return letra; } } private static char escollhaLetraGrave( char letra ) { switch( (int)letra ) { case 97 : return 'à'; case 65 : return 'À'; case 101 : return 'è'; case 69 : return 'È'; case 105 : return 'ì'; case 73 : return 'Ì'; case 111 : return 'ò'; case 79 : return 'Ò'; case 117 : return 'ú'; case 85 : return 'Ù'; default : return letra; } } private static char escollhaLetraTilde( char letra ) { switch( (int)letra ) { case 97 : return 'ã'; case 65 : return 'Ã'; case 101 : return 'ñ'; case 110 : return 'Ñ'; case 111 : return 'õ'; case 79 : return 'Õ'; default : return letra; } } private static char escollhaLetraCedil( char letra ) { switch( (int)letra ) { case 99 : return 'ç'; case 67 : return 'Ç'; default : return letra; } } private static char escollhaLetraSlash( char letra ) { switch( (int)letra ) { case 111 : return 'ø'; case 79 : return 'Ø'; default : return letra; } } private static String pedacoCom7( String pedaco ) { char caracter = pedaco.charAt(1); if( pedaco.endsWith("circ;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraCirc(caracter) ); if( pedaco.endsWith("ring;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraRing(caracter) ); if( pedaco.endsWith("AElig;") ) return ""+'Æ'; if( pedaco.endsWith("aelig;") ) return ""+'æ'; if( pedaco.endsWith("THORN;") ) return ""+'Þ'; if( pedaco.endsWith("thorn;") ) return ""+'þ'; if( pedaco.endsWith("szlig;") ) return ""+'ß'; return pedaco; } private static char escollhaLetraCirc( char letra ) { switch( (int)letra ) { case 97 : return 'â'; case 65 : return 'Â'; case 101 : return 'ê'; case 69 : return 'Ê'; case 105 : return 'î'; case 73 : return 'Î'; case 111 : return 'ô'; case 79 : return 'Ô'; case 117 : return 'û'; case 85 : return 'Û'; default : return letra; } } private static char escollhaLetraRing( char letra ) { switch( (int)letra ) { case 97 : return 'å'; case 65 : return 'Å'; default : return letra; } } private static String pedacoCom6( String pedaco ) { char caracter = pedaco.charAt(1); if( pedaco.equals(" ") ) return ""+' '; if( pedaco.equals("©") ) return ""+'©'; if( pedaco.endsWith("uml;") ) return substituirCorretamente( pedaco,caracter,escollhaLetraUml(caracter) ); return pedaco; } private static char escollhaLetraUml( char letra ) { switch( (int)letra ) { case 97 : return 'ä'; case 65 : return 'Ä'; case 101 : return 'ë'; case 69 : return 'Ë'; case 105 : return 'ï'; case 73 : return 'Ï'; case 111 : return 'ö'; case 79 : return 'Ö'; case 117 : return 'ü'; case 85 : return 'Ü'; case 255 : return 'ÿ'; default : return letra; } } private static String pedacoCom5( String pedaco ) { if( pedaco.equals("&") ) return ""+'&'; if( pedaco.equals("Ð") ) return ""+'Ð'; if( pedaco.equals("ð") ) return ""+'ð'; return pedaco; } private static String substituirCorretamente( String pedaco, char init, char end ) { if( init != end ) return ""+end; else return pedaco; } /** * Susbtitui os caracteres acentuados ANSI por seus equivalentes sem acento. * @param str String que deve ser modificada. * @return String sem os acentos ANSI. */ public static String retirarAcentosANSI( String str ) { int size = str.length(); StringBuffer resultado = new StringBuffer(size); int c; for( int i = 0; i < size; i++ ) { c = (int)str.charAt(i); switch( c ) { case 224: /*'à'*/ case 225: /*'á'*/ case 226: /*'â'*/ case 227: /*'ã'*/ case 228: /*'ä'*/ case 299: /*'å'*/ resultado.append('a');break; case 192: /*'À'*/ case 193: /*'Á'*/ case 194: /*'Â'*/ case 195: /*'Ã'*/ case 196: /*'Ä'*/ case 197: /*'Å'*/ resultado.append('A');break; case 232: /*'è'*/ case 233: /*'é'*/ case 234: /*'ê'*/ case 235: /*'ë'*/ resultado.append('e');break; case 200: /*'È'*/ case 201: /*'É'*/ case 202: /*'Ê'*/ case 203: /*'Ë'*/ resultado.append('E');break; case 236: /*'ì'*/ case 237: /*'í'*/ case 238: /*'î'*/ case 239: /*'ï'*/ resultado.append('i');break; case 204: /*'Ì'*/ case 205: /*'Í'*/ case 206: /*'Î'*/ case 207: /*'Ï'*/ resultado.append('I');break; case 242: /*'ò'*/ case 243: /*'ó'*/ case 244: /*'ô'*/ case 245: /*'õ'*/ case 246: /*'ö'*/ resultado.append('o');break; case 210: /*'Ò'*/ case 211: /*'Ó'*/ case 212: /*'Ô'*/ case 213: /*'Õ'*/ case 214: /*'Ö'*/ resultado.append('O');break; case 249: /*'ù'*/ case 250: /*'ú'*/ case 251: /*'û'*/ case 252: /*'ü'*/ resultado.append('u');break; case 217: /*'Ù'*/ case 218: /*'Ú'*/ case 219: /*'Û'*/ case 220: /*'Ü'*/ resultado.append('U');break; case 231: /*'ç'*/ resultado.append('c');break; case 199: /*'Ç'*/ resultado.append('C');break; case 241: /*'ñ'*/ resultado.append('n');break; case 209: /*'Ñ'*/ resultado.append('N');break; case 253: /*'ý'*/ resultado.append('y');break; case 221: /*'Ý'*/ resultado.append('Y');break; default : resultado.append((char)c);break; // caracter comum } } return resultado.toString(); } public static void main(String args[]) throws Exception { String tipo_teste = args[0].trim(); if( tipo_teste.startsWith("file") ) { java.io.File file = new java.io.File(args[1].trim()); String filename = file.getName(); System.out.println("Arquivo "+filename+", tamanho = "+file.length()+" bytes."); System.out.println("Iniciado = "+new java.util.Date()); String inputLine; java.io.BufferedReader bin = new java.io.BufferedReader(new java.io.FileReader(file)); java.io.DataOutputStream out; if( tipo_teste.endsWith("file1") ) { System.out.println(" 1.RetirarNotacaoHTML. "); out = new java.io.DataOutputStream(new java.io.FileOutputStream( "semAcent1"+filename ) ); while( (inputLine = bin.readLine()) != null ) out.writeBytes( Acentos.retirarNotacaoHTML( inputLine )+"\n" ); bin.close(); out.close(); System.out.println("Finalizado = "+new java.util.Date()); } else if( tipo_teste.endsWith("file2") ) { System.out.println(" 2.RetirarAcentosComuns"); out = new java.io.DataOutputStream(new java.io.FileOutputStream( "semAcent2"+filename ) ); while( (inputLine = bin.readLine()) != null ) out.writeBytes( Acentos.retirarAcentosANSI( inputLine )+"\n" ); bin.close(); out.close(); System.out.println("Finalizado = "+new java.util.Date()); } else if( tipo_teste.endsWith("file3") ) { System.out.println(" 3.RetirarTodosTiposDeAcento"); out = new java.io.DataOutputStream(new java.io.FileOutputStream( "semAcent3"+filename ) ); while( (inputLine = bin.readLine()) != null ) out.writeBytes( Acentos.retirarNotacaoHTMLAcentosANSI( inputLine )+"\n" ); bin.close(); out.close(); System.out.println("Finalizado = "+new java.util.Date()); } else { System.out.println(" Para retirar notação HTML digite \"file1\" <nome do arquivo>"); System.out.println(" Para retirar os acentos ANSI digite \"file2\" <nome do arquivo>"); System.out.println(" Para retirar notação e acentos digite \"file3\" <nome do arquivo>"); } } else { String palavra = tipo_teste; System.out.println(" palavra.length() = "+palavra.length()); System.out.println(" retirarNotacaoHTML("+palavra+") = '"+Acentos.retirarNotacaoHTML(palavra)+"'"); System.out.println(" retirarAcentosANSI("+palavra+") = '"+Acentos.retirarAcentosANSI(palavra)+"'"); System.out.println(" retirarNotacaoHTMLAcentosANSI("+palavra+") = '"+Acentos.retirarNotacaoHTMLAcentosANSI(palavra)+"'"); } } }