User:So9q/LexemeEntitySuggester.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
* This script adds various entity suggestions on lexeme pages.
*
* Property suggestions on lexemes, senses and forms are defined below.
*
* Suggestions for P5402 (homograph lexeme), P5425 (Han character in this lexeme),
* P9531 (identifier shared by lexeme), P5238 (combines) and P5137 (item for
* this sense) are based on the current lemma.
*
* Suggestions for P5973 (synonym), P5974 (antonym), P6593 (hyperonym),
* P8471 (pertainym) are based on the text entered into the field. For speed
* reasons, this only returns results which are an exact match (including
* capitalisation).
*
* To use it, add the following line to your common.js:
* mw.loader.load("//www.wikidata.org/w/index.php?title=User:Nikki/LexemeEntitySuggester.js&action=raw&ctype=text/javascript");
*/
(function () {
"use strict";
var suggestions = {
"Q188": { // de, German
"lexemes": {
"mainsnak": [
{ id: "P8376", label: "Duden ID" },
{ id: "P9940", label: "DWDS lemma ID" },
{ id: "P9947", label: "WDG lemma ID" },
{ id: "P9384", label: "Adelung lemma ID" },
{ id: "P9385", label: "DWB lemma ID" },
{ id: "P9386", label: "DWB2 lemma ID" },
{ id: "P9387", label: "GWB lemma ID" },
{ id: "P9388", label: "Meyers lemma ID" },
{ id: "P9389", label: "RDWB1 lemma ID" },
{ id: "P9390", label: "Wander lemma ID" },
{ id: "P6597", label: "DFD ID", description: "namenforschung.net", lexcat: ["Q147276"] },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276", "Q102047"] }, // n, propn, suffix
{ id: "P5402", label: "homograph lexeme" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P5923", label: "creates lexeme type", lexcat: ["Q102047"] }, // suf
{ id: "P5401", label: "auxiliary verb", lexcat: ["Q24905"] }, // v
{ id: "P5911", label: "inflection class", lexcat: ["Q1084"] }, // n
{ id: "P7706", label: "nominalised form", description: "adj→n, v→n or num→n", lexcat: ["Q34698", "Q24905", "Q63116"] }, // adj, v, num
{ id: "P5713", label: "requires grammatical feature", lexcat: ["Q4833830"] }, // prep
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
"qualifiers": [
{ id: "P9531", label: "identifier shared with lexeme" },
{ id: "P585", label: "point in time" },
{ id: "P2868", label: "subject has role" }
]
},
"senses": {
"mainsnak": [
{ id: "P5137", label: "item for this sense" },
{ id: "P9970", label: "predicate for" },
{ id: "P10339", label: "semantic gender" },
{ id: "P6084", label: "location of sense usage" },
{ id: "P9488", label: "field of usage" },
{ id: "P6191", label: "language style" },
{ id: "P6271", label: "demonym of" },
{ id: "P5972", label: "translation" },
{ id: "P5973", label: "synonym" },
{ id: "P5974", label: "antonym" },
{ id: "P6593", label: "hyperonym" },
{ id: "P8471", label: "pertainym", description: "adj→n or adv→adj, e.g. lunar→moon, slowly→slow" },
]
},
"properties": {
"P5185": [ // grammatical gender
{ id: "Q499327", label: "masculine" },
{ id: "Q1775415", label: "feminine" },
{ id: "Q1775461", label: "neuter" },
],
"P5401": [ // auxiliary verb
{ id: "L4179", label: "haben" },
{ id: "L1761", label: "sein" },
],
"P5713": [ // requires grammatical feature
{ id: "Q131105", label: "nominative case" },
{ id: "Q146233", label: "genitive case" },
{ id: "Q145599", label: "dative case" },
{ id: "Q146078", label: "accusative case" },
],
"P5911": [ // inflection class
{ id: "Q104023380", label: "n-declension" },
{ id: "Q105099779", label: "n-declension with genitive s" },
{ id: "Q103383087", label: "adjectival declension" },
{ id: "Q105627457", label: "-/¨e" },
{ id: "Q105571268", label: "-/(e)n" },
{ id: "Q105628811", label: "-/s" },
{ id: "Q105683521", label: "-(e)s/-" },
{ id: "Q105658318", label: "-(e)s/s" },
],
"P5923": [ // creates lexeme type
{ id: "Q1084", label: "noun" },
{ id: "Q24905", label: "verb" },
{ id: "Q34698", label: "adjective" },
{ id: "Q380057", label: "adverb" },
],
"P11053": [ // grammatical person
{ id: "Q21714344", label: "first person" },
{ id: "Q51929049", label: "second person" },
{ id: "Q51929074", label: "third person" },
],
"P11054": [ // grammatical number
{ id: "Q110786", label: "singular" },
{ id: "Q146786", label: "plural" },
],
},
},
"Q42365": { // ang, Old English
"lexemes": {
"mainsnak": [
{ id: "P11575", label: "Bosworth-Toller's Anglo-Saxon Dictionary Online ID" },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276", "Q102047"] }, // n, propn, suffix
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
],
},
},
"Q33000": { // bfi, BSL
"forms": {
"mainsnak": [
{ id: "P10", label: "video" },
],
},
},
"Q143": { // eo, Esperanto
"lexemes": {
"mainsnak": [
{ id: "P8202", label: "Reta Voraro ID" },
{ id: "P8029", label: "PIV Online ID" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
"qualifiers": [
{ id: "P585", label: "point in time" },
]
},
},
"Q1860": { // en, English
"lexemes": {
"mainsnak": [
{ id: "P5275", label: "OED Online ID" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
},
"Q27175": { // fy, Western Frisian
"lexemes": {
"mainsnak": [
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] }, // n, propn
{ id: "P9158", label: "Wurdboek fan de Fryske taal GTB ID" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
],
},
},
"Q837985": { // gmh, Middle High German
"lexemes": {
"mainsnak": [
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] }, // n, propn
{ id: "P9377", label: "BMZ lemma ID" },
{ id: "P9378", label: "FindeB lemma ID" },
{ id: "P9379", label: "Lexer lemma ID" },
{ id: "P9380", label: "LexerN lemma ID" },
{ id: "P9358", label: "MWB lemma ID" },
{ id: "P9351", label: "MHDBDB lemma ID" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P5238", label: "combines" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
},
"Q35218": { // goh, Old High German
"lexemes": {
"mainsnak": [
{ id: "P9312", label: "AWB lemma ID" },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] }, // n, propn
{ id: "P5191", label: "derived from" },
{ id: "P5238", label: "combines" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
},
"Q5287": { // ja, Japanese
"lexemes": {
"mainsnak": [
{ id: "P6646", label: "JMdictDB ID" },
{ id: "P5191", label: "derived from" },
{ id: "P5425", label: "Han character in this lexeme" },
{ id: "P5238", label: "combines" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
"forms": {
"mainsnak": [
{ id: "P2125", label: "Revised Hepburn romanisation" },
{ id: "P2440", label: "transliteration" },
{ id: "P443", label: "pronunciation audio" },
{ id: "P898", label: "IPA transcription" },
],
"qualifiers": [
{ id: "P459", label: "determination method" },
],
},
},
"Q9176": { // ko, Korean
"lexemes": {
"mainsnak": [
{ id: "P11124", label: "Basic Korean Dictionary ID" },
{ id: "P11125", label: "Standard Korean Language Dictionary ID" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
"forms": {
"mainsnak": [
{ id: "P2001", label: "Revised Romanisation" },
{ id: "P1942", label: "McCune-Reischauer romanisation" },
{ id: "P443", label: "pronunciation audio" },
{ id: "P898", label: "IPA transcription" },
],
"qualifiers": [
{ id: "P5237", label: "pronunciation variety" },
],
},
},
"Q9051": { // lb, Luxembourgish
"lexemes": {
"mainsnak": [
{ id: "P9397", label: "LOD ID" },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] },
{ id: "P973", label: "described at URL", description: "lod.lu" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
},
"Q9246": { // mn, Mongolian
"lexemes": {
"mainsnak": [
{ id: "P11264", label: "mongoltoli.mn" },
{ id: "P11261", label: "toli.query.mn" },
{ id: "P11262", label: "toli.gov.mn" },
{ id: "P973", label: "described at URL", description: "dict.ac.mn" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
},
"Q33638": { // mnc, Manchu
"forms": {
"mainsnak": [
{ id: "P5139", label: "Möllendorff transliteration" },
{ id: "P443", label: "pronunciation audio" },
{ id: "P898", label: "IPA transcription" },
],
},
},
"Q9166": { // mt, Maltese
"lexemes": {
"mainsnak": [
{ id: "P5928", label: "Ġabra lexeme ID" },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
},
"Q25167": { // nb, Norwegian Bokmål
"lexemes": {
"mainsnak": [
{ id: "P5911", label: "bøyningsklasse" },
{ id: "P5238", label: "sammensatt av" },
{ id: "P5191", label: "har opphav i" },
{ id: "P7706", label: "substantivform" },
{ id: "P5831", label: "brukseksempel" },
{ id: "P5402", label: "homograf" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
"qualifiers": [
{ id: "P6072", label: "demonstrerer betydning" },
{ id: "P5830", label: "demonstrerer form" },
],
},
"senses": {
"mainsnak": [
{ id: "P5137", label: "element for betydning" },
{ id: "P9970", label: "predicate for" },
{ id: "P5713", label: "requires grammatical feature" },
{ id: "P9295", label: "transitivitet" },
{ id: "P6271", label: "demonym for" },
{ id: "P5974", label: "antonym" },
{ id: "P6593", label: "hyperonym" },
{ id: "P8471", label: "pertainym" },
{ id: "P5973", label: "synonym" },
]
},
"forms": {
"mainsnak": [
{ id: "P898", label: "IPA-transkripsjon" },
],
"qualifiers": [
{ id: "P5237", label: "uttalevariant" },
]
}
},
"Q14549": { // sco, Scots
"lexemes": {
"mainsnak": [
{ id: "P11347", label: "Scottish National Dictionary lexeme ID" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
}
},
"Q9027": { // sv, Swedish
"lexemes": {
"mainsnak": [
{ id: "P8478", label: "Svenska Akademiens Ordbok-ID" },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] }, // n, propn
{ id: "P5402", label: "homograph lexeme" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P5831", label: "usage example" },
{ id: "P7706", label: "nominalised form", description: "adj→n or v→n", lexcat: ["Q34698", "Q24905"] }, // adj, v
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
"qualifiers": [
{ id: "P585", label: "point in time" },
{ id: "P5830", label: "demonstrates form" },
{ id: "P6072", label: "demonstrates sense" },
{ id: "P1545", label: "series ordinal" },
{ id: "P5548", label: "derived from form" },
{ id: "P5980", label: "derived from sense" },
{ id: "P2868", label: "subject has role" }
]
},
"senses": {
"mainsnak": [
{ id: "P5137", label: "item for this sense" },
{ id: "P9970", label: "predicate for" },
{ id: "P6084", label: "location of sense usage" },
{ id: "P9488", label: "field of usage" },
{ id: "P6271", label: "demonym of" },
{ id: "P5972", label: "translation" },
{ id: "P5973", label: "synonym" },
{ id: "P5974", label: "antonym" },
{ id: "P6593", label: "hyperonym" },
{ id: "P8471", label: "pertainym", description: "adj→n or adv→adj, e.g. lunar→moon, slowly→slow" },
]
},
},
"Q9217": { // th, Thai
"forms": {
"mainsnak": [
{ id: "P10694", label: "RTGS" },
{ id: "P443", label: "pronunciation audio" },
{ id: "P898", label: "IPA transcription" },
],
"qualifiers": [
{ id: "P5237", label: "pronunciation variety" },
],
},
},
"Q8641": { // yi, Yiddish
"lexemes": {
"mainsnak": [
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276"] },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
"qualifiers": [
{ id: "P5237", label: "pronunciation variety" },
],
},
},
"Q9186": { // yue, Cantonese
"lexemes": {
"mainsnak": [
{ id: "P9992", label: "CantoDict word ID" },
{ id: "P9993", label: "CantoDict character ID" },
{ id: "P973", label: "described at URL" },
{ id: "P5425", label: "Han character in this lexeme" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
"forms": {
"mainsnak": [
{ id: "P9311", label: "Jyutping" },
{ id: "P9313", label: "Yale" },
],
"qualifiers": [
{ id: "P5237", label: "pronunciation variety" },
],
},
},
"Q9192": { // zh, Mandarin
"lexemes": {
"mainsnak": [
{ id: "P5425", label: "Han character in this lexeme" },
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801"] }, // personal pronoun
],
},
"forms": {
"mainsnak": [
{ id: "P1721", label: "pinyin transliteration" },
{ id: "P443", label: "pronunciation audio" },
{ id: "P898", label: "IPA transcription" },
],
"qualifiers": [
{ id: "P5237", label: "pronunciation variety" },
],
},
},
"*": { // All other languages
"lexemes": {
"mainsnak": [
{ id: "P5238", label: "combines" },
{ id: "P5191", label: "derived from" },
{ id: "P973", label: "described at URL" },
{ id: "P1343", label: "described by source" },
{ id: "P5185", label: "grammatical gender", lexcat: ["Q1084", "Q147276", "Q102047"] }, // n, propn, suffix
{ id: "P11053", label: "grammatical person", lexcat: ["Q468801", "Q36224"] }, // personal pronoun
{ id: "P11054", label: "grammatical number", lexcat: ["Q468801", "Q36224"] }, // personal pronoun
{ id: "P1552", label: "has quality", lexcat: ["Q468801"] }, // personal pronoun
],
"references": [
{ id: "P854", label: "reference URL" },
{ id: "P813", label: "retrieved" },
{ id: "P248", label: "stated in" },
],
},
"senses": {
"mainsnak": [
{ id: "P5137", label: "item for this sense" },
{ id: "P9970", label: "predicate for" },
{ id: "P6084", label: "location of sense usage" },
{ id: "P9488", label: "field of usage" },
{ id: "P6191", label: "language style" },
{ id: "P6271", label: "demonym of" },
{ id: "P10339", label: "semantic gender" },
{ id: "P5972", label: "translation" },
{ id: "P5973", label: "synonym" },
{ id: "P5974", label: "antonym" },
{ id: "P6593", label: "hyperonym" },
{ id: "P8471", label: "pertainym", description: "adj→n or adv→adj, e.g. lunar→moon, slowly→slow" },
],
"references": [
{ id: "P854", label: "reference URL" },
{ id: "P813", label: "retrieved" },
{ id: "P248", label: "stated in" },
],
},
"forms": {
"mainsnak": [
{ id: "P443", label: "pronunciation audio" },
{ id: "P898", label: "IPA transcription" },
{ id: "P5279", label: "hyphenation" },
],
"qualifiers": [
{ id: "P5237", label: "pronunciation variety" },
],
"references": [
{ id: "P854", label: "reference URL" },
{ id: "P813", label: "retrieved" },
{ id: "P248", label: "stated in" },
],
},
"properties": {
"P11053": [ // grammatical person
{ id: "Q21714344", label: "first person" },
{ id: "Q51929049", label: "second person" },
{ id: "Q51929074", label: "third person" },
],
"P11054": [ // grammatical number
{ id: "Q110786", label: "singular" },
{ id: "Q146786", label: "plural" },
],
"P1552": [ // has quality
{ id: "Q75365274", label: "inclusive" },
{ id: "Q25416585", label: "exclusive" },
{ id: "Q51927507", label: "animate" },
{ id: "Q51927539", label: "inanimate" },
],
},
},
};
// copy any missing lexeme/sense/form sections for specific languages from the all language section
$.each(suggestions["*"], function (k1, v1) {
$.each(suggestions, function (k2, v2) {
if (!suggestions[k2][k1])
suggestions[k2][k1] = v1;
});
});
let cache = {};
async function suggestionsFromSparqlQuery (query) {
var results = [];
await $.post("https://query.wikidata.org/sparql?format=json", { query: query }, function (res) {
if (!res.results.bindings.length)
return;
$.each(res.results.bindings, function () {
var id = this.l.value.replace(/.*\//, "");
let obj = { "id": id, "url": this.l.value, "label": this.lemma.value + " (" + id + ")" };
if (this.hasOwnProperty("desc"))
obj.description = this.desc.value;
else if (this.hasOwnProperty("lexcatLabel")) {
var descs = [];
descs.push(this.lexcatLabel.value);
if (this.hasOwnProperty("createsLabel"))
descs.push(this.createsLabel.value);
if (this.hasOwnProperty("genderLabel"))
descs.push(this.genderLabel.value);
if (this.hasOwnProperty("inflectionLabel"))
descs.push(this.inflectionLabel.value);
obj.description = descs.join(", ");
}
results.push(obj);
});
});
return results;
}
function addLexemeSuggestions (e) {
if (!e.language) return; // only supported on lexemes
var key = suggestions.hasOwnProperty(e.language) ? e.language : "*";
$.each(suggestions[key], function (k1, v1) { $.each(v1, function (k2, v2) { $.each(v2, function (i, v) {
if (v.hasOwnProperty("lexcat") && !v.lexcat.includes(e.lexicalCategory)) {
delete v2[i];
return;
}
v["url"] = "//www.wikidata.org/entity/" + v.id;
}) }) });
mw.hook("wikibase.entityselector.search").add(function (data, addPromise) {
var entitycontext = "lexemes";
$(data.element[0]).closest(".wikibase-lexeme-forms-section, .wikibase-lexeme-senses-section").each(function () {
entitycontext = this.classList.value.replace(/^wikibase-lexeme-(forms|senses)-section$/, "$1");
});
var statementcontext = "";
$(data.element[0]).closest(".wikibase-statementview-mainsnak, .wikibase-statementview-qualifiers, .wikibase-statementview-references").each(function () {
statementcontext = this.classList.value.replace(/.*-/, "");
});
// entering a value not a property
var propid = "";
if (data.element[0].classList.contains("valueview-input")) {
propid = $(data.element[0]).closest(".wikibase-snakview.wb-edit").data("snakview").propertyId();
}
// see [[User:Nikki/ExMusica.js]]
let langs = [...new Set([
mw.language.getFallbackLanguageChain().shift(),
mw.language.getFallbackLanguageChain().slice(1, -1),
mw.config.get("wgULSBabelLanguages") || [],
mw.config.get("wgULSAcceptLanguageList") || [],
Object.keys(e.lemmas),
"en"
].flat().map(function (x) { return x.toLowerCase(); }))].join(",");
if (
propid == "P5973" // synonym
|| propid == "P5974" // antonym
|| propid == "P6593" // hyperonym
|| propid == "P8471" // pertainym
) {
let lemma = data.term.trim();
if (!lemma)
return; // empty string
let lang = Object.keys(e.lemmas)[0];
let query = `
select (?s as ?l) ("${lemma}"@${lang} as ?lemma) (?gloss as ?desc) {
?lex dct:language wd:${e.language};
wikibase:lemma "${lemma}"@${lang};
ontolex:sense ?s.
service wikibase:label {
bd:serviceParam wikibase:language "${langs}".
?s skos:definition ?gloss.
}
filter (?lex != wd:${e.id}).
}
`;
return addPromise(suggestionsFromSparqlQuery(query));
} else if (
propid == "P5972" // translation
) {
let lemma = data.term.trim();
if (!lemma)
return; // empty string
let lang = Object.keys(e.lemmas)[0];
let query = `
select (?s as ?l) (strlang(concat(?lem, " (", ?langLabel, ", ", ?lexcatLabel, ")"), lang(?lem)) as ?lemma) (?gloss as ?desc) {
service wikibase:mwapi {
bd:serviceParam wikibase:endpoint "www.wikidata.org";
wikibase:api "EntitySearch";
mwapi:search "${lemma}";
mwapi:type "lexeme";
mwapi:language "en".
?lex wikibase:apiOutputItem mwapi:item.
}
?lex wikibase:lemma ?lem;
wikibase:lexicalCategory ?lexcat;
ontolex:sense ?s;
dct:language ?lang filter (?lang != wd:${e.language}).
filter (?lex != wd:${e.id}).
service wikibase:label {
bd:serviceParam wikibase:language "${langs}".
?s skos:definition ?gloss.
?lexcat rdfs:label ?lexcatLabel.
?lang rdfs:label ?langLabel.
}
} order by strlen(?lem) limit 10
`;
return addPromise(suggestionsFromSparqlQuery(query));
} else if (data.term.trim()) {
// only show default suggestions if there is no text in the field already
return;
}
if (propid == "P5402") { // homograph lexeme
var lemmas = [];
for (var lang of Object.keys(e.lemmas)) {
lemmas.push(`"${e.lemmas[lang].value}"@${lang}`);
}
var query = `select * { values ?lemma { ${lemmas.join(" ")} } ?l wikibase:lemma ?lemma filter (?l != wd:${e.id}) }`;
addPromise(suggestionsFromSparqlQuery(query));
} else if (propid == "P5425") { // Han character in this lexeme
let lemmas = [];
for (const lang of Object.keys(e.lemmas)) {
const chars = e.lemmas[lang].value.split("").map((c, i) => `("${c}" ${i})`).join(" ");
lemmas.push(chars);
}
const query = `select distinct ?l (strlang(?char, "und") as ?lemma) { values (?char ?index) { ${lemmas.join(" ")} } ?l wdt:P487 ?char; wdt:P31 wd:Q29654788. minus { wd:${e.id} wdt:P5425 ?l } } order by ?index`;
addPromise(suggestionsFromSparqlQuery(query));
} else if (propid == "P9531") { // identifier shared with lexeme
var $input = $(data.element[0]).closest(".wikibase-statementview").find(".wikibase-statementview-mainsnak .valueview-input");
var identifier = $input.val();
var prop = $input.closest(".wikibase-snakview").data("snakview").propertyId();
var query = `select * { ?l wdt:${prop} "${identifier}"; wikibase:lemma ?lemma filter (?l != wd:${e.id}). minus { ?l p:${prop} [ ps:${prop} "${identifier}"; pq:${prop} wd:${e.id} ] } }`;
addPromise(suggestionsFromSparqlQuery(query));
} else if (propid == "P5137") { // item for this sense
let lemmas = [];
for (let lang of Object.keys(e.lemmas)) {
lemmas.push(`"${e.lemmas[lang].value}"@${lang}`);
}
let query = `
select (?item as ?l) (?label as ?lemma) ?desc {
values ?lem { ${lemmas.join(" ")} }
?item rdfs:label|skos:altLabel ?lem.
minus { ?item wdt:P31 wd:Q4167410 }
minus { ?item wdt:P31 wd:Q5 }
?item wikibase:sitelinks ?sitelinks;
wikibase:statements ?statements.
service wikibase:label {
bd:serviceParam wikibase:language "${langs}".
?item rdfs:label ?label.
?item schema:description ?desc.
}
} order by desc(?sitelinks+?statements) ?label
`;
addPromise(suggestionsFromSparqlQuery(query));
} else if (propid == "P6072") { // demonstrates sense
let lang = Object.keys(e.lemmas)[0];
let lemma = e.lemmas[lang].value;
let query = `
select (?s as ?l) ("${lemma}"@${lang} as ?lemma) (?gloss as ?desc) {
wd:${e.id} ontolex:sense ?s.
service wikibase:label {
bd:serviceParam wikibase:language "${langs}".
?s skos:definition ?gloss.
}
} limit 10
`;
addPromise(suggestionsFromSparqlQuery(query));
} else if (propid == "P5830") { // demonstrates form
let lang = Object.keys(e.lemmas)[0];
let lemma = e.lemmas[lang].value;
let query = `
select (?f as ?l) (?r as ?lemma) (group_concat(?featLabel; separator=", ") as ?desc) {
wd:${e.id} ontolex:lexicalForm ?f.
?f ontolex:representation ?r.
optional { ?f wikibase:grammaticalFeature ?feat }
service wikibase:label {
bd:serviceParam wikibase:language "${langs}".
?feat rdfs:label ?featLabel.
}
} group by ?f ?r limit 10
`;
addPromise(suggestionsFromSparqlQuery(query));
} else if (propid == "P5238") { // combines
// "combines" is expected to be added multiple times.
// The query will be the same each time so unless someone
// has added a word since the page was loaded, the results
// will be the same each time.
// Therefore to make it faster, it caches the results and in
// the case that a word was added since the page was loaded,
// people will have to refresh the page or type the word
// manually.
if (cache.hasOwnProperty("P5238"))
return addPromise(cache["P5238"]);
var lemmas = [];
for (var lang of Object.keys(e.lemmas)) {
lemmas.push(`"${e.lemmas[lang].value}"@${lang}`);
}
var query = `
select distinct ?l (group_concat(distinct ?lemmas; separator="/") as ?lemma) ?lexcatLabel ?genderLabel ?inflectionLabel ?createsLabel {
values ?targetlemma { ${lemmas.join(" ")} }
?l dct:language wd:${e.language};
wikibase:lemma ?lem.
filter(contains(lcase(?targetlemma), replace(lcase(?lem), "(^-|-$)", ""))).
filter (?l != wd:${e.id}).
?l wikibase:lexicalCategory ?lexcat.
filter (?lexcat not in (wd:Q102786,wd:Q9788)) # remove abbreviations/letters
minus { ?l wdt:P31 wd:Q102786 } # remove abbreviations
optional { ?l wdt:P5185 ?gender }
optional { ?l wdt:P5911 ?inflection }
optional { ?l wdt:P5923 ?creates }
?l wikibase:lemma ?lemmas.
service wikibase:label { bd:serviceParam wikibase:language "${langs}" }
} group by ?l ?lemma ?lexcatLabel ?genderLabel ?inflectionLabel ?createsLabel
order by desc(strlen(?lemma)) strstarts(?lemma, "-") strends(?lemma, "-") ?lemma limit 10
`;
let results = suggestionsFromSparqlQuery(query);
cache["P5238"] = results;
addPromise(results);
} else if (propid && suggestions[key].hasOwnProperty("properties") && suggestions[key].properties.hasOwnProperty(propid)) {
addPromise(suggestions[key].properties[propid]);
} else if (
data.element[0].parentNode.classList.contains("wikibase-snakview-property")
&& suggestions[key].hasOwnProperty(entitycontext)
&& suggestions[key][entitycontext].hasOwnProperty(statementcontext)
) {
addPromise(suggestions[key][entitycontext][statementcontext]);
}
});
}
mw.hook("wikibase.entityPage.entityLoaded").add(addLexemeSuggestions);
})();