我正在从这些转储[http://dumps.wikimedia.org/enwiki/20141208/]处理维基百科。
有关与特定页面关联的类别的信息,请参阅 [http://dumps.wikimedia.org/enwiki/20141208/enwiki-20141208-categorylinks.sql.gz]和类别本身的元数据可从[http://dumps.wikimedia.org/enwiki/20141208/enwiki-20141208-category.sql.gz]获得。
但我无法将隐藏类别与可见类别分开。 例如,页面Anarchism有以下类别可见:
Anarchism
Political culture
Political ideologies
Social theories
Anti-fascism
Anti-capitalism
Far-left politics
虽然转储还建议许多其他垃圾标签,如:
Articles_containing_Ancient_Greek-language_text
Articles_containing_Spanish-language_text
Articles_prone_to_spam_from_November_2014
Articles_with_DMOZ_links
Articles_with_French-language_external_links
Articles_with_inconsistent_citation_formats
CS1_French-language_sources_(fr)
CS1_German-language_sources_(de)
Good_articles
Use_British_English_from_January_2014
Wikipedia_indefinitely_move-protected_pages
以及之前的那些。现在,维基百科称他们为“管理类别”#34;或"隐藏类别",但这些内容未在转储中标记。
由于我已经过滤掉这些标签,我的选择是通过模式匹配过滤掉它们,或直接从页面中获取可见标签(这是有问题的,因为类别在类别转储和页面中的编写方式不同)。 / p>
有什么建议吗?
答案 0 :(得分:2)
所有隐藏类别(或更具体地说,他们的网页)都直接位于(隐藏)类别Category:Hidden categories中。
因此,您需要做的是获取每个类别页面的页面ID,然后查找该页面是否在隐藏类别中。要根据名称查找页面ID,您可能需要使用page.sql
转储。
例如,页面“类别:包含古希腊语文本的文章”的页面ID为39721267,categorylinks.sql
确实包含该条目:
(39721267,'Hidden_categories','ANCIENT GREEK\nARTICLES CONTAINING ANCIENT GREEK-LANGUAGE TEXT','2013-06-25 09:42:34','Ancient Greek','uppercase','subcat')