3 Réponses :


0
votes

Utilisez cette fonction et ajoutez vos extensions personnalisées Toute façon que vous souhaitez:

def doc2json(doc: spacy.tokens.Doc, model: str):
    json_doc = {
        "text": doc.text,
        "text_with_ws": doc.text_with_ws,
        "cats": doc.cats,
        "is_tagged": doc.is_tagged,
        "is_parsed": doc.is_parsed,
        "is_nered": doc.is_nered,
        "is_sentenced": doc.is_sentenced,
    }
    ents = [
        {"start": ent.start, "end": ent.end, "label": ent.label_} for ent in doc.ents
    ]
    if doc.is_sentenced:
        sents = [{"start": sent.start, "end": sent.end} for sent in doc.sents]
    else:
        sents = []
    if doc.is_tagged and doc.is_parsed:
        noun_chunks = [
            {"start": chunk.start, "end": chunk.end} for chunk in doc.noun_chunks
        ]
    else:
        noun_chunks = []
    tokens = [
        {
            "text": token.text,
            "text_with_ws": token.text_with_ws,
            "whitespace": token.whitespace_,
            "orth": token.orth,
            "i": token.i,
            "ent_type": token.ent_type_,
            "ent_iob": token.ent_iob_,
            "lemma": token.lemma_,
            "norm": token.norm_,
            "lower": token.lower_,
            "shape": token.shape_,
            "prefix": token.prefix_,
            "suffix": token.suffix_,
            "pos": token.pos_,
            "tag": token.tag_,
            "dep": token.dep_,
            "is_alpha": token.is_alpha,
            "is_ascii": token.is_ascii,
            "is_digit": token.is_digit,
            "is_lower": token.is_lower,
            "is_upper": token.is_upper,
            "is_title": token.is_title,
            "is_punct": token.is_punct,
            "is_left_punct": token.is_left_punct,
            "is_right_punct": token.is_right_punct,
            "is_space": token.is_space,
            "is_bracket": token.is_bracket,
            "is_currency": token.is_currency,
            "like_url": token.like_url,
            "like_num": token.like_num,
            "like_email": token.like_email,
            "is_oov": token.is_oov,
            "is_stop": token.is_stop,
            "is_sent_start": token.is_sent_start,
            "head": token.head.i,
        }
        for token in doc
    ]
    return {
        "model": model,
        "doc": json_doc,
        "ents": ents,
        "sents": sents,
        "noun_chunks": noun_chunks,
        "tokens": tokens,
    }


0 commentaires

0
votes

Étant donné que j'ai rencontré le même problème et que la seule autre réponse n'a pas vraiment aidé mon que je pensais que je me couche aussi bien que d'autres personnes en regardant dans ces quelques indications.

Etant donné que Spacy 2.1 Spracy a supprimé Print_tree et a ajouté le TO_JSON. to_json ne renvoie pas les extensions personnalisées comme "Cette méthode produira le même format que les données de formation JSON attendues par Spacy Train" ( https://spacy.io/usage/v2-1 ).

Si vous souhaitez générer votre extension personnalisée, vous devez écrire votre propre fonction TO_JSON.

Pour ce faire, je vous recommande de prolonger le to_json () donné par Spacy.


0 commentaires

0
votes

Pas vraiment un fan des deux autres réponses ici, car ils semblent un peu surkill (extension de l'objet doc par @chooklii ou le code personnalisé mais flaky Doc2Json Solution de méthode par @Laksh) Je vais donc laisser tomber ici ce que j'ai fait pour l'un de mes projets ici et peut-être que cela est utile à quelqu'un. XXX

Le Doc_Json DOIT avoir Tous les champs que vous avez définis via l'interface d'extensions fournie par Spracy avec les champs définis par d'autres pipelines de Spacy.


0 commentaires