JSON:Python 将文件输出到 Java ObjectMapper - 错误大小
JSON: Python Output File to Java ObjectMapper - Wrong Sizes
所以,我在 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 文件。我正在使用杰克逊。代码是:
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
Map<String,Object> word = mapper.readValue(new File("test.json"), Map.class);
System.out.println(word.size());
这一切似乎都有效,但是,(Java) word.size() 的输出甚至不接近 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 是正确的尺寸。
问题不在于 Java。一切顺利。如果您在 python 上阅读 JSON:
with open('test.json') as data_file:
data = json.load(data_file)
print len(data) #49815
或者如果:
print len(wordcounts) #49815
1161192是有word和tag的元组数。示例:
# 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
所以,我在 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 文件。我正在使用杰克逊。代码是:
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
Map<String,Object> word = mapper.readValue(new File("test.json"), Map.class);
System.out.println(word.size());
这一切似乎都有效,但是,(Java) word.size() 的输出甚至不接近 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 是正确的尺寸。
问题不在于 Java。一切顺利。如果您在 python 上阅读 JSON:
with open('test.json') as data_file:
data = json.load(data_file)
print len(data) #49815
或者如果:
print len(wordcounts) #49815
1161192是有word和tag的元组数。示例:
# 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