J'ai un vidage Wikipédia et je veux filtrer les articles qui appartiennent à une certaine catégorie (par exemple, «Religion»). Je sais que chaque article a une liste de catégories au bas du champ text
, mais le problème est que seules les catégories immédiates sont listées (par exemple, l'article 'Jésus' appartient à la catégorie 'Religion', mais la 'Religion' elle-même n'est pas répertorié comme l'une de ses catégories en bas).Filtrer les articles de Wikipedia par catégorie
Mon approche
Ma première approche a consisté à utiliser la table categorylinks
et étant donné une certaine catégorie de haut niveau tels que « la religion », traverser le graphique de catégorie répertoriant chaque catégorie ou la page qui liste « Religion » à le bas de sa page.
Le problème
que je faisais bien jusqu'à ce que je suis tombé sur ce scénario:
Religion ->Religon and society ->Religion and science ->Religion in science fiction ->Jedi -> catégories et des articles sur Star Wars. Donc, par mon algorithme, l'article Return of the Jedi appartient à la catégorie de haut niveau Religion (et, bien, c'est vrai) ... mais je ne veux pas vraiment filtrer 'Retour du Jedi' cause cela does belong more to other categories
(Je suppose que c'est le problème principal, comment discerner le poids des différentes catégories d'un article donné).
Une autre solution
Une solution possible est de chaque catégorie | article, je trouve tout en traversant le graphique, vérifiez si elle ne fait pas partie à aucune autre des catégories I déjà visitées. Le problème est que cela ne fonctionne pas tout à fait parce que la deuxième catégorie de haut niveau après, par exemple, «Religion» pourrait avoir un autre parent de haut niveau distinct de «Religion».
Une autre solution possible consiste à couper la traversée à un certain niveau, par exemple 3, ce qui fixerait l'exemple précédent; maintenant le problème est à quel niveau (heuristique?). Et, n'est pas une solution optimale, certains articles resteront même s'ils appartiennent à la catégorie de haut niveau spécifié. En utilisant PetScan, et en coupant la traversée à la profondeur 2, on obtient environ 12000 articles: très peu d'articles et encore quelques 'faux positifs' comme 'Bertrand Russell'.
Des idées? Edit: l'utilisation de l'API Wikipedia ne semble pas être une option (j'ai besoin de filtrer plusieurs catégories).
C'est tout à fait vrai. Je suppose que faire quelque chose comme 'belongs_to (article, category_to_exclude) et non belongs_to (article, list_of_categories_to_include)' fonctionnerait. Je dois y penser plus. Merci. –