Etiquetador Morfossintático u.u [RESOLVIDO]

14 respostas
terry

Olá,

Gente to com uma dúvida pra elaborar meu etiquetador morfossintático…
Por exemplo tenho que comparar duas Strings alocadas em arrays (distintos) bem grandes, masss uma delas tem um algo a mais…exemplo:

String do array 1= bola
String do array 2= bola_SUBSTANTIVO

a duvida seria como comparar essas duas strings (que são iguais) de modo que ao compara-las saberei q string do array1 e string do array2 sao iguais, portanto a string do array1 tb deve receber a marcação _SUBSTANTIVO, ficando igual a string2

não sei c fui claro o suficiente em minha duvida, mas em suma ela seria
como comparar as strings até certo ponto que elas possam ser iguais para depois disso adicionar uma informação extra (contida em uma) na outra

bom eh isso =D

grato,
terry ruas

14 Respostas

rdgms

Vc esta dizendo que essas duas string devem ser iguais???

terry

Entao mais ou menos,
pq ao pé da letra elas são diferentes, mas tem a mesma classificação
bola e bola_SUBSTANTIVO são iguais se nao fosse pelo “",
isso q quer fazer, ao compara-las quero poder compara-las até o "
” pq ae sabendo que elas sao iguais até esse delimitador, eu posso “etiquetar” a palavra (bola no caso) com a etiqueta presente na outra string (_SUBSTANTIVO)

rdgms

String a1= "bola"; String a2= "bola_SUBSTANTIVO" ; if( a1.split("_")[0].equals(a2.split("_")[0])) { System.out.print("iguais"); }
Amigo tenho certeza que deve ter outro jeito para fazer… isso…
mais isso ai funciona

O slipt é um metodo da String que retorna um vetor de String “cortando a string por um delimitador” ;
por exemplo

String a = "a.b.n.h.j.k"; String [] vetor = a.split(".");

so que no meu caso como eu queria a parte da frente ou seja antes do _ eu ja no metodo coloquei “[0]” (a primeira posição) e ja coloquei o equals comparando com a outra String

terry

humm, sim sim funciona
mas tipo isso ainda não resolve 100% o problema, pq o que vem dps do “_” de a2 deve ser guardado, para caso ele sejam iguais eu adicionar essa informação a a1 =/

rdgms

nussa a coisa ta ficando muito feia

if( a1.split("_")[0].equals(a2.split("_")[0])) { if (a1.split("_").length==1) { a1+="_"+(a2.split("_")[1]); } else if (a2.split("_").length==1) { a1+="_"+(a1.split("_")[1]); } System.out.print(a1+"\n"+a2); }
me sinto programando c denovo…

terry

:shock: minha nossa senhora do pão de ló
eaheuhaueha, tah ficando bem trampo memo =]
vo tentar fuçar mais nisso aqui, dps de almoço ( e de lavar um pouco de ropa…vida de republica eh foda) reeapareço aqui =D

vlw pelo help \o

terry

Aew povo consegui fazer parte de um etiquetador morfossintatico…
estou usando arraylists, aew tipo to cuma duvida

nos arrays lists tenho informções como

Terry_SUBSTANTIVO

como faço pra pegar essa string e le-la até certo ponto tipo, leio ateh “Terry” seguro em uma variavel temporaria, e depois o “_SUBSTANTIVO” faço a mema coisa, para poder trabalhar com ele (mudar cor e etc), e em seguida concatenar as duas informações com as modificações deseajdas

tentei usar umas coisas do array list mas n fui feliz (como o concat ou o add, ae tive q usar o set memo)

alguem tem alguma dica de como (e quais) funções do arraylist posso utilizar pra resolver isso ?

vlww \o

(dps posso por o codigo do etiketador aki se alguem kiser =] )

T

Em vez de você ter um arraylist de strings, crie um arraylist de objetos.

Exemplo:

enum ClassePalavra {
    Substantivo, Adjetivo, Adverbio, Conjuncao, Preposicao, Interjeicao, Pronome, Artigo, Indefinido
}
class TaggedString {
public String palavra;
public ClassePalavra classePalavra = ClassePalavra.Indefinido;
}

E em vez de guardar “Terry_Substantivo”, crie um objeto da classe TaggedString contendo palavra = “Terry” e classePalavra = ClassePalavra.Substantivo. OK?

terry

Ae gente ainda to preso nessa jossa de etiketador u.u
tipo consigo etiketar um texto ingenuamente, mas n consigo fazer algo mais elaborado…
Gostaria de pegar minhas etiketas que estão da seguinte forma:

O_ART
jeito_N
é_V
votar_V
em_PREP
outro_PROADJ
prefeito_N
de_PREP|+
a_ART
próxima_ADJ
vez_N

e montar uma especie de lista para elas, por exemplo a palavra “cravo” tem varias etiketas, entao keria pegar e daxar assim, a palavra “cravo” tem frequencia de 100 etiketas pra verbo e 20 pra nome. Assim ao acha-la em meu texto eu veria qual etiketa tem maior frequencia e a escolheria para meu texto. Lembrando que jah tenho essas etiketas na forma de um arraylist de string q jah acertei.
segue o codigo q fiz para montar meu ArrayListao de etiketas

public ArrayList<String> EtiquetaMaster(String linha, String arquivo, BufferedReader buffer, ArrayList<String> campos, ArrayList<String> tags) {
        tags = new ArrayList<String>();
        try {

            buffer = new BufferedReader(new FileReader(arquivo));
            campos = new ArrayList<String>();
            String[] teta = null;
            while ((linha = buffer.readLine()) != null) {
                teta = linha.split(" ");
                for (int i = 0; i < teta.length; i++) {
                    campos.add(teta[i]);
                }
            }
            for (int a = 0; a < campos.size(); a++) {
                tags.add(a, campos.get(a));
            }
            buffer.close();
        } catch (IOException e) {
            System.err.println(e);
        }

        return (tags);
    }

qualqer ajuda eh bem vinda =D

B

use expressão regular: http://java.sun.com/docs/books/tutorial/essential/regex/test_harness.html

B

:? hrrrr olhando apenas para a primeira mensagem isso até serviria, mas esquece. vai pela forma q o thingol passou q é o melhor jeito.

terry

aew soh avisando consegui fazer o etiquetador, e até que bem eficiente \o/
XD

rogeriop80

terry:
aew soh avisando consegui fazer o etiquetador, e até que bem eficiente \o/
XD

Depois de ler tudo, isso não te ajuda ? http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#contentEquals(java.lang.StringBuffer)

terry

eahuehae, eu disse que Consegui fazer =D
com sucesso, nao q nao consegui fazer meu filho =D
mas memo assim brigado again \o

Criado 26 de outubro de 2008
Ultima resposta 7 de nov. de 2008
Respostas 14
Participantes 5