Module:Wikidata lexicographical data

Hello, you have come here looking for the meaning of the word Module:Wikidata lexicographical data. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:Wikidata lexicographical data, but we will also tell you about its etymology, its characteristics and you will know how to say Module:Wikidata lexicographical data in singular and plural. Everything you need to know about the word Module:Wikidata lexicographical data you have here. The definition of the word Module:Wikidata lexicographical data will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:Wikidata lexicographical data, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.


local p = {}
local i18n = require('Module:Wikidata lexicographical data/i18n')
local references = require('Module:Wikidata reference format')
local getArgs = require('Module:Arguments').getArgs

base_lang_code_labels = 'en' -- আইটেম লেবেল/বিবরণ/উপনাম, শব্দার্থের বিবরণ
base_lang_code_forms = 'en' -- লেক্সিম লেমা, শব্দরূপের বানান
base_lang_wiki = 'enwiki' -- উইকিপিডিয়া সংযোগ

formatter_urls = { -- https://w.wiki/ELuT
    -- বহুভাষিক
     = 'https://ids.clld.org/units/$1',
     = 'https://diacl.uni-frankfurt.de/Lexeme/Details/$1',
     = 'https://www.termania.net/slovarji/presisov-vecjezicni-slovar/$1/_',
    -- Q11051
     = 'http://udb.gov.pk/result_details.php?word=$1',
     = 'https://www.cfilt.iitb.ac.in/hindishabdamitra/class/CBSE/1/1/$1/?page=1',
    -- Q56356571
     = 'https://dehkhoda.ut.ac.ir/fa/dictionary/detail/$1',
     = 'https://vazhaju.tj/word/_/$1',
     = 'https://qamosona.com/G3/index.php/term/57,$1.xhtml',
     = 'https://farhang.ru/lexeme/$1.html',
    -- Q13955
     = 'https://ontology.birzeit.edu/lemma/$1',
     = 'https://ontology.birzeit.edu/wordform/$1',
     = 'https://corpus.quran.com/qurandictionary.jsp?q=$1',
     = ' https://ontology.birzeit.edu/lexicalconcept/$1',
     = 'http://arabiclexicon.hawramani.com/?p=$1',
    -- Q9072
     = 'https://sonaveeb.ee/worddetails/unif/$1',
     = 'https://www.letonika.lv/groups/default.aspx?cid=$1&r=10611062',
    -- Q150
     = 'https://www.larousse.fr/dictionnaires/francais/_/$1',
     = 'https://www.dictionnaire-academie.fr/article/A1$1',
     = 'https://www.dictionnaire-academie.fr/article/A2$1',
     = 'https://www.dictionnaire-academie.fr/article/A3$1',
     = 'https://www.dictionnaire-academie.fr/article/A4$1',
     = 'https://www.dictionnaire-academie.fr/article/A5$1',
     = 'https://www.dictionnaire-academie.fr/article/A6$1',
     = 'https://www.dictionnaire-academie.fr/article/A7$1',
     = 'https://www.dictionnaire-academie.fr/article/A8$1',
     = 'https://www.dictionnaire-academie.fr/article/A9$1',
    -- Q58635
     = 'https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fpunjabipedia.org%2Ftopic.aspx%3Ftxt%3D%251&exp=%28.%2A%29&id=$1',
     = 'https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fwww.srigranth.org%2Fservlet%2Fgurbani.dictionary%3FParam%3D%251&exp=%28.%2A%29&id=$1',
    -- Q1860
     = 'http://www.oed.com/view/Entry/$1',
     = 'https://doi.org/10.1093/OED/$1',
     = 'https://www.oxfordreference.com/display/10.1093/acref/9780199571123.001.0001/m_en_gb$1',
     = 'https://www.oxfordreference.com/display/10.1093/acref/9780195392883.001.0001/m_en_us$1',
     = 'https://www.oxfordreference.com/display/10.1093/acref/9780195418163.001.0001/m_en_ca$1',
     = 'https://www.oxfordreference.com/display/10.1093/acref/9780195517965.001.0001/m-en_au-msdict-00001-$1',
     = 'https://www.oxfordreference.com/display/10.1093/acref/9780195584516.001.0001/m-en_nz-msdict-00001-$1',
     = 'https://greensdictofslang.com/entry/$1',
     = 'https://www.daredictionary.com/view/dare/$1',
     = 'https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fwww.merriam-webster.com%2Fdictionary%2F%251&exp=%28.%2A%29&id=$1',
     = 'https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fwww.britannica.com%2Fdictionary%2F%251&exp=%28.%2A%29&id=$1',
     = 'https://ahdictionary.com/word/search.html?id=$1',
    -- Q188
     = 'https://www.owid.de/artikel/$1',
     = 'https://www.owid.de/artikel/$1',
     = 'https://www.owid.de/artikel/$1',
     = 'https://www.owid.de/artikel/$1',
     = 'https://www.owid.de/artikel/$1',
     = 'https://www.owid.de/artikel/$1',
     = 'https://www.duden.de/rechtschreibung/$1',
     = 'https://www.woerterbuchnetz.de/Adelung?lemid=$1',
     = 'https://www.woerterbuchnetz.de/DWB?lemid=$1',
     = 'https://www.woerterbuchnetz.de/DWB2?lemid=$1',
     = 'https://www.woerterbuchnetz.de/GWB?lemid=$1',
     = 'https://www.woerterbuchnetz.de/Meyers?lemid=$1',
     = 'https://www.woerterbuchnetz.de/RDWB1?lemid=$1',
     = 'https://www.woerterbuchnetz.de/Wander?lemid=$1',
     = 'https://www.dwds.de/wb/$1',
}

-- Return the first form of the lexeme which has exactly the given grammatical feature.
local function formWithSingleGrammaticalFeature( lexeme, item_id )
    for i, form in pairs( lexeme:getForms() ) do
        local grammaticalFeatures = form:getGrammaticalFeatures()
        if #grammaticalFeatures == 1 and grammaticalFeatures == item_id then
            return form
        end
    end
    return nil
end

-- Return the representation of the form in the given language code,
-- or the first representation otherwise.
local function representationInLanguage( form, language_code )
    for i, representation in pairs( form:getRepresentations() ) do
        if representation == language_code then
            return representation
        end
    end
    return form:getRepresentations()
end

local function getArticleLinkTemplate(frame, stmt_value)
    template = ''
    stmt_item = mw.wikibase.getEntity(stmt_value)
    if stmt_item:getSitelink(base_lang_wiki) ~= nil then
        template = frame:expandTemplate{
            title=i18n,
            args={stmt_item:getSitelink(base_lang_wiki)}
        }
    end
    return template
end

local function getArticleLinks ( frame, sense )
    article_links = ''
    for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম
        stmt_value = stmt.mainsnak.datavalue.value.id
        article_links = article_links .. getArticleLinkTemplate(frame, stmt_value)
    end
    for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয়
        stmt_value = stmt.mainsnak.datavalue.value.id
        article_links = article_links .. getArticleLinkTemplate(frame, stmt_value)
    end
    return article_links
end

local function getExternalLinks ( lexeme )
    local external_links = {}
    for property_id, formatter_url in pairs(formatter_urls) do
        for i, stmt in ipairs(lexeme:getAllStatements(property_id)) do
            property_source = mw.wikibase.getBestStatements(property_id, 'P9073') -- প্রযোজ্য 'এই উৎসে বিবৃত' মান
            if next(property_source) ~= nil then
                source_name = mw.wikibase.getLabel(property_source.mainsnak.datavalue.value.id)
                if source_name == nil then
                    source_name = property_source.mainsnak.datavalue.value.id
                end
            else
                source_name = mw.wikibase.getLabel(property_id)
                if source_name == nil then
                    source_name = property_id
                end
            end
            formatted_link = mw.ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value)
            new_link = '* '
            table.insert(external_links, new_link)
        end
    end
    return table.concat(external_links, '\n')
end

local function termSpan( term )
    local text = term
    local lang = term
    local dir = mw.language.new( lang ):getDir()
    local span = mw.html.create( 'span' )
    span:attr( 'lang', lang )
        :attr( 'dir', dir )
        :wikitext( text )
    return tostring( span )
end

local function termLink( term )
    local text = term
    local lang = term
    local dir = mw.language.new( lang ):getDir()
    local span = mw.html.create( 'span' )
    span:attr( 'lang', lang )
        :attr( 'dir', dir )
        :wikitext( ']' )
    return tostring( span )
end

function getLemmata( current_lexeme )
    lemma_string = ''
    for i, rep in pairs(current_lexeme:getLemmas()) do
        if lemma_string == '' then
            lemma_string = termSpan(rep)
        else
            lemma_string = lemma_string .. '/' .. termSpan(rep)
        end
    end
    return lemma_string
end

function getLinkedLemmata( current_lexeme )
    lemma_string = ''
    for i, rep in pairs(current_lexeme:getLemmas()) do
        if lemma_string == '' then
            lemma_string = termLink(rep)
        else
            lemma_string = lemma_string .. '/' .. termLink(rep)
        end
    end
    return lemma_string
end

function getExamples( current_lexeme, sense_id )
    examples = mw.html.create('dl')
    for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ
        if stmt.qualifiers.datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ
            example_text = stmt.mainsnak.datavalue.value.text
            example_lang = stmt.mainsnak.datavalue.value.language
            example_form = mw.wikibase.getEntity(stmt.qualifiers.datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ
            example_form_str = example_form:getRepresentation(base_lang_code_forms)
            if example_form_str == nil then
                example_form_str = example_form:getRepresentations()
            end
            example_text = mw.ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
            example_str = termSpan({example_text, example_lang})
            local reference_text = ''
            for j, reference in pairs(stmt.references) do
                reference_text = reference_text .. '\n\n' .. references.format(reference)
            end
            examples:tag('dd'):wikitext("''" .. example_str .. "''"):done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
        end
    end
    for i, stmt in pairs(mw.wikibase.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ
            example_text = stmt.mainsnak.datavalue.value.text
            example_lang = stmt.mainsnak.datavalue.value.language
            example_form = mw.wikibase.getEntity(stmt.qualifiers.datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ
            example_form_str = example_form:getRepresentation(base_lang_code_forms)
            if example_form_str == nil then
                example_form_str = example_form:getRepresentations()
            end
            example_text = mw.ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''")
            example_str = termSpan({example_text, example_lang})
            local reference_text = ''
            for j, reference in pairs(stmt.references) do
                reference_text = reference_text .. '\n\n' .. references.format(reference)
            end
            examples:tag('dd'):wikitext("''" .. example_str .. "''"):done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text)
    end
    return tostring(examples)
end

function getLanguageForCategories ( frame, lang_id )
    local current_page_title = mw.title.getCurrentTitle().text
    -- বিশেষ ভাষার জন্য
    if lang_id == 'Q11051' and mw.ustring.find( current_page_title, '' ) ~= nil then -- U+0600 - U+06FF
        lang_id = 'Q11051ur'
    elseif lang_id == 'Q11051' and mw.ustring.find( current_page_title, '' ) ~= nil then -- U+0900 - U+097F
        lang_id = 'Q11051hi'
    end
    return lang_id
end

function getCategory ( frame, current_lexeme )
    local lang_id = current_lexeme:getLanguage()
    local cat_id = current_lexeme:getLexicalCategory()
    local cat_text = mw.wikibase.getLabelByLang( cat_id, base_lang_code_labels )

    lang_id = getLanguageForCategories(frame , lang_id)

    if i18n ~= nil then
        if i18n ~= nil then
            cat_text = cat_text .. ' .. ']]'
        end
    end
    return cat_text
end

local createicon = function(langcode, entityID, propertyID)
	langcode = langcode or ""
    propertyID = propertyID or ""
	local icon = "&nbsp;<span class='penicon autoconfirmed-show'>[["
	-- "&nbsp;<span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge
	.. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt="
	.. i18n
	.. "|link=https://www.wikidata.org/entity/" .. entityID
	if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end
	if propertyID ~= "" then icon = icon .. "#" .. propertyID end
	icon = icon .. "|" .. i18n .. "]]</span>"
	return icon
end

function getMeanings ( frame, args, current_lexeme )
    if #current_lexeme:getSenses() == 0 then
        return createicon(base_lang_code_labels, current_lexeme:getId()) .. frame:expandTemplate{
            title=i18n,
            args={'und'}
        }
    end
    meanings = mw.html.create( 'ol' )

    for i, sense in pairs(current_lexeme:getSenses()) do
        local gloss_text_parts = {}
        local main_gloss_text = frame:expandTemplate{
            title=i18n,
            args={sense:getId()}
        }

        local specifiers = {}
        for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত
            for i, stmt in pairs(sense:getAllStatements(property_id)) do
                stmt_value = stmt.mainsnak.datavalue.value.id
                table.insert(specifiers, mw.wikibase.getLabel(stmt_value))
            end
        end
        if #specifiers > 0 then
            main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') "
        end

        if sense:getGloss( base_lang_code_labels ) ~= nil then
            main_gloss_text = main_gloss_text .. sense:getGloss( base_lang_code_labels)
        else
            local other_gloss = nil
            for i, fallback_lang in ipairs(mw.language.getFallbacksFor( base_lang_code_labels )) do
                if sense:getGloss( fallback_lang ) ~= nil then
                    other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang )
                end
            end
            if other_gloss_lang == '' then
                local glosses = sense:getGlosses()
                for j, gloss in pairs(glosses) do
                    other_gloss_text, other_gloss_lang = gloss
                    break
                end
            end
            main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw.language.fetchLanguageName(other_gloss_lang, base_lang_code_labels) .. "</em></sup>"
        end
        table.insert(gloss_text_parts, main_gloss_text .. createicon(base_lang_code_labels, sense:getId()))

        for i, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি
            gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language})
            if stmt.references ~= nil then
                gloss_quote = '"' .. gloss_quote .. '" ' .. references.format ( stmt.references )
            end
            table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote))
        end

        for i, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস
            -- TODO: do away with making fake reference objects
            fake_reference = { = stmt.id,  = stmt.qualifiers }
            fake_reference.snaks = {  = stmt.mainsnak }
            table.insert(gloss_text_parts, frame:extensionTag('ref', references.format ( fake_reference )))
        end

        first_sense_image = ''
        sense_images = sense:getAllStatements('P18')
        if next(sense_images) ~= nil then
            first_sense_image = sense_images.mainsnak.datavalue.value
        end
        if first_sense_image ~= '' then
            table.insert(gloss_text_parts, ']')
        end

        externallinks = getArticleLinks(frame, sense)
        if externallinks ~= '' then
            table.insert(gloss_text_parts, externallinks)
        end

        local new_notes = {}
        sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) }
        for i, v in ipairs(sense_keys) do
            if args ~= nil then
                table.insert(new_notes, args)
            end
        end
        if #new_notes > 0 then
            for i, v in ipairs(new_notes) do
                if i == 1 then
                    table.insert(gloss_text_parts, '<br/>' .. v)
                else
                    table.insert(gloss_text_parts, v)
                end
            end
        end

        examples = getExamples ( current_lexeme, sense:getId() )

        local gloss_text = table.concat(gloss_text_parts, '\n')

        meanings:tag('li'):wikitext(gloss_text):wikitext(examples)
    end
    return meanings 
end

function get_pronunciation_base_form( current_lexeme )
    base_form = nil

    -- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়।
    if current_lexeme:getLanguage() == 'Q9610' then -- বাংলা
        if current_lexeme:getLexicalCategory() == 'Q1084' then -- বিশেষ্য
            base_form = formWithSingleGrammaticalFeature( current_lexeme, 'Q131105' ) -- কর্তৃকারক
        elseif current_lexeme:getLexicalCategory() == 'Q24905' then -- ক্রিয়া
            base_form = formWithSingleGrammaticalFeature( current_lexeme, 'Q1350145' ) -- ক্রিয়া বিশেষ্য
        end
    end

    if base_form == nil then
        for i, form in pairs(current_lexeme:getForms()) do
            base_form = form
            break
        end
    end
    return base_form
end

function getCombines ( current_lexeme )
    local combines = ''
    local index_mappings = {}

    for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do
        if stmt.qualifiers ~= nil then -- ক্রম
            local current_index = tonumber(stmt.qualifiers.datavalue.value)
            index_mappings = stmt
        end
    end

    if #index_mappings ~= 0 then
        for i, stmt in ipairs(index_mappings) do
            local part_lexeme_id = stmt.mainsnak.datavalue.value.id
            local current_substring = getLinkedLemmata(mw.wikibase.getEntity(part_lexeme_id))
            if combines == '' then
                combines = current_substring
            else
                combines = combines .. ' + ' .. current_substring
            end
        end
    end

    return combines
end

function getEtymology ( current_lexeme )
    -- At the moment only goes two levels up.
    etymology = ''
    for i, stmt in pairs(current_lexeme:getAllStatements('P5191')) do
        origin_lexeme = mw.wikibase.getEntity(stmt.mainsnak.datavalue.value.id)
        origin_lexeme_lang = origin_lexeme:getLanguage()
        origin_origin = ''
        for j, stmt2 in pairs(origin_lexeme:getAllStatements('P5191')) do
            origin_origin_lexeme = mw.wikibase.getEntity(stmt2.mainsnak.datavalue.value.id)
            origin_origin_lexeme_lang = origin_origin_lexeme:getLanguage()
            if origin_origin ~= '' then
                origin_origin = getLinkedLemmata(origin_origin_lexeme) .. ' (' .. mw.wikibase.getLabel(origin_origin_lexeme_lang) .. ')'
            else
                origin_origin = origin_origin .. ' ' .. getLinkedLemmata(origin_origin_lexeme) .. ' (' .. mw.wikibase.getLabel(origin_origin_lexeme_lang) .. ')'
            end
        end
        if origin_origin ~= '' then
            new_etymology_string = getLinkedLemmata(origin_lexeme) .. ' (' .. mw.wikibase.getLabel(origin_lexeme_lang) .. ') ← ' .. origin_origin
        else
            new_etymology_string = getLinkedLemmata(origin_lexeme) .. ' (' .. mw.wikibase.getLabel(origin_lexeme_lang) .. ')'
        end
        if etymology == '' then
            etymology = new_etymology_string
        else
            etymology = etymology .. ' ' .. getLinkedLemmata(origin_lexeme) .. ' (' .. mw.wikibase.getLabel(origin_lexeme_lang) .. ')'
        end
    end
    return etymology
end

function getPronunciation ( frame, current_lexeme )
    local pronunciations = {}
    base_form = get_pronunciation_base_form(current_lexeme)
    if base_form ~= nil then
        for i, stmt in pairs(base_form:getAllStatements('P443')) do
            pronunciation_file = stmt.mainsnak.datavalue.value
            pronunciation = table.insert(pronunciations, '* ' .. frame:expandTemplate{
                title= i18n,
                args = {base_lang_code_forms, pronunciation_file }
            })
        end
    end
    return table.concat(pronunciations, '\n')
end

function heading_level(text, level)
    local heading_delimiter = string.rep('=', level)
    return heading_delimiter .. ' ' .. text .. ' ' .. heading_delimiter
end

function add_any_notes(sections, args, keys)
    for i, v in ipairs(keys) do
        if args ~= nil then
            table.insert(sections, args)
        end
    end
end

function p.all( frame )
    local args = getArgs(frame, { parentOnly = True })

    lexeme_id = args
    current_lexeme = mw.wikibase.getEntity(lexeme_id)
    current_language = current_lexeme:getLanguage()
    current_category = current_lexeme:getLexicalCategory()

    sections = {}

    cat_text = '===' .. getCategory ( frame, current_lexeme ) .. frame:expandTemplate{
        title=i18n,
        args={lexeme_id}
    } .. '==='
    table.insert(sections, cat_text)
    table.insert(sections, frame:expandTemplate{
        title= i18n,
        args = {lexeme_id}
    })
    add_any_notes(sections, args, i18n)

    etymology = getEtymology ( current_lexeme )
    combines = getCombines ( current_lexeme )
    if etymology ~= '' or combines ~= '' then
        table.insert(sections, heading_level(i18n, 4))
        if etymology ~= '' then
            table.insert(sections, tostring(etymology))
        end
        if combines ~= '' then
            table.insert(sections, tostring(combines))
        end
    end
    add_any_notes(sections, args, i18n)

    pronunciation = getPronunciation ( frame, current_lexeme )
    if pronunciation ~= '' then
        table.insert(sections, heading_level(i18n, 4))
        table.insert(sections, tostring(pronunciation))
    end
    add_any_notes(sections, args, i18n)

    meanings, sense_sources = getMeanings ( frame, args, current_lexeme )
    table.insert(sections, heading_level(i18n, 4))
    table.insert(sections, tostring(meanings))
    add_any_notes(sections, args, i18n)

    -- (!) অন্য ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়।
    if current_language == 'Q9610' then -- বাংলা
        local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getInflectionTable(frame, current_lexeme)
        table.insert(sections, conjTable)
    end

    table.insert(sections, heading_level(i18n, 4))
    table.insert(sections, frame:extensionTag('references'))
    add_any_notes(sections, args, i18n)
    
    external_links = getExternalLinks ( current_lexeme )
    if external_links ~= '' then
        table.insert(sections, heading_level(i18n, 4))
        table.insert(sections, external_links)
    end
    add_any_notes(sections, args, i18n)

    return table.concat(sections,"\n\n")
end

return p