[object Object]

← back to Rentv

pr-intelligence: full HTML-entity decode in extraction paths (ndash/mdash/8217); yoloforever c1 data-quality pass

8ed15735ef684b53dde0cb94245b26ab0029de9f · 2026-07-30 15:38:28 -0700 · Steve Abrams

Files touched

Diff

commit 8ed15735ef684b53dde0cb94245b26ab0029de9f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Jul 30 15:38:28 2026 -0700

    pr-intelligence: full HTML-entity decode in extraction paths (ndash/mdash/8217); yoloforever c1 data-quality pass
---
 src/pr/adapters/index.js   | 3 ++-
 src/pr/adapters/website.js | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/pr/adapters/index.js b/src/pr/adapters/index.js
index ea9da462..fd1adc24 100644
--- a/src/pr/adapters/index.js
+++ b/src/pr/adapters/index.js
@@ -86,7 +86,8 @@ function stripTags(html) {
   return String(html || '')
     .replace(/<script[\s\S]*?<\/script>/gi, ' ').replace(/<style[\s\S]*?<\/style>/gi, ' ')
     .replace(/<[^>]+>/g, ' ').replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&')
-    .replace(/&#0?39;|&rsquo;|&lsquo;/g, "'").replace(/&quot;|&ldquo;|&rdquo;/g, '"')
+    .replace(/&#0?39;|&rsquo;|&lsquo;|&#8217;/g, "'").replace(/&quot;|&ldquo;|&rdquo;/g, '"')
+    .replace(/&ndash;|&#8211;/g, '\u2013').replace(/&mdash;|&#8212;/g, '\u2014')
     .replace(/\s+/g, ' ').trim();
 }
 
diff --git a/src/pr/adapters/website.js b/src/pr/adapters/website.js
index a352bfd2..aa62bb79 100644
--- a/src/pr/adapters/website.js
+++ b/src/pr/adapters/website.js
@@ -38,7 +38,9 @@ function extractPeople(html) {
   const text = String(html)
     .replace(/<script[\s\S]*?<\/script>/gi, ' ').replace(/<style[\s\S]*?<\/style>/gi, ' ')
     .replace(/<(h[1-6]|p|div|li|td|span|strong|em|a|br)[^>]*>/gi, '\n').replace(/<[^>]+>/g, ' ')
-    .replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&');
+    .replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&')
+    .replace(/&ndash;|&#8211;/g, '\u2013').replace(/&mdash;|&#8212;/g, '\u2014')
+    .replace(/&#0?39;|&rsquo;|&lsquo;|&#8217;/g, "'").replace(/&quot;|&ldquo;|&rdquo;/g, '"');
   const lines = text.split('\n').map((l) => l.replace(/\s+/g, ' ').trim()).filter(Boolean);
   const people = [];
   const NAME_RE = /^([A-Z][a-z]+(?:\s+[A-Z]\.?)?(?:\s+[A-Z][a-z'’-]+){1,2})$/;

← 1bcdcd8d pr-intelligence: alias-qualify all whole-row reads (fleet pr  ·  back to Rentv  ·  pr-intelligence: Cody-gate fixes — hard search-query budget a52862d9 →