Content deleted Content added
copy in from main Tags: Manual revert Reverted |
false positives blacklist of templates Tag: Manual revert |
||
Line 33: | Line 33: | ||
"[Rr]oad disambiguation", |
"[Rr]oad disambiguation", |
||
"[Rr]oaddis", |
"[Rr]oaddis", |
||
} |
|||
-- Some templates with 'disambiguation' in their titles are misleading |
|||
falsePositives = { |
|||
"[Ii]talic disambiguation" |
|||
} |
} |
||
Line 47: | Line 52: | ||
templateNames[name] = true |
templateNames[name] = true |
||
end |
end |
||
inFalsePositives = false |
|||
for _i, v in ipairs(disambigTemplates) do |
for _i, v in ipairs(disambigTemplates) do |
||
for template, _ in pairs(templateNames) do |
for template, _ in pairs(templateNames) do |
||
if string.match(template, "^"..v.."$") then |
if string.match(template, "^"..v.."$") then |
||
for _j, v2 in ipairs(falsePositives) do |
|||
⚫ | |||
if string.match(template, "^"..v2.."$") then |
|||
inFalsePositives = true |
|||
end |
|||
end |
|||
if not inFalsePositives then |
|||
⚫ | |||
end |
|||
end |
end |
||
end |
end |
Revision as of 12:32, 30 August 2023
Module documentation[view] [edit] [history] [purge]
This module detects if a given page is a disambiguation page.
Usage
{{#invoke:Disambiguation|isDisambiguationPage|Page title}}
- returns
yes
if the page is a disambiguation page, or nothing if the page is not a disambiguation page
Examples:
{{#invoke:Disambiguation|isDisambiguationPage|Paris}}
→{{#invoke:Disambiguation|isDisambiguationPage|New}}
→ yes{{#invoke:Disambiguation|isDisambiguationPage|Black swan (disambiguation)}}
→ yes
You can also use magic words like {{SUBJECTPAGENAME}}:
{{#invoke:Disambiguation|isDisambiguationPage|{{SUBJECTPAGENAME}}}}
→ yes
Usage within Lua modules
Import this module, e.g with
local mDisambiguation = require('Module:Disambiguation')
Then you can use the functions isDisambiguation
and _isDisambiguationPage
.
If you have already have a Title object for the page to check, get the content using the title object's getContent() method, and pass that into isDisambiguation
:
local isDab = mDisambiguation.isDisambiguation(content) -- returns true or false
- (where
content
is a string, the wikitext content of page to check)
If you don't otherwise need the title, you can pass in the page name to _isDisambiguationPage
:
local isDab = mDisambiguation._isDisambiguationPage(pageName) -- returns true or false
- (where
pageName
is a string, the name of page to check)
Internal operations
- Although set index articles are treated by some templates as disambiguation pages, they are actually considered a special type of list and are not treated as disambiguation pages by this module
- As this module relies on detecting templates with names like "disambiguation" in the article text, it is subject to false positives by templates such as {{italic disambiguation}}. These templates should be added to the falsePositives list in the code to exclude them.
- The list of disambiguation templates is maintained at Module:Disambiguation/templates.
local p = {}
local mRedirect = require('Module:Redirect')
local disambigTemplates = {
"[Dd][Aa][Bb]",
"[Dd]big",
"[Dd]is",
"[Dd]isambiguation",
"[%w_%s]-%f[%w][Dd]isam[%w]-",
"[Gg]eodis",
"[Hh][Nn][Dd][Ii][Ss]",
"[Hh]ndisambig",
"[Ll]etter%-[Nn]umber [Cc]ombination [Dd]isambiguation",
"[Ll]etter%-NumberCombDisambig",
"[Mm]il%-unit%-dis",
"[Nn]umberdis",
"[Ss]choold[ai][bs]",
"[Mm]il-unit-disambig",
"[Mm]ilitary unit disambiguation",
"[Gg]eo-dis",
"[Gg]eodisambig",
"[Dd]isambig[Gg]eo",
"[Dd]isambig[GN]",
"[Dd]isambigNm",
"[Dd]isambigName",
"[Ss]urnames?",
"[Ss]pecies Latin name disambiguation",
"[Ss]peciesLatinNameDisambig",
"[Ll]atinNameDisambig",
"[Mm]athematical disambiguation",
"[Mm]athematics disambiguation",
"[Mm]ath ?dab",
"[Rr]oad disambiguation",
"[Rr]oaddis",
}
-- Some templates with 'disambiguation' in their titles are misleading
falsePositives = {
"[Ii]talic disambiguation"
}
p.isDisambiguation = function(content)
-- false if there is no content
if content == nil then return false end
-- redirects are not disambiguation pages
if mRedirect.getTargetFromText(content) ~= nil then return false end
-- check for disambiguation templates in the content
local templateNames = {}
for name in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do
templateNames[name] = true
end
inFalsePositives = false
for _i, v in ipairs(disambigTemplates) do
for template, _ in pairs(templateNames) do
if string.match(template, "^"..v.."$") then
for _j, v2 in ipairs(falsePositives) do
if string.match(template, "^"..v2.."$") then
inFalsePositives = true
end
end
if not inFalsePositives then
return true
end
end
end
end
-- check for magic word
if string.find(content, "__DISAMBIG__", 1, true) ~= nil then
return true
end
return false
end
p._isDisambiguationPage = function(page)
-- Look "(disambiguation)" in the title
if string.find(page, "(disambiguation)",0,true) ~= nil then
return true;
end
-- Look for disamiguation template in page content
local title = mw.title.new(page)
if not title then return false end
local content = title:getContent()
return p.isDisambiguation(content)
end
-- Entry points for templates
p.isDisambiguationPage = function(frame)
local title = frame.args[1]
return p._isDisambiguationPage(title) and "yes" or ""
end
return p