Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

vasco16

Reduzir texto

Mensagens Recomendadas

vasco16

Boas pessoal, estou aqui a fazer um metodo para reduzir um texto ( de x em x frases) mas estou com algumas dificuldades..

O metodo recebe um inteiro (inteiro esse que me diz de quantas em quantas frases vou reduzir, exemplo: se o inteiro for 3 gravo a primeira frase e depois so gravo a 4) e a classe tem como atributo uma String.

Fiz isto:

public void dimiTexto(int numero){
	this.frase = frase;

	String[] resume = textoOriginal.split("\\.");
	StringBuilder textoFinal = new StringBuilder();
	int auxiliar = 0;

	for ( int i = 0; i < resume.length; i++){
		System.out.println(resume[i]);
		frasesTexto++;
		if (numero != 0 && i/numero == auxiliar ){
			textoFinal.append(resume[i]);
			auxiliar++;
			resumo++;
		}
	}
	textoOriginal = textoFinal.toString();
}

O meu problema é no final.. por exemplo tenho uma string que tem uma frase final sem ponto.. ele conta-me namesma como uma frase.. e só devia contar as frases com pontos.

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

this.frase = frase;

Não sei se é apenas um teste ou código que ficou mas esta linha não faz coisa alguma.

Podes colocar um exemplo do input que estás a usar, não estou a perceber bem o problema que estás a ter.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vasco16

this.frase = frase;

Não sei se é apenas um teste ou código que ficou mas esta linha não faz coisa alguma.

Podes colocar um exemplo do input que estás a usar, não estou a perceber bem o problema que estás a ter.

A linha que mencionas-te é-me util porque tenho um metodo que me vai devolver os dados enviados para os metodos.

Imagina este texto:

<p><s> A/DA#fs nossa/POSS#fs máquina/MÁQUINA/CN#fs ,*//PNT em_/PREP o/DA#ms seu/POSS#ms processo/PROCESSO/CN#ms normal/NORMAL/ADJ#ms de/PREP funcionamento/FUNCIONAMENTO/CN#ms ,*//PNT produz/PRODUZIR/V#pi-3s muito/ADV “lixo”/?,“LIXO”/PPA#?? .*//PNT </s> 
<s> Resultante/ADV de_/PREP as/DA#fp muitas/QNT#fp funções/FUNÇÃO/CN#fp que/REL serve/SERVIR/V#pi-3s .*//PNT </s> 
<s> a_/LPREP1 o/LPREP2 longo/LPREP3 de_/LPREP4 o/DA#ms tempo/TEMPO/CN#ms esse/DEM#ms lixo/LIXO/CN#ms pode/PODER/V#pi-3s provocar/PROVOCAR/V#inf-nInf alguns/QNT#mp conflitos/CONFLITO/CN#mp em_/PREP o/DA#ms sistema/SISTEMA/CN#ms .*//PNT </s> 
<s> Levando/LEVAR/V#GER a/PREP uma/UM#fs diminuição/DIMINUIÇÃO/CN#fs de_/PREP a/DA#fs produtividade/PRODUTIVIDADE/CN#fs ,*//PNT erros/ERRO/CN#mp e/CJ até/PREP perda/PERDA/CN#fs de/PREP informação/INFORMAÇÃO/CN#fs .*//PNT </s> 
<s> É/SER/V#pi-3s imprescindível/IMPRESCINDÍVEL/ADJ#gs que/REL se/CL#gn3 faça/FAZER/V#pc-3s periodicamente/ADV uma/UM#fs manutenção/MANUTENÇÃO/CN#fs .*//PNT </s> 
<s> A/DA#fs questão/QUESTÃO/CN#fs está/ESTAR/V#pi-3s em_/PREP a/DA#fs ferramenta/FERRAMENTA/CN#fs a/PREP utilizar/UTILIZAR/V#inf-nInf .*//PNT </s> 
<s> Há/HAVER/V#pi-3s tantas/ADV .*//PNT </s> 
<s> Mas/CJ há/HAVER/V#pi-3s algumas/QNT#fp mais/ADV “dedicadas/?,“DEDICADO/PPA#fp e/CJ seguras”/SEGURAS”/ADJ#?? que/CJ outras/OUTRO/ADJ#fp .*//PNT olá/OLÁ/CN#fs </s></p>         

Com o texto Original:

A nossa máquina, no seu processo normal de funcionamento, produz muito “lixo”. Resultante das muitas funções que serve. Ao longo do tempo esse lixo pode provocar alguns conflitos no sistema. Levando a uma diminuição da produtividade, erros e até perda de informação. É imprescindível que se faça periodicamente uma manutenção. A questão está na ferramenta a utilizar. Há tantas. Mas há algumas mais “dedicadas e seguras” que outras. olá

O objectivo desde metodo é filtrar as frases de x em x frases (em que este x é enviado como parametro).

Imaginando que enviava: x = 3.

Ficaria com o texto limpo assim:

A nossa máquina, no seu processo normal de funcionamento, produz muito “lixo”. É imprescindível que se faça periodicamente uma manutenção. Mas há algumas mais dedicadas e seguras que outras.

O problema é que nao consigo controlar a ultima entrada, é que o texto codificado vai ficar com uma ultima frase com esta informação:

 </s></p>

Exemplo matemático:

Tenho 7 frases codificadas:

Gravo a 1ª depois a 4ª depois a 7ª mas o que acontece com o meu código é que tambem vai gravar a ultima entrada com o conteudo:

 </s></p>

e só quero frases "boas"

Ao estar a usar o metodo split estou a fazer bem? Ao filtrar frases pelo ponto?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vasco16

Tentei agora assim:

while( (i < resume.length) && (resume != "*//PNT </s></p>")){

Mas sem sucesso, o programa entra-me namesma no ciclo..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Continuo com algumas dificuldades em perceber o que está errado no que tens, se é suposto retirar do texto original algumas frases, com base num número indicado, é isso que está a acontecer, mas colocaste dois textos, qual deles é afinal o texto que usas como input do programa?

A comparação de strings não é feita usando os operadores de comparação, = e != não se usam em strings, deves usar o método compareTo ou o método equals.

Não percebi a questão da primeira linha de código. Dado que this.frase = frase significa que estás a atribuir a frase a ela mesma. Essa linha é exactamente igual a this.frase = this.frase ou frase = frase ou não ter a dita linha, mas como tu é que conheces o resto do programa, certamente estás a ver alguma coisa que eu não estou.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vasco16

Continuo com algumas dificuldades em perceber o que está errado no que tens, se é suposto retirar do texto original algumas frases, com base num número indicado, é isso que está a acontecer, mas colocaste dois textos, qual deles é afinal o texto que usas como input do programa?

A comparação de strings não é feita usando os operadores de comparação, = e != não se usam em strings, deves usar o método compareTo ou o método equals.

Não percebi a questão da primeira linha de código. Dado que this.frase = frase significa que estás a atribuir a frase a ela mesma. Essa linha é exactamente igual a this.frase = this.frase ou frase = frase ou não ter a dita linha, mas como tu é que conheces o resto do programa, certamente estás a ver alguma coisa que eu não estou.

Agora que fiz mais testes ele está-me a reduzir bem, mas ao fazer split fico com um vector de String certo? em que cada posição tenho uma frase? mas agora nessas frases como faço para remover por exemplo Adjectivos? faço split de (" ") e assim fico com outro vector de palavras ? Em que cada posição deste novo vector é uma palavra mas como o posso percorrer?

Exemplo:

Tenho esta frase codificada:

<p><s> A/DA#fs nossa/POSS#fs máquina/MÁQUINA/CN#fs ,*//PNT em_/PREP o/DA#ms seu/POSS#ms processo/PROCESSO/CN#ms normal/NORMAL/ADJ#ms de/PREP funcionamento/FUNCIONAMENTO/CN#ms ,*//PNT produz/PRODUZIR/V#pi-3s muito/ADV “lixo”/?,“LIXO”/PPA#?? .*//PNT </s> 

Toda essa frase está numa posição de um vector de String. A ideia era fazer split (" ") para ficar com as palavras num outro vector e assim remover os Adjectivos.. mas como percorro depois essas palavras? visto que estão numa posição de um vector?

Vector1:

<p><s> A/DA#fs nossa/POSS#fs máquina/MÁQUINA/CN#fs ,*//PNT em_/PREP o/DA#ms seu/POSS#ms processo/PROCESSO/CN#ms normal/NORMAL/ADJ#ms de/PREP funcionamento/FUNCIONAMENTO/CN#ms ,*//PNT produz/PRODUZIR/V#pi-3s muito/ADV “lixo”/?,“LIXO”/PPA#?? .*//PNT </s> 

VEctor2: (apos o split (" "):

<p><s>

A/DA#fs nossa/POSS#fs

máquina/MÁQUINA/CN#fs

,*//PNT

em_/PREP

o/DA#ms

...

normal/NORMAL/ADJ#ms (como faço para nao adicionar esta palavra) ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Agora que fiz mais testes ele está-me a reduzir bem, mas ao fazer split fico com um vector de String certo? em que cada posição tenho uma frase?

Sim, ficas com o vector de String, mas atenção que pode não ser uma frase. Quando dividiste o texto pela primeira vez, dividiste por ".", se estiverem dois pontos seguidos, ou três, o que é que acontece? Não é uma frase.

Isto para dizer que um simples split é útil mas não tens grande controlo sobre como estava o texto e sobre como o vector vai ficar, tens de confirmar se as posições contêm o que pretendes, neste caso se têm uma frase, antes de fazeres qualquer operação sobre a dita posição.

Toda essa frase está numa posição de um vector de String. A ideia era fazer split (" ") para ficar com as palavras num outro vector e assim remover os Adjectivos.. mas como percorro depois essas palavras? visto que estão numa posição de um vector?

Percorres da mesma maneira que percorrerias outro vector, agora como é que guardas os valores e como é que relacionas as frases com as palavras, isso já é contigo, podes usar matrizes, em que cada linha representa uma frase e cada coluna representa uma palavra, ou usar listas, ou qualquer outra estrutura que bem entendas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
vasco16

..tens de confirmar se as posições contêm o que pretendes, neste caso se têm uma frase, antes de fazeres qualquer operação sobre a dita posição.

Como é que verifico uma posição?  :wallbash:

É que uma posição tem lá muita coisa..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.