我有一个文本文件,其中包含从不同来源编译的着名名称列表,我希望将其标准化,以便我可以准确地整理它们。例如,该列表包括诸如老子,老子和老子等变体;但是,所有这些最终代表Laozi。我可以选择标准化/规范化名称吗?
我注意到的一件事是,如果您尝试将这些变体直接放入维基百科网址,它们最终都会重定向到同一页面(Lao-tse,Lao Tzu,Lao Zi) 。是否有维基数据API可以查询这些重定向,或者是否有一种简单的方法可以从重定向行为中捕获规范术语?
答案 0 :(得分:1)
在老子项目https://www.wikidata.org/wiki/Q9333上有一个"也被称为"那些是skos:altLabel
并被称为别名。你可以查询"老子"例如:
SELECT DISTINCT ?s ?sLabel ?sAltLabel WHERE {
?s wdt:P31 wd:Q5.
OPTIONAL { ?s skos:altLabel ?sAltLabel. }
FILTER(CONTAINS(?sAltLabel, "Lao Tzu"@en))
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} limit 100
当我在https://query.wikidata.org/中运行时,我得到了一个不合时宜的例外。所以我加了?s wdt:P106 wd:Q4964182.
(职业哲学家)。 (如果时间异常,也许脚本中的查询不会出来。)
另外,请看这里:https://www.wikidata.org/wiki/Help:Aliases写的是
"多个项目可以具有相同的别名,只要它们具有不同的描述即可。"
所以这也应该考虑。
答案 1 :(得分:1)
您可以使用此表单中的某个MediaWiki API。
https://en.wikipedia.org/w/api.php?action=query&titles=Laozi&prop=redirects
它在实际使用中有一些明显的缺陷,其中一些在实际尝试时返回的页面中提到。
我最近还发现,您可以使用Python以下列方式练习API。
from mwclient.client import Site
from mwclient.page import Page
site = Site('en.wikipedia.org')
result = site.api('query', titles='Laozi', prop='redirects', rdlimit=10)
for value in result['query']['pages']:
for item in result['query']['pages'][value]['redirects']:
print (item['title'])
前十个重定向是:
Lao tzu
Lao tse
Lao zi
Lao Tse
Li Er
Lao-Tzu
Lao Tze
Lao-tze
Lao-tzu
Lao Tsze
然而,似乎还有更多。请注意,我可能错了。
答案 2 :(得分:0)
我最终使用curl来获取每个条目的Wikipedia页面并使用pup来获取结果页面标题的足够/快速和肮脏的解决方案:
cat NAMES.txt | xargs -I % -d"\n" sh -c 'curl -s "https://en.wikipedia.org/w/index.php" --data-urlencode "title=%" | pup -p "#firstHeading text{}"' > NAMES.canonicalized.txt