es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible convertir este formato de datos al formato CONLL 2003 utilizando Python y la biblioteca Spacy. Aquí están los pasos a seguir:

    1. Importe Spacy y cargue el modelo.
    2. Cree una lista vacía llamada conll_data.

    3. Itere a través de cada oración en los datos anotados.

    4. Defina dos listas vacías llamadas words y labels.

    5. Tokenice la oración usando Spacy para obtener una lista de tokens.

    6. Itere a través de cada token en la lista y agregue su texto a la lista words.

    7. Verifique si el índice de token actual corresponde al comienzo o final de una entidad. Si lo hace, agregue el tipo de entidad a la lista labels, de lo contrario agregue “O”.

    8. Cree una lista llamada tags que contenga tuplas de words y labels.

    9. Agregue tags a conll_data.

    10. Imprima conll_data.

    Aquí está una implementación:

    import spacy
    
    nlp = spacy.load("en_core_web_sm")
    
    data = [
        ('The F15 aircraft uses a lot of fuel', {'entities': [(4, 7, 'aircraft')]}),
        ('did you see the F16 landing?', {'entities': [(16, 19, 'aircraft')]}),
        ('how many missiles can a F35 carry', {'entities': [(24, 27, 'aircraft')]}),
        ('is the F15 outdated', {'entities': [(7, 10, 'aircraft')]}),
        ('how long does it take to train a F16 pilot', {'entities': [(33, 36, 'aircraft')]}),
        ('how much does a F35 cost', {'entities': [(16, 19, 'aircraft')]})
    ]
    
    conll_data = []
    
    for sentence, annotation in data:
        words = []
        labels = []
        doc = nlp(sentence)
        for token in doc:
            words.append(token.text)
            if token.idx == annotation['entities'][0][0]:
                labels.append('B-' + annotation['entities'][0][2])
            elif annotation['entities'][0][0] < token.idx < annotation['entities'][0][1]-1:
                labels.append('I-' + annotation['entities'][0][2])
            else:
                labels.append('O')
        tags = list(zip(words, labels))
        conll_data.append(tags)
    
    print(conll_data)
    

    Esto dará como resultado la siguiente lista en formato CONLL 2003:

    [[('The', 'O'), ('F15', 'B-aircraft'), ('aircraft', 'I-aircraft'), ('uses', 'O'), ('a', 'O'), ('lot', 'O'), ('of', 'O'), ('fuel', 'O')], [('did', 'O'), ('you', 'O'), ('see', 'O'), ('the', 'O'), ('F16', 'B-aircraft'), ('landing', 'O'), ('?', 'O')], [('h...
    

Comments are closed.