如何在Android中从一个函数中的多个服务器获取结果
我正在安卓上安装用于链接数据提取和上下文的混合排序算法。你可以在谷歌搜索上面的关键词。 现在我正在安装两个uri1和uri2之间的语义相似性 输入:两个dbpediauri 输出:表示其相似性的值如何在Android中从一个函数中的多个服务器获取结果,android,google-app-engine,sparql,ontology,Android,Google App Engine,Sparql,Ontology,我正在安卓上安装用于链接数据提取和上下文的混合排序算法。你可以在谷歌搜索上面的关键词。 现在我正在安装两个uri1和uri2之间的语义相似性 输入:两个dbpediauri 输出:表示其相似性的值 private float similarity(String uri1, String uri2) { float wikipedia = wikiS(uri1, uri2); float abtract = abtractS(uri1, uri2); float go
private float similarity(String uri1, String uri2) {
float wikipedia = wikiS(uri1, uri2);
float abtract = abtractS(uri1, uri2);
float google = engineS(uri1, uri2, google);
float yahoo = engineS(uri1, uri2, yahoo);
float bing = engineS(uri1, uri2, bing);
float dilicious = engineS(uri1, uri2, dilicicous);
return wikipedia + abtract + google + yahoo + bing + dilicious;
}
对于每个子函数,我必须使用SPARQL dbpedia、google、yahoo、bing和Dilicous使用提供的API查询数据。获得的结果将被计算到解析器并返回相应的浮点值
下面的abtractS(uri1、uri2)示例:
私有浮点摘要(字符串uri1、字符串uri2、最终浮点Wiki){
字符串url=createUrlAbstractS(uri1,uri2);
StringRequest=newStringRequest(request.Method.GET,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
浮动轨迹=0.0f;
试一试{
JSONObject JSONObject=新JSONObject(响应);
JSONArray data=jsonObject.getJSONObject(“结果”).getJSONArray(“绑定”);
if(data.length()==0){
showLogAndToast(“无结果”);
}否则{
JSONObject元素=data.getJSONObject(0);
String label1=element.getJSONObject(“label1”).getString(“value”);
字符串abtract1=element.getJSONObject(“abtract1”).getString(“value”);
String label2=element.getJSONObject(“label2”).getString(“value”);
字符串abtract2=element.getJSONObject(“abtract2”).getString(“value”);
abtractS=calWordContained(label1,abtract2)+calWordContained(label2,abtract1)+wiki;
//TODO:结果在这里。下一步如何?
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.d(标记,error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(请求);
返回0.0f;//此处:无结果
}
私有浮点calWordContained(字符串标签、字符串跟踪){
如果(label.length()==0 | | abtract.length()==0){
返回0.0f;
}
List words=Arrays.asList(label.split(“”));
整数计数=0;
float length=words.size();
for(int i=0;i
但是如何在上执行此操作,我无法在相似性函数(uri1,uri2)中获得我想要的结果。因此,它将影响不同功能的结果
所以我要问的是:如何以最简单的方式获得Wiki、abtractS、engine(google)、engine(bing)、engine(yahoo)、engine(dilicious)功能的所有结果。我目前在安卓系统上做,数据加载时间非常重要
多谢各位 你说的“我怎样才能得到Wiki函数的所有结果,…”是什么意思?你必须向每个搜索API发送一个查询,还有什么可能?顺便说一句,对我来说,不清楚Google、Yahoo等搜索两个DBpedia URI的意义有多大……这听起来很奇怪,更适合使用两个DBpedia资源的标签。我想获得Wiki、abtractS、engine(谷歌)的数据。。相似性函数将在以后处理。但是我必须通过网络发送查询来检索数据,所以Wiki、abtractS、engine(谷歌)的结果。。不能采用直接样式:float wikis=wikis(uri1,uri2),我必须解析它的onResponse(String response)中的数据才能得到结果。因此,我无法在函数similiraty(uri1,uri2)中获得结果。据我所知,您需要所有截取请求的结果来查找相似性。您面临的问题是,并没有返回截击响应的机制(本例中的摘要)。要解决此问题,可以使用。看看你能不能弄明白。如果没有,我会帮助你。试一下。对我来说,整个问题还不清楚,很抱歉这么说。最好解释一下到底什么不起作用。1.)修复打字错误,例如
abtract
2。
private float abstractS(String uri1, String uri2, final float wikiS){
String url = createUrlAbstractS(uri1, uri2);
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
float abtractS = 0.0f;
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray data = jsonObject.getJSONObject("results").getJSONArray("bindings");
if(data.length() == 0){
showLogAndToast("No result");
}else{
JSONObject element = data.getJSONObject(0);
String label1 = element.getJSONObject("label1").getString("value");
String abtract1 = element.getJSONObject("abtract1").getString("value");
String label2 = element.getJSONObject("label2").getString("value");
String abtract2 = element.getJSONObject("abtract2").getString("value");
abtractS = calWordContained(label1, abtract2) + calWordContained(label2, abtract1) + wikiS;
//TODO: RESULT ABTRACTS HERE. How next?
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(request);
return 0.0f;//HERE: no results
}
private float calWordContained(String label, String abtract){
if(label.length() == 0 || abtract.length() == 0){
return 0.0f;
}
List<String> words = Arrays.asList(label.split(" "));
int count = 0;
float length = words.size();
for(int i = 0; i < length; i++){
if(abtract.toLowerCase().contains(words.get(i).toLowerCase())){
count++;
}
}
return (count/length);
}
public String createUrlAbstractS(String uri1, String uri2){
private String BASE_URL_DBPEDIA = "http://dbpedia.org/sparql?default-graph-uri=&query=";
String query = createQueryAbstractS(uri1, uri2);
String url = "";
try {
url = Config.BASE_URL_DBPEDIA + URLEncoder.encode(query, "UTF-8") + Config.RESULT_JSON_TYPE;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return url;
}
private String createQueryAbstractS(String uri1, String uri2){
String query = Config.PREFIX_DBPEDIA + " \n" +
"prefix dbpedia-owl: <http://dbpedia.org/ontology/>\n" +
"\n" +
"\n" +
"select ?label1, ?label2, ?abtract1, ?abtract2 where\n" +
"{\n" +
" {\n" +
" select *\n" +
" where{\n" +
" <" + uri1 + "> rdfs:label ?label1 ;\n" +
" dbpedia-owl:abstract ?abtract1 .\n" +
" FILTER langMatches(lang(?abtract1),'en') . \n" +
" FILTER langMatches(lang(?label1),'en') .\n" +
" }\n" +
" }\n" +
"\n" +
"\n" +
" {\n" +
" select *\n" +
" where{\n" +
" <" + uri2 + "> rdfs:label ?label2 ;\n" +
" dbpedia-owl:abstract ?abtract2 .\n" +
" FILTER langMatches(lang(?label2),'en') . \n" +
" FILTER langMatches(lang(?abtract2),'en') .\n" +
" }\n" +
" }\n" +
"}";
return query;
}