【问题标题】:how to do Json format [duplicate]如何做Json格式[重复]
【发布时间】:2016-05-13 14:45:48
【问题描述】:
 (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文件中怎么办?

【问题讨论】:

标签: python nltk entity-relationship named-entity-recognition


【解决方案1】:

应该这样做。

import json
with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)

【讨论】:

  • 是的,如果您的数据已经在字典中,这很容易。 OP 没有数据字典,只有嵌套的 NLTK 输出,并且想要创建字典。
  • 我认为问题是如何将ntlk变成json,而不是如何将字典写入文件
  • 如何将数据的树形结构转换成上面的 json 格式。我想怎么表示json结构
  • 他们希望将数据保存在.json 文件中,而不是.txt 文件中。
【解决方案2】:
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'}}

【讨论】:

  • 但是上面的代码输出的是 {'Rami Eid': ([(['ORGANIZATION', 'Stony Brook University'], {'name': [('ORGANIZATION', 0)] , 'value': [('Stony Brook University', 1)]}), (['LOCATION', 'NY'], {'name': [('LOCATION', 0)], 'value': [ ('NY', 1)]})], {'ORGANIZATION': [('Stony Brook University', 0)], 'LOCATION': [('NY', 1)]})}
  • 它不像 {'Rami Eid': {'ORGANIZATION': 'Stony Brook University', 'LOCATION': 'NY'}}
  • 糟糕,我正在使用尚未发布的 pyparsing 版本。
  • 您可以从 SourceForge SVN 存储库获取给出此结果的 pyparsing 版本:sourceforge.net/p/pyparsing/code/HEAD/tree/trunk/src 只需提取 pyparsing.py 并将其保存到本地源目录。然后当我发布版本时,你可以升级 pyparsing 然后删除你的本地副本。
【解决方案3】:

这将为您提供格式良好的 json 文件。

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

这将在your/ 目录中创建一个文件your_json_file.json

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

缩进和 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'}}

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 2020-05-07
    • 1970-01-01
    • 2019-08-06
    • 2020-10-24
    • 2021-12-20
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多