2017-03-15 4 views
0

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).

Répondre

1

Je pense que vous devez revenir à votre exigence initiale et la clarifier. Dans votre question, vous avez commencé en disant "Je veux filtrer les articles qui appartiennent à une certaine catégorie". Vous obtenez déjà ce résultat, mais vous n'êtes pas satisfait qu'un article spécifique (c'est-à-dire le retour du Jedi) vous soit retourné, même s'il correspond à vos critères. Vous avez correctement identifié la source du problème avec votre libellé "appartient plus à d'autres catégories", mais cela est exprimé comme une règle très arbitraire, et vous aurez besoin de quelque chose de moins subjectif pour résoudre le problème. pense.En d'autres termes, "Retour du Jedi" est un membre de la catégorie Religion selon Wikipedia, vous devez donc clarifier pourquoi vous ne voulez pas le résultat avant de pouvoir l'exclure via un algorithme. Si vous pouvez définir les critères supplémentaires, vous pouvez très probablement affiner votre filtre pour exclure les éléments que vous ne voulez pas. Cela pourrait vous donner "trouver tous les articles avec la catégorie Religion à l'exclusion de ceux avec la catégorie Films", par exemple.

Si vous pouvez reformuler votre exigence en anglais d'une manière plus précise, je suis sûr que cela mènera vers une solution.

+0

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. –