Scripting 如何规范化/规范化著名名字列表?

Scripting 如何规范化/规范化著名名字列表?,scripting,normalization,wikipedia,wikidata,canonicalization,Scripting,Normalization,Wikipedia,Wikidata,Canonicalization,我有一个文本文件,其中有一个从不同来源编译的著名名字列表,我想对其进行规范化,以便能够准确地对它们进行整理。例如,该列表包括变化,如老子、老子和老子;但是,所有这些最终都代表了。我可以选择什么来规范化/规范化这些名称 我注意到的一件事是,如果您尝试将这些变体直接放入Wikipedia URL,它们最终都会重定向到同一页面(,)。是否有Wikidata API查询这些重定向,或者是否有一种简单的方法从重定向行为中捕获规范术语?在老子条目上有一个“也称为”的列表,它们是skos:altLabel,称

我有一个文本文件,其中有一个从不同来源编译的著名名字列表,我想对其进行规范化,以便能够准确地对它们进行整理。例如,该列表包括变化,如老子、老子和老子;但是,所有这些最终都代表了。我可以选择什么来规范化/规范化这些名称

我注意到的一件事是,如果您尝试将这些变体直接放入Wikipedia URL,它们最终都会重定向到同一页面(,)。是否有Wikidata API查询这些重定向,或者是否有一种简单的方法从重定向行为中捕获规范术语?

在老子条目上有一个“也称为”的列表,它们是
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 
当我运行它时,我得到了一个超时异常。所以我添加了
?s wdt:P106 wd:Q4964182。
(职业哲学家)。(如果出现时间异常,脚本中的查询可能无法输出)

另外,请看这里:它是书面的

多个项目可以具有相同的别名,只要它们具有不同的描述


因此,这也应该考虑。

您可以在此表单中使用一个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

然而,似乎还有很多。请注意,我可能错了。

我最终得到了一个足够好/快速且肮脏的解决方案,使用curl获取每个条目的Wikipedia页面,并绘制出结果页面标题:

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

假设您能够“正常化,[和]。。。准确地整理它们“结果会是什么?”?原谅我的无知!你一定看到了这个:。