5

I'm trying to use the BabelNet restful API to retrieve the information on the page below the gloss and above the button that says "Explore Network". For example on the page for GPS I want to be able to extract these attribute value pairs:

IS A navigational system  •  sat nav  •  avionics 
HAS PART USA-242  •  USA-248 
COUNTRY United States 
COUNTRY OF ORIGIN United States 
OPERATOR Air Force Space Command 
USE location  •  place

Is that information available through the restful API?

Update: I've actually more or less figured this out. The key is the getOutgoingEdges query, though some parts of this are trial and error as I didn't find the documentation as helpful as one might hope. But here's what I've got (just printing them out for now for debug purposes), using python requests and BeautifulSoup:

    import requests
    from bs4 import BeautifulSoup
    import json

    proxy_dict = {} # set according to system needs
    nextId = "bn:00040680n" # the GPS page 

    r = requests.get('https://babelnet.io/v5/getOutgoingEdges?id='+nextId+'&key=<mykey>', proxies = proxy_dict)
    idsoup = BeautifulSoup(r.text, "lxml")
    jsonedgesitem = json.loads(idsoup.html.body.p.string)
    for relation in jsonedgesitem:
        lang = relation.get("language")
        if lang == "EN" or lang == "MUL":
        if "pointer" in relation:
            shortName = relation["pointer"].get("shortName") 
            if shortName != "related" and shortName != "gloss-related":
                print(json.dumps(relation,indent=2))

I'm screening out non-English links, as well as links that are just "related" and "gloss-related" links, which are the vast majority.

That produces the following output:

{
  "pointer": {
    "name": "operator",
    "fSymbol": "wd92",
    "relationGroup": "OTHER",
    "shortName": "operator",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00001859n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "use",
    "fSymbol": "wd148",
    "relationGroup": "OTHER",
    "shortName": "use",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00051760n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "use",
    "fSymbol": "wd148",
    "relationGroup": "OTHER",
    "shortName": "use",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00062699n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "Hypernym",
    "fSymbol": "@",
    "relationGroup": "HYPERNYM",
    "shortName": "is-a",
    "isAutomatic": false
  },
  "language": "EN",
  "target": "bn:00057078n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "has_part",
    "fSymbol": "wd76",
    "relationGroup": "HOLONYM",
    "shortName": "has_part",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:15441159n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "has_part",
    "fSymbol": "wd76",
    "relationGroup": "HOLONYM",
    "shortName": "has_part",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:16971426n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "country_of_origin",
    "fSymbol": "wd35",
    "relationGroup": "OTHER",
    "shortName": "country_of_origin",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00003341n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "subclass_of",
    "fSymbol": "wd21",
    "relationGroup": "HYPERNYM",
    "shortName": "subclass_of",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00007477n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "country",
    "fSymbol": "wd3",
    "relationGroup": "OTHER",
    "shortName": "country",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00003341n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "Hyponym",
    "fSymbol": "~@w",
    "relationGroup": "HYPONYM",
    "shortName": "has-kind",
    "isAutomatic": true
  },
  "language": "EN",
  "target": "bn:01177672n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "Hyponym",
    "fSymbol": "~@w",
    "relationGroup": "HYPONYM",
    "shortName": "has-kind",
    "isAutomatic": true
  },
  "language": "EN",
  "target": "bn:02122452n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "Hyponym",
    "fSymbol": "~@w",
    "relationGroup": "HYPONYM",
    "shortName": "has-kind",
    "isAutomatic": true
  },
  "language": "EN",
  "target": "bn:03088008n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "Hypernym",
    "fSymbol": "@wd",
    "relationGroup": "HYPERNYM",
    "shortName": "is-a",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00732900n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}
{
  "pointer": {
    "name": "Hypernym",
    "fSymbol": "@w",
    "relationGroup": "HYPERNYM",
    "shortName": "is-a",
    "isAutomatic": true
  },
  "language": "EN",
  "target": "bn:00732900n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}

Where it is documented what kinds of relations can be included here? In particular, is there a meaningful difference between the Hypernym "is-a" and Hypernym "subclass-of" types of relation? Where are the fSymbol values documented?

PurpleVermont
  • 1,179
  • 4
  • 18
  • 46

1 Answers1

2

Please note that I could list out all of this in comments section so opting to write an answer instead and I am only trying to answer the below question since it's highlight in bold.

Where it is documented what kinds of relations can be included here? In particular, is there a meaningful difference between the Hypernym "is-a" and Hypernym "subclass-of" types of relation? Where are the fSymbol values documented?

fSymbols

A complete list of fSymbols can be referenced in pointer.txt file BabelNet-API-4.0\resources\jlt folder. I wouldn't call them being fully documented but that's where you can find them and I haven't found this list to be provided anywhere on BabeNet website. Also, I had to cut short the list below as I do not want overload this thread. You would have to download the api folder from here and extract it.

%Relation Types extrated by Wikidata dump 2014 september
    wd1 instance_of instance_of HYPERNYM
    wd2 stated_in   stated_in
    wd3 country country
    wd4 sex_or_gender   sex_or_gender
    wd5 located_in_the_administrative_territorial_entity    located_in_the_administrative_territorial_entity
    wd6 taxon_rank  taxon_rank
    wd7 parent_taxon    parent_taxon
    wd8 occupation  occupation
    wd9 country_of_citizenship  country_of_citizenship
    wd10    given_name  given_name
    wd11    contains_administrative_territorial_entity  contains_administrative_territorial_entity
    wd12    place_of_birth  place_of_birth
    wd13    cast_member cast_member
    wd14    place_of_death  place_of_death
    wd15    member_of_sports_team   member_of_sports_team
    wd16    award_received  award_received
    wd17    educated_at educated_at
    wd18    type_of_administrative_territorial_entity   type_of_administrative_territorial_entity
    wd19    shares_border_with  shares_border_with
    wd20    position_held   position_held
    wd21    subclass_of subclass_of HYPERNYM
    wd22    genre   genre
    wd23    member_of_political_party   member_of_political_party
    wd24    follows follows
    wd25    followed_by followed_by
    **** there are more please refer to the file. ****

Note I couldn't find any specific document but the BabelPointer.java lists all pointers and their mappings to RelationGroup (HYPERNYM, HYPONYM, MERONYM, HOLONYM, OTHER), there are is-a, has-kind, has-part, part-of, derived-from relation type that are commonly used with others

public static final BabelPointer SEMANTICALLY_RELATED = new BabelPointer("r", "Semantically related form", "related");
  public static final BabelPointer GLOSS_MONOSEMOUS = new BabelPointer("gmono", "Gloss related form (monosemous)", "gloss-related");
  public static final BabelPointer GLOSS_DISAMBIGUATED = new BabelPointer("gdis", "Gloss related form (disambiguated)", "gloss-related");
  public static final BabelPointer ALSO_SEE = new BabelPointer("^", "Also See", "also-see");
  public static final BabelPointer ANTONYM = new BabelPointer("!", "Antonym", "antonym");
  public static final BabelPointer ATTRIBUTE = new BabelPointer("=", "Attribute", "attrib");
  public static final BabelPointer CAUSE = new BabelPointer(">", "Cause", "cause");
  public static final BabelPointer DERIVATIONALLY_RELATED = new BabelPointer("+", "Derivationally related form", "deriv");
  public static final BabelPointer ENTAILMENT = new BabelPointer("*", "Entailment", "entails");
  public static final BabelPointer HYPERNYM = new BabelPointer("@", "Hypernym", "is-a", RelationGroup.HYPERNYM);
  public static final BabelPointer HYPERNYM_INSTANCE = new BabelPointer("@i", "Instance hypernym", "is-a", RelationGroup.HYPERNYM);
  public static final BabelPointer HYPONYM = new BabelPointer("~", "Hyponym", "has-kind", RelationGroup.HYPONYM);
  public static final BabelPointer HYPONYM_INSTANCE = new BabelPointer("~i", "Instance hyponym", "has-kind", RelationGroup.HYPONYM);
  public static final BabelPointer HOLONYM_MEMBER = new BabelPointer("#m", "Member holonym", "has-part", RelationGroup.HOLONYM);
  public static final BabelPointer HOLONYM_SUBSTANCE = new BabelPointer("#s", "Substance holonym", "has-part", RelationGroup.HOLONYM);
  public static final BabelPointer HOLONYM_PART = new BabelPointer("#p", "Part holonym", "has-part", RelationGroup.HOLONYM);
  public static final BabelPointer MERONYM_MEMBER = new BabelPointer("%m", "Member meronym", "part-of", RelationGroup.MERONYM);
  public static final BabelPointer MERONYM_SUBSTANCE = new BabelPointer("%s", "Substance meronym", "part-of", RelationGroup.MERONYM);
  public static final BabelPointer MERONYM_PART = new BabelPointer("%p", "Part meronym", "part-of", RelationGroup.MERONYM);
  public static final BabelPointer PARTICIPLE = new BabelPointer("<", "Participle", "participle");
  public static final BabelPointer PERTAINYM = new BabelPointer("\\", "Pertainym (pertains to nouns)", "pertains-to");
  public static final BabelPointer REGION = new BabelPointer(";r", "Domain of synset - REGION", "domain");
  public static final BabelPointer REGION_MEMBER = new BabelPointer("-r", "Member of this domain - REGION", "domain");
  public static final BabelPointer SIMILAR_TO = new BabelPointer("&", "Similar To", "sim");
  public static final BabelPointer TOPIC = new BabelPointer(";c", "Domain of synset - TOPIC", "topic");
  public static final BabelPointer TOPIC_MEMBER = new BabelPointer("-c", "Member of this domain - TOPIC", "topic");
  public static final BabelPointer USAGE = new BabelPointer(";u", "Domain of synset - USAGE", "usage");
  public static final BabelPointer USAGE_MEMBER = new BabelPointer("-u", "Member of this domain - USAGE", "usage");
  public static final BabelPointer VERB_GROUP = new BabelPointer("$", "Verb Group", "verb_group");
  public static final BabelPointer WIBI_HYPERNYM = new BabelPointer("@w", "Hypernym", "is-a", RelationGroup.HYPERNYM, true);
  public static final BabelPointer WIKIDATA_HYPERNYM = new BabelPointer("@wd", "Hypernym", "is-a", RelationGroup.HYPERNYM);
  public static final BabelPointer WIKIDATA_MERONYM = new BabelPointer("%wdm", "Part meronym", "part-of", RelationGroup.MERONYM);
  public static final BabelPointer WIBI_HYPONYM = new BabelPointer("~@w", "Hyponym", "has-kind", RelationGroup.HYPONYM, true);
  public static final BabelPointer WIKIDATA_HYPONYM_INSTANCE = new BabelPointer("~wd", "Hyponym", "has-kind", RelationGroup.HYPONYM);
  public static final BabelPointer WIKIDATA_HYPONYM = new BabelPointer("~wds", "Hyponym", "has-kind", RelationGroup.HYPONYM);
  public static final BabelPointer ANY_HYPERNYM = new BabelPointer("ahpe", "Any Hypernym", "is-a", RelationGroup.HYPERNYM);
  public static final BabelPointer ANY_MERONYM = new BabelPointer("am", "Any Meronym", "part-of", RelationGroup.MERONYM);
  public static final BabelPointer ANY_HOLONYM = new BabelPointer("aho", "Any Holonym", "has-part", RelationGroup.HOLONYM);
  public static final BabelPointer ANY_HYPONYM = new BabelPointer("ahpo", "Any Hyponym", "has-kind", RelationGroup.HYPONYM);

Now the pointer below refers to the avionics referring GPS bn:00040680n is a sub class of avionics bn:00007477n and generalizig GPS is-a Satellite navigation bn:00732900n and is-a system bn:00057078n

{
  "pointer": {
    "name": "subclass_of",
    "fSymbol": "wd21",
    "relationGroup": "HYPERNYM",
    "shortName": "subclass_of",
    "isAutomatic": false
  },
  "language": "MUL",
  "target": "bn:00007477n",
  "normalizedWeight": 0.0,
  "weight": 0.0
}

Possible relations but there could be more continue reading.

enter image description here

is-a: is used to incorporating something under a more general category.

Subclass

subclass of: A Subclass, is a "derived class", heir class, or child class of a superclass.

I have also found out there could be more types which are (equivalence (skos:exactMatch). I took the below image from here which discuss more on Manual Ontology Construction you can read it to get more insights.

And finally this thread discusses in depth about differentiating subtyping from subclasses, which might be help in your case.

For the sake of reference points that I used are is-a, model semantic relations

enter image description here

Vikram Palakurthi
  • 2,406
  • 1
  • 27
  • 30
  • Thanks for the detailed response. I'm sorry I didn't see this until after the bounty grace period was over. (I had more or less given up on getting any replies.) I'd like to still award you some points but I'm not sure how. – PurpleVermont Mar 29 '18 at 21:07
  • That's alright, bounty was not the source of research, I've learned a lot in a single day about this stuff. Cheer's, I guess you marked the answer as correct which should be good. – Vikram Palakurthi Mar 29 '18 at 21:10
  • Looks like the bounty got awarded anyhow, maybe because I marked it correct. I'm glad you got it. :) – PurpleVermont Apr 01 '18 at 04:18
  • Just checked I thought you initiated the bounty, thank you. – Vikram Palakurthi Apr 01 '18 at 10:09