JSON:Python输出到Java ObjectMapper的文件大小错误

2024-09-28 05:15:21 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我用Python从NLTK获取数据并将其打印到一个文件(使用JSON),以便将其加载到Java中。这就是我在Python中所做的。在

wordcounts = nltk.ConditionalFreqDist((w.lower(), t) for w, t in brown.tagged_words())
print wordcounts.N()
with open('test.json', 'w') as outfile:
     json.dump(wordcounts, outfile)

然后,在Java中,我加载json文件。我用的是杰克逊。代码是:

^{pr2}$

这一切似乎都是可行的,但是(Java)的输出单词大小()的大小甚至不及python的wordcounts.N()大小。Python输出的大小是1161192,而Java的大小只有49815。在

有人知道出什么问题了吗?在

编辑: 按要求提供更多信息:

我正在加载的python输出文件的片段如下所示

"dronk": {
    "NP": 2
}, 
"dronk's": {
    "NP$": 1
}, 
"droop": {
    "VB": 1
}, 
"drooped": {
    "VBD": 1
}, 
"drooping": {
    "VBG": 1
}, 
"drop": {
    "JJ": 1, 
    "NN": 24, 
    "VB": 34
}, 

澄清。在

System.out.println(word.size());

打印出来

56057

以及

 print wordcounts.N()

打印出来

1161192

1161192是正确的尺寸。在


Tags: 文件jsonfornpjavaloweroutfilevb
1条回答
网友
1楼 · 发布于 2024-09-28 05:15:21

问题不在于Java。一切都很好。如果您在python上阅读JSON:

with open('test.json') as data_file:    
    data = json.load(data_file)
print len(data) #49815

或者如果:

^{pr2}$

1161192是包含单词和标记的元组数。示例:

# wordcounts['drop'] has 3 tags.
print len(wordcounts['drop']) # 3
test = wordcounts['drop']
print test.N() # 59 ( "JJ": 1, "NN": 24, "VB": 34), 34+24+1

如果希望Java显示1161192,则必须对所有标记求和:

ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
Map<String,Object> words = mapper.readValue(new File("test.json"), Map.class);
int value = 0;
for (String word : words.keySet()) {
    Map<String, Integer> tags = (Map) words.get(word);
    for (String tag : tags.keySet()) {
        value += tags.get(tag);
    }
}
System.out.println(value); #1161192

相关问题 更多 >

    热门问题