根据this answer的建议,使用private static List<News> extractFeatureFromJson(String newsJSON) {
if (TextUtils.isEmpty( newsJSON )) {
return null;
}
List<News> newsall = new ArrayList<>();
try {
JSONObject data = new JSONObject(newsJSON);
JSONObject response = data.getJSONObject(RESPONSE);
JSONArray results = response.getJSONArray(ARTICLES);
for (int i = 0; i < results.length(); i++) {
JSONObject obj = results.getJSONObject(i);
String webTitle = obj.getJSONArray( ARTICLES ).getJSONObject( 0 ).getString( WEB_TITLE );
String webUrl = obj.getJSONArray( ARTICLES ).getJSONObject( 0 ).getString( WEB_URL );
News news = new News(webTitle, webUrl);
newsall.add(news);
}
} catch (JSONException e) {
Log.e("QueryUtils", "Problem parsing the news JSON results", e);
}
return newsall;
}
函数时遇到一些问题。我想在标签上应用bw2analyzer.traverse_tagged_databases
函数。我确保我正在评估的活动(以下为bw2analyzer.traverse_tagged_databases
)具有标签,然后某些输入交换具有标签(但并非全部),并且输入交换的某些输入交换具有标签(不是所有的人)。这是我的工作(省略了一些定义行):
my_act
当我这样做时,内核死亡(确切消息:import bw2analyzer as bw2analyzer
ipcc2013 = ('IPCC 2013', 'climate change', 'GWP 100a')
fu = {my_act:1}
lca_calc = bw.LCA(fu,ipcc2013)
lca_calc.lci()
lca_calc.lcia()
result, tree = bw2analyzer.traverse_tagged_databases(fu, ipcc2013, label='tag',default_tag='other')
。我正在使用Spyder v3.3.1,brightway2 v2.3,bw2analyzer v0.9.4),然后它会无限期地运行。我是否正确使用该功能?我缺少什么?那对你有用吗?谢谢您的帮助!
答案 0 :(得分:0)
我找到了使bw2analyzer.traverse_tagged_databases
函数在大型数据库(例如ecoinvent)上使用时可以起作用的解决方案。我通过实现计算深度(即应用递归函数的最大深度)并在达到该深度时交替显示结果来重写tagged.recurse_tagged_database
函数。这是我的代码(由于我仅使用一个数据库,因此从原始函数中删除了几行):
def recurse_tagged_database(activity, amount, method_dict, lca, label, default_tag, secondary_tags=[],product_system_depth=5):
from bw2data import get_activity
if isinstance(activity, tuple):
activity = get_activity(activity)
inputs = list(activity.technosphere())
if(product_system_depth > 0):
return {
'activity': activity,
'amount': amount,
'tag': activity.get(label) or default_tag,
'secondary_tags':[activity.get(t[0]) or t[1] for t in secondary_tags],
'impact': 0,
'biosphere': [{
'amount': exc['amount'] * amount,
'impact': exc['amount'] * amount * method_dict.get(exc['input'], 0),
'tag': exc.get(label) or activity.get(label) or default_tag,
'secondary_tags':[exc.get(t[0]) or activity.get(t[0]) or t[1] for t in secondary_tags]
} for exc in activity.biosphere()],
'technosphere': [recurse_tagged_database(exc.input, exc['amount'] * amount,
method_dict, lca, label,exc.get(label) or activity.get(label) or default_tag, secondary_tags,product_system_depth=product_system_depth-1)
for exc in inputs]
}
else:
return {
'activity': activity,
'amount': amount,
'tag': activity.get(label) or default_tag,
'secondary_tags':[activity.get(t[0]) or t[1] for t in secondary_tags],
'impact': redo_lca_score(lca,{activity:amount}),
'biosphere': [],
'technosphere': []
}
评论:
default_tag
时,我更改了exc.get(label) or activity.get(label) or default_tag
输入。实际上,就我而言,如果没有标签,我希望默认情况下将交易所的影响与父活动的标签相关联。