Class: Html2rss::LinkDestination::PathClassifier
- Inherits:
-
Object
- Object
- Html2rss::LinkDestination::PathClassifier
- Defined in:
- lib/html2rss/link_destination/path_classifier.rb
Overview
Classifies normalized destination path segments for scoring.
Constant Summary collapse
- SOFT_UTILITY =
Soft utility segments excluded from high-confidence junk (still utility_path).
%w[ for-you join member members membership newsletter newsletters plans plus premium pricing recommended ].to_set.freeze
- SEGMENT_SETS =
Segment groups used to classify article, taxonomy, utility, and vanity routes.
begin content = %w[ article articles blog blogs changelog changelogs insight insights launch launches news post posts release releases story stories update updates artikel beitrag beitraege nachrichten neuigkeiten aktuelles articulo articulos noticia noticias entrada entradas publicacion publicaciones actualite actualites nouvelle nouvelles teaser teasers card cards ].to_set.freeze taxonomy = %w[ category categories tag tags topic topics kategorie kategorien schlagwort schlagworte thema themen categoria categorias etiqueta etiquetas tema temas categorie etiquette etiquettes sujet sujets theme themes ].to_set.freeze vanity = %w[ join membership plus premium pricing plans subscribe signup abonnieren abo suscribirse boletin s-abonner saboner ].to_set.freeze utility = ( taxonomy.to_a + %w[ about account archive archives author authors comment comments contact feedback help login logout notification notifications preference preferences profile register search settings share signup subscribe feed feeds comment-feed comments-feed privacy terms cookie cookies user users kategorie kategorien schlagwort schlagworte thema themen autor autoren archiv ueber-uns ueber ueberuns profil kontakt impressum suche hilfe anmelden registrieren konto registrierung anmeldung abonnieren abo datenschutz nutzungsbedingungen agb categoria categorias etiqueta etiquetas tema temas autores archivos sobre-nosotros sobre quienes-somos buscar busqueda ayuda entrar ingresar registrarse registro cuenta suscribirse boletin privacidad condiciones categorie etiquette etiquettes sujet sujets theme themes auteur auteurs a-propos apropos recherche rechercher aide connexion s-inscrire sinscrire inscription compte s-abonner saboner lettre-information confidentialite mentions-legales cgu menu sidebar widget social modal popup banner promo ad ads related recommendation recommendations pagination pager ] + SOFT_UTILITY.to_a ).to_set.freeze { content:, utility:, high_confidence_junk: (utility - SOFT_UTILITY).freeze, taxonomy:, vanity:, deep_post_context: %w[press newsroom presse pressemitteilungen prensa].to_set.freeze }.freeze end
- YEARISH_SEGMENT =
Path segment that begins with a year-like publishing marker.
/\A\d{4,}[\w-]*\z/- POST_SLUG_SEGMENT =
Hyphenated slug shape common to article permalinks.
/\A[a-z0-9]+(?:-[a-z0-9]+){2,}\z/i
Instance Attribute Summary collapse
-
#segments ⇒ Object
readonly
rubocop:disable Metrics/ClassLength.
Instance Method Summary collapse
-
#content_path? ⇒ Boolean
True when the route has article-like path evidence.
-
#deep_utility_context_route? ⇒ Boolean
True when the leading segments are all utility chrome.
-
#initialize(segments) ⇒ PathClassifier
constructor
A new instance of PathClassifier.
-
#junk_path? ⇒ Boolean
True when the route is shallow and contains high-confidence noise.
-
#shallow? ⇒ Boolean
True when the route is too shallow to strongly indicate an article.
-
#shallow_high_confidence_route? ⇒ Boolean
True when the route is shallow and contains high-confidence noise.
-
#strong_post_suffix? ⇒ Boolean
True when the final path segment looks like a post slug.
-
#taxonomy_path? ⇒ Boolean
True when the route points at taxonomy/listing chrome.
-
#utility_destination? ⇒ Boolean
True when the route points at conversion or account chrome.
-
#utility_only_route? ⇒ Boolean
True when every path segment is utility chrome.
-
#utility_path? ⇒ Boolean
True when the route includes utility/navigation evidence.
-
#vanity_path? ⇒ Boolean
True when the route points at conversion or account chrome.
Constructor Details
#initialize(segments) ⇒ PathClassifier
Returns a new instance of PathClassifier.
68 69 70 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 68 def initialize(segments) @segments = segments end |
Instance Attribute Details
#segments ⇒ Object (readonly)
rubocop:disable Metrics/ClassLength
7 8 9 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 7 def segments @segments end |
Instance Method Details
#content_path? ⇒ Boolean
Returns true when the route has article-like path evidence.
73 74 75 76 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 73 def content_path? @content_path ||= SEGMENT_SETS[:content].intersect?(segments) || yearish_content_context? end |
#deep_utility_context_route? ⇒ Boolean
Returns true when the leading segments are all utility chrome.
126 127 128 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 126 def deep_utility_context_route? all_junk?(segments.size - 1) end |
#junk_path? ⇒ Boolean
Returns true when the route is shallow and contains high-confidence noise.
131 132 133 134 135 136 137 138 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 131 def junk_path? return false if excluded_content_route? taxonomy_path? || utility_only_route? || deep_utility_context_route? || shallow_high_confidence_route? end |
#shallow? ⇒ Boolean
Returns true when the route is too shallow to strongly indicate an article.
94 95 96 97 98 99 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 94 def shallow? segment_count = segments.size junk_segments = SEGMENT_SETS.fetch(:high_confidence_junk) segment_count <= 1 || (segment_count == 2 && junk_segments.include?(segments.last)) end |
#shallow_high_confidence_route? ⇒ Boolean
Returns true when the route is shallow and contains high-confidence noise.
116 117 118 119 120 121 122 123 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 116 def shallow_high_confidence_route? junk_segments = SEGMENT_SETS.fetch(:high_confidence_junk) vanity_segments = SEGMENT_SETS.fetch(:vanity) shallow? && segments.any? do |segment| junk_segments.include?(segment) || vanity_segments.include?(segment) end end |
#strong_post_suffix? ⇒ Boolean
Returns true when the final path segment looks like a post slug.
102 103 104 105 106 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 102 def strong_post_suffix? @strong_post_suffix ||= segments.any? && included_last_segment? && trusted_post_context?(segments.size - 1) end |
#taxonomy_path? ⇒ Boolean
Returns true when the route points at taxonomy/listing chrome.
89 90 91 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 89 def taxonomy_path? @taxonomy_path ||= SEGMENT_SETS[:taxonomy].intersect?(segments) end |
#utility_destination? ⇒ Boolean
Returns true when the route points at conversion or account chrome.
141 142 143 144 145 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 141 def utility_destination? return false if excluded_content_route? vanity_path? || utility_route? end |
#utility_only_route? ⇒ Boolean
Returns true when every path segment is utility chrome.
109 110 111 112 113 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 109 def utility_only_route? junk_segments = SEGMENT_SETS.fetch(:high_confidence_junk) segments.all? { |segment| junk_segments.include?(segment) } end |
#utility_path? ⇒ Boolean
Returns true when the route includes utility/navigation evidence.
79 80 81 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 79 def utility_path? @utility_path ||= SEGMENT_SETS[:utility].intersect?(segments) end |
#vanity_path? ⇒ Boolean
Returns true when the route points at conversion or account chrome.
84 85 86 |
# File 'lib/html2rss/link_destination/path_classifier.rb', line 84 def vanity_path? @vanity_path ||= SEGMENT_SETS[:vanity].intersect?(segments) end |