Module:User:Ssvb/be-autostress-bloom-filter

From Wiktionary, the free dictionary
Jump to navigation Jump to search

This is a private module sandbox of Ssvb, for their own experimentation. Items in this module may be added and removed at Ssvb's discretion; do not rely on this module's stability.


-- 1000 most common lemmas from Belarusian Wikisource and all their inflections (5553 words total). Inflected forms taken from https://github.com/Belarus/GrammarDB (CC BY-SA 4.0 license).
-- Represented as a https://en.wikipedia.org/wiki/Bloom_filter using sixteen 32-bit chunks of a SHA-512 hash (k=16).
-- Theoretical false positive rate: 1 in 20 millions. No false positives for any of the ~240K lemmas or their inflected forms from GrammarDB. Storage efficiency: ~6.2 bytes per word.
local words = "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"

local export = {}

local bit32 = require("bit32")

local AC = require("Module:string/char")(0x0301) -- acute

local rsubn = mw.ustring.gsub
local rfind = mw.ustring.find

local function rsub(term, foo, bar)
	local retval = rsubn(term, foo, bar)
	return retval
end

local base64tbl = {
	["A"] = 0, ["B"] = 1, ["C"] = 2, ["D"] = 3, ["E"] = 4, ["F"] = 5, ["G"] = 6, ["H"] = 7, ["I"] = 8, ["J"] = 9,
	["K"] = 10, ["L"] = 11, ["M"] = 12, ["N"] = 13, ["O"] = 14, ["P"] = 15, ["Q"] = 16, ["R"] = 17, ["S"] = 18,
	["T"] = 19, ["U"] = 20, ["V"] = 21, ["W"] = 22, ["X"] = 23, ["Y"] = 24, ["Z"] = 25, ["a"] = 26, ["b"] = 27,
	["c"] = 28, ["d"] = 29, ["e"] = 30, ["f"] = 31, ["g"] = 32, ["h"] = 33, ["i"] = 34, ["j"] = 35, ["k"] = 36,
	["l"] = 37, ["m"] = 38, ["n"] = 39, ["o"] = 40, ["p"] = 41, ["q"] = 42, ["r"] = 43, ["s"] = 44, ["t"] = 45,
	["u"] = 46, ["v"] = 47, ["w"] = 48, ["x"] = 49, ["y"] = 50, ["z"] = 51, ["0"] = 52, ["1"] = 53, ["2"] = 54,
	["3"] = 55, ["4"] = 56, ["5"] = 57, ["6"] = 58, ["7"] = 59, ["8"] = 60, ["9"] = 61, ["+"] = 62, ["/"] = 63
}

-- Check whether the word is present in the Bloom filter
local function check_word(word)
	local h = mw.hash.hashValue("sha512", word)
	for i = 1, 128, 8 do
		local idx = tonumber(h:sub(i, i + 8 - 1), 16) % (string.len(words) * 6)
		local rem = idx % 6
		local div = (idx - rem) / 6
		local val = base64tbl[string.sub(words, div + 1, div + 1)]
		if bit32.extract(val, rem) == 0 then
			return false
		end
	end
	return true
end

-- Try to probe stress in different positions starting from the last vowel
local function autostress_word(word)
	if rfind(word, AC) then
		return word
	end
	local tmp = rsub(word, "([аяоёуюіыэеАЯОЁУЮІЫЭЕ])([^аяоёуюіыэеАЯОЁУЮІЫЭЕ]*)$", "%1" .. AC .. "%2")
	if tmp == word then
		return word
	end
	word = tmp
	while true do
		if check_word(word) then
			return word
		end
		tmp = rsub(word, "([аяоёуюіыэеАЯОЁУЮІЫЭЕ])([^аяоёуюіыэеАЯОЁУЮІЫЭЕ]*)([аяоёуюіыэеАЯОЁУЮІЫЭЕ])" .. AC, "%1" .. AC .. "%2%3")
		if tmp == word then
			return rsub(word, AC, "")
		end
		word = tmp
	end
end

-- Process a chunk of text and opportunistically add stress to Belarusian words where
-- it is possible to do so in an unambiguous way. For example, stress is not added to
-- "гады" because of "гады́" vs. "га́ды" stress position ambiguity.
function export.autostress(text)
	local result = rsub(text, "[" .. AC .. "Ѐ-џҊ-ԧꚀ-ꚗʼ'’]+", function (word)
		-- Check if stress is already annotated and do no substitutions if that's the case
		if rfind(word, AC) then
			return word
		end
		-- Do nothing if the word only has a single syllable
		if mw.ustring.len(rsub(word, "[^аяоёуюіыэеАЯОЁУЮІЫЭЕ]", "")) == 1 then
			return word
		end
		-- Lookup the word and do the substitution if possible
		local tmp = autostress_word(word)
		if tmp ~= word then
			return tmp
		end
		-- If the word is capitalized, then try to remove capitalization and lookup again
		local decap_word = rsub(word, "^.", function (letter) return mw.ustring.lower(letter) end)
		local tmp = autostress_word(decap_word)
		if tmp ~= decap_word then
			return rsub(tmp, "^.", function (letter) return mw.ustring.upper(letter) end)
		end
		-- Assume that "о" is stressed if there are no other "о" or "ё" letters in the word
		if mw.ustring.len(rsub(word, "[^оОёЁ]", "")) == 1 then
			return rsub(word, "[оО]", "%1" .. AC)
		end
		return word
	end)
	return result
end

return export