WDscholia / scholia

Wikidata-based scholarly profiles
https://scholia.toolforge.org
Other
220 stars 78 forks source link

Internationnalize text-to-topics #1667

Open fnielsen opened 3 years ago

fnielsen commented 3 years ago

Internationalization of text-to-topics. It could take advantage of the Wikidata lexemes, e.g., we can query for Danish words that are linked to topic items:

SELECT ?lexeme ?lemma ?representation {
  ?lexeme dct:language wd:Q9035 ;
          wikibase:lemma ?lemma ;
          ontolex:sense ?sense ; 
          ontolex:lexicalForm ?form .
  ?form ontolex:representation ?representation .
  ?sense wdt:P5137 ?item . 
  FILTER EXISTS { [] wdt:P921 ?item . }
}

This request currently results in, e.g., 8.988 representations (in around 10 seconds), 23,594 for Swedish.

fnielsen commented 3 years ago
import re
import requests
import collections

query = """
SELECT ?lexeme ?item ?representation {
  ?lexeme dct:language wd:Q9035 ;
          # wikibase:lemma ?lemma ;
          ontolex:sense / wdt:P5137 ?item ;
          ontolex:lexicalForm / ontolex:representation ?representation .
  FILTER EXISTS { [] wdt:P921 ?item . } 

  # Time out:
  # FILTER EXISTS { ?item ^wdt:P921 / wdt:P31 wd:Q13442814 . }
}
"""

response = requests.get("https://query.wikidata.org/sparql",
            params={"query": query, 'format': 'json'},
            headers={'User-Agent': 'Scholia'})

representation_to_qs = collections.defaultdict(list)
for row in response.json()['results']['bindings']:
    representation = row['representation']['value']
    lexeme = row['lexeme']['value'][31:]
    q = row['item']['value'][31:]
    representation_to_qs[representation].append(q)

pattern = re.compile(r"\b" + r"\b|\b".join(sorted(representation_to_qs, key=len, reverse=True)) + r"\b")

text = """
Blåbjerg Biogas a.m.b.a. har ansøgt om udvidelse af biogasanlægget beliggende på Præstbølvej 
11, 6830 Nørre Nebel i Varde Kommune cirka 1 km øst for Nørre Nebel. Biogasanlægget er et fælles biogasanlæg, der er opført i 1996 og som løbende er blevet fornyet og udbygget, senest med 
etableringen af en ny 5000 m3 reaktortank i 2016. Biogasanlægget afsætter i dag biogassen til naboen Nørre Nebel Fjernvarme, samt, via en ca. 9 km gasledning, til hjemmeværnsskolen Nyminde-
gablejren og feriecenteret Landal SeaWest.
"""

matches = pattern.findall(text)
qs = [q  for match in matches for q in representation_to_qs[match]]

"https://scholia.toolforge.org/topics/" + ",".join(qs)
fnielsen commented 3 years ago
import re
import requests
import collections

query = """
SELECT ?lexeme ?item ?representation {
  ?lexeme dct:language wd:Q9035 ;
          wikibase:lexicalCategory wd:Q1084 ; 
          ontolex:sense / wdt:P5137 ?item ;
          ontolex:lexicalForm / ontolex:representation ?representation .
  FILTER EXISTS { [] wdt:P921 ?item . } 

  # Time out:
  # FILTER EXISTS { ?item ^wdt:P921 / wdt:P31 wd:Q13442814 . }
}
"""

response = requests.get("https://query.wikidata.org/sparql",
            params={"query": query, 'format': 'json'},
            headers={'User-Agent': 'Scholia'})

representation_to_qs = collections.defaultdict(list)
for row in response.json()['results']['bindings']:
    representation = row['representation']['value']
    lexeme = row['lexeme']['value'][31:]
    q = row['item']['value'][31:]
    representation_to_qs[representation].append(q)

pattern = re.compile(r"\b" + r"\b|\b".join(sorted(representation_to_qs, key=len, reverse=True)) + r"\b")

text = """
Blåbjerg Biogas a.m.b.a. har ansøgt om udvidelse af biogasanlægget beliggende på Præstbølvej 
11, 6830 Nørre Nebel i Varde Kommune cirka 1 km øst for Nørre Nebel. Biogasanlægget er et fælles biogasanlæg, der er opført i 1996 og som løbende er blevet fornyet og udbygget, senest med 
etableringen af en ny 5000 m3 reaktortank i 2016. Biogasanlægget afsætter i dag biogassen til naboen Nørre Nebel Fjernvarme, samt, via en ca. 9 km gasledning, til hjemmeværnsskolen Nyminde-
gablejren og feriecenteret Landal SeaWest.
"""

matches = pattern.findall(text)
qs = list(set([q  for match in matches for q in representation_to_qs[match]]))

"https://scholia.toolforge.org/topics/" + ",".join(qs)