如何从Android

时间:2017-01-01 14:05:31

标签: android google-app-engine sparql ontology

我正在为关联数据提取安装混合排名算法& Android上下文。您可以在Google上搜索上述关键字的文档。 现在我在两个uri1和uri2之间安装语义相似性。

输入:两个DBpedia URI

输出:表示其相似性的值

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;
}

对于每个子功能,我必须使用提供的API使用SPARQL dbpedia,google,yahoo,bing,dilicious查询数据。获得的结果将计算到解析器并返回相应的浮点值。

下面的abtractS(uri1,uri2)示例:

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;
}

但如何执行此操作,我无法在相似度函数(uri1,uri2)中获得我想要的结果。因此它会影响不同功能的结果。

所以我问的是:我如何获得功能Wiki,abtractS,引擎(google),引擎(bing),引擎(yahoo),引擎(dilicious)的所有结果以简单的方式最好。我目前在Android上工作并且数据加载时间非常重要。

非常感谢!

0 个答案:

没有答案
相关问题