2009-12-04 20 views
1

J'expérimente un peu avec la détection textuelle/détection de plagiat basique, et je veux essayer ceci sur une base de site-à-site Web. Cependant, je suis un peu coincé dans la recherche d'un moyen approprié pour traiter le texte.Comparer le contenu textuel des sites Web

Comment traiter et comparer le contenu de deux sites Web pour le plagiat?

Je pense quelque chose comme ce pseudo-code:

// extract text 
foreach website in websites 
    crawl website - store structure so pages are only scanned once 
    extract text blocks from all pages - store this is in list 

// compare  
foreach text in website1.textlist 
    compare with all text in website2.textlist 

Je me rends compte que cette solution pourrait très rapidement accumuler une grande quantité de données, de sorte qu'il pourrait être possible de ne faire fonctionner avec des sites très petits .

Je n'ai pas encore décidé de l'algorithme de comparaison de texte, mais pour le moment, je suis plus intéressé par le fonctionnement de l'algorithme de processus.

Je pense que ce serait une bonne idée d'extraire tout le texte en tant que pièces individuelles (à partir de paragraphes, de tableaux, d'en-têtes, etc.), car le texte peut se déplacer sur les pages. Je l'implémente en C# (peut-être ASP.NET).

Je suis très intéressé par toute contribution ou conseil que vous pourriez avoir, alors s'il vous plaît tirer! :)

+1

Il est également possible d'utiliser un service tiers pour réaliser cette opération avec votre propre logique. Je peux vous recommander sur https://api.copyleaks.com qui est prêt à utiliser avec l'implémentation .NET (via Nuget ou Github). Lire la suite ici: https://github.com/Copyleaks/.NET-Plagiarism-Checker – No1Lives4Ever

Répondre

2

Mon approche à ce problème serait de google pour des blocs de texte spécifiques et assez uniques dont vous essayez de protéger les droits d'auteur.

Cela dit, si vous voulez construire votre propre solution, voici quelques commentaires:

  • Respect robots.txt. Si elles ont marqué le site comme ne pas explorer, il est probable qu'elles n'essaient pas de profiter de votre contenu de toute façon.
  • Vous devrez actualiser la structure du site que vous avez stockée de temps à autre au fur et à mesure que les sites Web changent.
  • Vous devez séparer correctement le texte des balises HTML et JavaScript.
  • Vous aurez essentiellement besoin de faire une recherche en texte intégral dans tout le texte de la page (avec les tags/scripts supprimés) pour le texte que vous souhaitez protéger. Il y a de bons algorithmes publiés pour cela.
+0

+1 Merci pour le conseil. Je respecterai robots.txt (ou au moins avoir une option pour l'activer/désactiver). J'utilise le HtmlAgilityPack pour nettoyer et analyser le HTML, et pour extraire le texte des balises. Cela rend très facile l'extraction du texte. Pour la comparaison réelle, je pense plus à la ligne de la distance de compression normalisée, bien que je n'ai pas encore examiné l'algorithme à fond. –

+0

Ce n'est pas vraiment la réponse que je cherchais, mais puisque vous avez obtenu le plus de votes, et que votre réponse est utile, je l'accepterai comme réponse, merci pour votre commentaire :) –

1

Vous allez probablement être plus intéressé par la détection de fragments. par exemple, beaucoup de pages auront le mot «maison» sur eux et vous vous en fichez. Mais il est assez improbable que de très nombreuses pages aient exactement les mêmes mots sur toute la page. Donc, vous voulez probablement comparer et rapporter sur des pages qui ont des correspondances exct de longueur 4,5,6,7,8, etc les mots et les comptes pour chaque longueur. Attribuez un score et un poids et si vous dépassez votre "nombre magique" signaler les xeroxers suspectés. Pour C#, vous pouvez utiliser webBrowser() pour obtenir une page et récupérer son texte assez facilement. Désolé, pas d'exemple de code pratique pour copier/coller mais MSDN a généralement de très bons échantillons.

+0

+1 Merci pour vos commentaires et conseils. Votre solution de compte de mots pourrait être une alternative plus légère en cas de quantités massives de texte. Je pense que vous voulez dire HttpWebRequest.create (Uri) pour créer un webrequest, mais cette partie fonctionne plutôt bien. –

+0

Comme le texte a tendance à se déplacer (dans mon expérience au moins), je vais baser la comparaison sur des fragments de texte au lieu de pages. –

Questions connexes