Поиск идентификаторов викиданных (свойства и лексемы) - PullRequest
0 голосов
/ 23 мая 2019

Моя проблема : я пишу программу NLP на python, и мне нужно получить идентификатор сущности для свойств и лексем.Итак, что я в основном хочу, например, если входными данными является слово / свойство «отец», я хочу, чтобы возвращаемое значение было «P22» (номер свойства для отца).Я уже знаю некоторые способы получения Q-номера (см. Ниже).

from requests import get
def get_qnumber(wikiarticle, wikisite):
    resp = get('https://www.wikidata.org/w/api.php', {
        'action': 'wbgetentities',
        'titles': wikiarticle,
        'sites': wikisite,
        'props': '',
        'format': 'json'
    }).json()
    return list(resp['entities'])[0]

print(get_qnumber(wikiarticle="Andromeda Galaxy", wikisite="enwiki"))

И я подумал, что получение P и L-чисел будет выглядеть примерно так, но поиск лексемы и номера свойства кажетсянамного сложнее.

Что я пробовал : Самая близкая вещь, которую я нашел, - это ручной поиск идентификационных номеров с помощью https://www.wikidata.org/wiki/Special:Search и добавление «P:» и «L: "в строке поиска.

Я также нашел некоторый код для SPARQL, но он был медленным, и я не знаю, как улучшить поиск, чтобы исключить несвязанные результаты поиска.

query = """
SELECT ?item
WHERE
{
  ?item rdfs:label "father"@en
}
"""

Я полный нуб по этому поводу и не нашел никакой информации Google.Так что я подхожу к этой вещи совершенно неправильно или я упускаю что-то действительно очевидное?

1 Ответ

1 голос
/ 23 мая 2019

Используйте action=wbsearchentities с type=property или type=lexeme:

import requests
params = dict (
        action='wbsearchentities',
        format='json',
        language='en',
        uselang='en',
        type='property',
        search='father'
        )

response = requests.get('https://www.wikidata.org/w/api.php?', params).json() 
print(response.get('search')[0]['id'])

repl.it

...