Module:Lexeme-ja

From Wikidata
Jump to navigation Jump to search
Lua
CodeDiscussionLinksLink count SubpagesDocumentationTestsResultsSandboxLive code All modules

Documentation for this module may be created at Module:Lexeme-ja/doc

Code

local lb = require('Module:LexemeBuilder')
local p = {}
local text = lb.MultilingualText

function p.adjective(word, wordInHira, kanjiQid)
	--example: word="寒い", wordInHira="さむい", kanjiQid="Q54872868"
	--example: word="鬱陶しい", wordInHira="うっとうしい", kanjiQid="Q55851760,Q3595025"
	if type(word) == 'table' then
		if word.parent and word.parent.args and word.parent.args[1] then
			word = word.parent
		end
		word, wordInHira, kanjiQid = word.args[1], word.args[2], word.args[3]
	end
	local entity = lb.newLexeme("Q5287", "Q34698", text({["ja"]=word, ["ja-hira"]=wordInHira}))
	function mizen(word)
		return string.gsub(word, "い$", "かろ")
	end
	function renyo(word)
		return string.gsub(word, "い$", "かっ")
	end
	function renyo2(word)
		return string.gsub(word, "い$", "く")
	end
	function shushi(word)
		return string.gsub(word, "い$", "い")
	end
	function rentai(word)
		return string.gsub(word, "い$", "い")
	end
	function katei(word)
		return string.gsub(word, "い$", "けれ")
	end
	function gokan(word)
		return string.gsub(word, "い$", "")
	end
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=mizen(word), ["ja-hira"]=mizen(wordInHira)}), "Q15737187"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo(word), ["ja-hira"]=renyo(wordInHira)}), "Q2888577"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo2(word), ["ja-hira"]=renyo2(wordInHira)}), "Q2888577"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=shushi(word), ["ja-hira"]=shushi(wordInHira)}), "Q2898727"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=rentai(word), ["ja-hira"]=rentai(wordInHira)}), "Q53608953"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=katei(word), ["ja-hira"]=katei(wordInHira)}), "Q53609593"))
	entity=lb.addClaim(entity,lb.newClaim("P5187", lb.Snak("P5187", {value={text=gokan(word), language="ja"}, type="monolingualtext"})))
	if kanjiQid ~= "" then
		if kanjiQid:match("^[Qq]%d+$") then
			entity=lb.addClaim(entity,lb.newClaim("P5425", lb.Snak("P5425", {value={["entity-type"]="item", id=kanjiQid}, type="wikibase-entityid"})))
		else
			local counter = 1
	    	for id in kanjiQid:gmatch("([Qq]%d+)") do
        		entity=lb.addClaim(entity,lb.addQualifier(
        									lb.newClaim("P5425", lb.Snak("P5425", {value={["entity-type"]="item", id=id}, type="wikibase-entityid"})),
        									lb.Snak("P1545", {value=counter.."", type="string"})
        		));
        		counter = counter + 1
			end
		end
	end
	return lb.Export(entity)
end

function p.adjectivalNoun(word, wordInHira, kanjiQid)
	--example: word="雅だ", wordInHira="みやびだ", kanjiQid="Q55814931"
	--example: word="雅", wordInHira="みやび", kanjiQid="Q55814931"
	if type(word) == 'table' then
		if word.parent and word.parent.args and word.parent.args[1] then
			word = word.parent
		end
		word, wordInHira, kanjiQid = word.args[1], word.args[2], word.args[3]
	end
	function mizen(word)
		return string.gsub(word, "だ$", "だろ")
	end
	function renyo(word)
		return string.gsub(word, "だ$", "だっ")
	end
	function renyo2(word)
		return string.gsub(word, "だ$", "で")
	end
	function renyo3(word)
		return string.gsub(word, "だ$", "に")
	end
	function shushi(word)
		return string.gsub(word, "だ$", "だ")
	end
	function rentai(word)
		return string.gsub(word, "だ$", "な")
	end
	function katei(word)
		return string.gsub(word, "だ$", "なら")
	end
	function gokan(word)
		return string.gsub(word, "だ$", "")
	end
	if not word:match("だ$") then
		word, wordInHira = word .. "だ", wordInHira .. "だ"
	end
	local entity = lb.newLexeme("Q5287", "Q1091269", text({["ja"]=gokan(word), ["ja-hira"]=gokan(wordInHira)}))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=mizen(word), ["ja-hira"]=mizen(wordInHira)}), "Q15737187"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo(word), ["ja-hira"]=renyo(wordInHira)}), "Q2888577"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo2(word), ["ja-hira"]=renyo2(wordInHira)}), "Q2888577"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo3(word), ["ja-hira"]=renyo3(wordInHira)}), "Q2888577"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=shushi(word), ["ja-hira"]=shushi(wordInHira)}), "Q2898727"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=rentai(word), ["ja-hira"]=rentai(wordInHira)}), "Q53608953"))
	entity=lb.addForm(entity,lb.newForm(text({["ja"]=katei(word), ["ja-hira"]=katei(wordInHira)}), "Q53609593"))
	entity=lb.addClaim(entity,lb.newClaim("P5187", lb.Snak("P5187", {value={text=gokan(word), language="ja"}, type="monolingualtext"})))
	if kanjiQid ~= "" then
		if kanjiQid:match("^[Qq]%d+$") then
			entity=lb.addClaim(entity,lb.newClaim("P5425", lb.Snak("P5425", {value={["entity-type"]="item", id=kanjiQid}, type="wikibase-entityid"})))
		else
			local counter = 1
	    	for id in kanjiQid:gmatch("([Qq]%d+)") do
        		entity=lb.addClaim(entity,lb.addQualifier(
        									lb.newClaim("P5425", lb.Snak("P5425", {value={["entity-type"]="item", id=id}, type="wikibase-entityid"})),
        									lb.Snak("P1545", {value=counter.."", type="string"})
        		));
        		counter = counter + 1
			end
		end
	end
	return lb.Export(entity)
end


function p.verbForms(word, wordInHira, conjugation)
	-- example: {{#invoke:Lexeme-ja|verbForms|着ける|つける|ka-shimo}}
	-- example: {{#invoke:Lexeme-ja|verbForms|勝つ|かつ|ta-go}}
	-- example: {{#invoke:Lexeme-ja|verbForms|足りる|たりる|ra-kami}}
	if type(word) == 'table' then
		if word.parent and word.parent.args and word.parent.args[1] then
			word = word.parent
		end
		word, wordInHira, conjugation = word.args[1], word.args[2], word.args[3]
	end
	conline, contype = string.match(conjugation, "(%w+)-(%w+)")
	kana_a = {a="あ",ka="か",ga="が",sa="さ",za="ざ",ta="た",da="だ",na="な",ha="は",ba="ば",ma="ま",ya="や",ra="ら",wa="わ"}
	kana_i = {a="い",ka="き",ga="ぎ",sa="し",za="じ",ta="ち",da="ぢ",na="に",ha="ひ",ba="び",ma="み",ya="",ra="り",wa="い"}
	kana_u = {a="う",ka="く",ga="ぐ",sa="す",za="ず",ta="つ",da="づ",na="ぬ",ha="ふ",ba="ぶ",ma="む",ya="ゆ",ra="る",wa="う"}
	kana_e = {a="え",ka="け",ga="げ",sa="せ",za="ぜ",ta="て",da="で",na="ね",ha="へ",ba="べ",ma="め",ya="",ra="れ",wa="え"}
	kana_o = {a="お",ka="こ",ga="ご",sa="そ",za="ぞ",ta="と",da="ど",na="の",ha="ほ",ba="ぼ",ma="も",ya="よ",ra="ろ",wa="お"}
	
	local entity = lb.newLexeme("Q5287", "Q24905", text({["ja"]=word, ["ja-hira"]=wordInHira}))
	if contype == "kami" or contype == "shimo" then
		common_kana = ""
		if contype == "kami" then
			common_kana = kana_i[conline]
		elseif contype == "shimo" then
			common_kana = kana_e[conline]
		end
		function mizen(word)
			return string.gsub(word, common_kana.."る$", common_kana)
		end
		function renyo(word)
			return string.gsub(word, common_kana.."る$", common_kana)
		end
		function shushi(word)
			return string.gsub(word, common_kana.."る$", common_kana.."る")
		end
		function rentai(word)
			return string.gsub(word, common_kana.."る$", common_kana.."る")
		end
		function katei(word)
			return string.gsub(word, common_kana.."る$", common_kana.."れ")
		end
		function meirei(word)
			return string.gsub(word, common_kana.."る$", common_kana.."ろ")
		end
		function meirei2(word)
			return string.gsub(word, common_kana.."る$", common_kana.."よ")
		end
		function gokan(word)
			return string.gsub(word, common_kana.."る$", "")
		end
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=mizen(word), ["ja-hira"]=mizen(wordInHira)}), "Q15737187"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo(word), ["ja-hira"]=renyo(wordInHira)}), "Q2888577"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=shushi(word), ["ja-hira"]=shushi(wordInHira)}), "Q2898727"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=rentai(word), ["ja-hira"]=rentai(wordInHira)}), "Q53608953"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=katei(word), ["ja-hira"]=katei(wordInHira)}), "Q53609593"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=meirei(word), ["ja-hira"]=meirei(wordInHira)}), "Q4348304"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=meirei2(word), ["ja-hira"]=meirei2(wordInHira)}), "Q4348304"))
	elseif contype == "go" then
		function mizen(word)
			return string.gsub(word, kana_u[conline].."$", kana_a[conline])
		end
		function mizen2(word)
			return string.gsub(word, kana_u[conline].."$", kana_o[conline])
		end
		function renyo(word)
			return string.gsub(word, kana_u[conline].."$", kana_i[conline])
		end
		function shushi(word)
			return string.gsub(word, kana_u[conline].."$", kana_u[conline])
		end
		function rentai(word)
			return string.gsub(word, kana_u[conline].."$", kana_u[conline])
		end
		function katei(word)
			return string.gsub(word, kana_u[conline].."$", kana_e[conline])
		end
		function meirei(word)
			return string.gsub(word, kana_u[conline].."$", kana_e[conline])
		end
		function gokan(word)
			return string.gsub(word, kana_u[conline].."$", "")
		end
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=mizen(word), ["ja-hira"]=mizen(wordInHira)}), "Q15737187"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=mizen2(word), ["ja-hira"]=mizen2(wordInHira)}), "Q15737187"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=renyo(word), ["ja-hira"]=renyo(wordInHira)}), "Q2888577"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=shushi(word), ["ja-hira"]=shushi(wordInHira)}), "Q2898727"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=rentai(word), ["ja-hira"]=rentai(wordInHira)}), "Q53608953"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=katei(word), ["ja-hira"]=katei(wordInHira)}), "Q53609593"))
		entity=lb.addForm(entity,lb.newForm(text({["ja"]=meirei(word), ["ja-hira"]=meirei(wordInHira)}), "Q4348304"))
	end
	return lb.Export(entity)
end

return p