как сделать формат Json

 (S
  (PERSON Rami/NNP Eid/NNP)
  is/VBZ
  studying/VBG
  at/IN
  (ORGANIZATION Stony/NNP Brook/NNP University/NNP)
  in/IN
  (LOCATION NY/NNP)) 

Это вывод кода NLTK, теперь я хочу сохранить его в файле json, например

import json

data = {
        'Rami Eid':{'ORGANIZATION': 'Stony Brook University',  'location':'NY'},
        'GuruRaj Bagali':{'job': 'professor', 'location': 'NY'}
       }

Я хочу сохранить дерево фрагментов в файл json, как указано выше, как это сделать?


person gururaj bagali    schedule 04.02.2016    source источник
comment
Вы спрашиваете, как разобрать вывод NLTK и превратить его в этот словарь?   -  person Barmar    schedule 04.02.2016
comment
Как сделать древовидную структуру данных в формате json, как указано выше   -  person gururaj bagali    schedule 04.02.2016
comment
Используйте NLTK API, чтобы найти нужные элементы в дереве синтаксического анализа, а затем добавьте их в словарь.   -  person Barmar    schedule 04.02.2016
comment
Дубликат: stackoverflow.com/ вопросов/35178585/ и stackoverflow.com/questions/35173045/   -  person alvas    schedule 04.02.2016


Ответы (3)


Это должно сделать это.

import json
with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)
person SkinN    schedule 04.02.2016
comment
Да, это легко, если у вас уже есть данные в диктофоне. У OP нет словаря данных, только вложенный вывод NLTK, и он хочет создать словарь. - person PaulMcG; 04.02.2016
comment
Я думаю, вопрос в том, как превратить ntlk в json, а не в том, как написать словарь в файл - person OneCricketeer; 04.02.2016
comment
Как сделать древовидную структуру данных в формате json, как указано выше. Я хочу, как представить структуру json - person gururaj bagali; 04.02.2016
comment
Они хотят, чтобы данные сохранялись в файле .json, а не в файле .txt. - person Schechter; 04.02.2016

nltk = """
(S
  (PERSON Rami/NNP Eid/NNP)
  is/VBZ
  studying/VBG
  at/IN
  (ORGANIZATION Stony/NNP Brook/NNP University/NNP)
  in/IN
  (LOCATION NY/NNP)) """

from pyparsing import Suppress, ungroup, Word, alphas, Group, Dict, OneOrMore

LPAR,RPAR,SLASH = map(Suppress,"()/")

parsed_word = ungroup(Word(alphas) + Suppress(SLASH + Word(alphas)))
named_token = Group(LPAR + Word(alphas)("name") + 
                    OneOrMore(parsed_word).setParseAction(' '.join)("value") + 
                    RPAR)

subject = (Suppress("S") + named_token)

nltk_expr = (LPAR + subject("subject") + 
             Dict(OneOrMore(named_token | Suppress(parsed_word)))("predicate") + 
             RPAR)

def make_subject_main_key(t):
    subname = t.pop('subject')[0].value
    subdesc = t.pop('predicate')
    t[subname] = subdesc
nltk_expr.setParseAction(make_subject_main_key)

print nltk_expr.parseString(nltk).asDict()

отпечатки

{'Rami Eid': {'ORGANIZATION': 'Stony Brook University', 'LOCATION': 'NY'}}
person PaulMcG    schedule 04.02.2016
comment
Но вывод приведенного выше кода: {'Рами Эйд': ([(['ОРГАНИЗАЦИЯ', 'Университет Стоуни-Брук'], {'имя': [('ОРГАНИЗАЦИЯ', 0)], 'значение': [(' Stony Brook University', 1)]}), (['МЕСТО', 'NY'], {'name': [('LOCATION', 0)], 'value': [('NY', 1)] })], {'ОРГАНИЗАЦИЯ': [('Университет Стоуни-Брук', 0)], 'МЕСТОПОЛОЖЕНИЕ': [('Нью-Йорк', 1)]})} - person gururaj bagali; 04.02.2016
comment
это не похоже на {'Рами Эйд': {'ОРГАНИЗАЦИЯ': 'Университет Стоуни-Брук', 'МЕСТОПОЛОЖЕНИЕ': 'Нью-Йорк'}} - person gururaj bagali; 04.02.2016
comment
Плохо, я использую версию pyparsing, которую я еще не выпустил. - person PaulMcG; 04.02.2016
comment
Вы можете получить версию pyparsing, которая дает этот результат, из репозитория SourceForge SVN: sourceforge.net/p/pyparsing/code/HEAD/tree/trunk/src Просто извлеките pyparsing.py и сохраните его в локальный исходный каталог. Затем, когда я выпущу версию, вы можете обновить pyparsing, а затем просто удалить свою локальную копию. - person PaulMcG; 04.02.2016

Это даст вам красиво отформатированный файл json.

 with open('/path/to/your/new_json_file.json', "w") as f:
     f.write(json.dumps(data, indent=4, sort_keys=True))

Это создаст файл your_json_file.json в каталоге your/ с.

{
    "GuruRaj Bagali": {
        "job": "professor",
        "location": "NY"
    },
    "Rami Eid": {
        "ORGANIZATION": "Stony Brook University",
        "location": "NY"
    }
}

Аргументы indentation и sort_keys являются необязательными. В зависимости от того, как вы его используете, они могут быть приятными.

Вы также можете поместить те же данные в одну строку, и вам не нужно будет импортировать json.

 with open('/path/to/your/new_json_file.json', "w") as f:
     f.write('%s' % data)

Создаст
{'Rami Eid': {'ORGANIZATION': 'Stony Brook University', 'location': 'NY'}, 'GuruRaj Bagali': {'job': 'professor', 'location': 'NY'}}

person Schechter    schedule 04.02.2016