← back to Rentv
pr-intelligence: website adapter — stopword guard against nav-heading false positives in team-page extraction
3317fa1ca0e4349255af8772dcb96ca9969adb47 · 2026-07-30 11:39:48 -0700 · Steve Abrams
Files touched
M src/pr/adapters/website.js
Diff
commit 3317fa1ca0e4349255af8772dcb96ca9969adb47
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jul 30 11:39:48 2026 -0700
pr-intelligence: website adapter — stopword guard against nav-heading false positives in team-page extraction
---
src/pr/adapters/website.js | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/pr/adapters/website.js b/src/pr/adapters/website.js
index ac0fb3d9..a352bfd2 100644
--- a/src/pr/adapters/website.js
+++ b/src/pr/adapters/website.js
@@ -42,9 +42,13 @@ function extractPeople(html) {
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})$/;
+ // Name-Case headings that are NOT names ("Crisis Communications", "Dream Job") — any
+ // word from this list disqualifies the candidate. Real ambiguity still lands in
+ // needs_verification for human review; this just cuts the obvious junk.
+ const NOT_NAME = /\b(job|jobs|career|careers|communication|communications|media|crisis|digital|social|marketing|advisor|advisors|strategy|strategies|services|solutions|relations|estate|group|team|about|contact|office|offices|leadership|management|partners|clients|projects|news|insights|events|home|search|menu|privacy|policy|our|the|and)\b/i;
for (let i = 0; i < lines.length; i++) {
const nm = lines[i].match(NAME_RE);
- if (!nm) continue;
+ if (!nm || NOT_NAME.test(nm[1])) continue;
// look ahead up to 2 lines for a title
for (let j = 1; j <= 2 && i + j < lines.length; j++) {
const cand = lines[i + j];
← eea88b78 pr-intelligence: docs (data-sources, research-ops, email-set
·
back to Rentv
·
pr-intelligence: operator review pass (256 orgs verified on 69355a23 →