companies: Aufrufe als Veröffentlichungsnachweis im Altbestand werten

Das Altsystem hat 2009–2018 rund 126 000 Meldungen auf `rejected` gesetzt,
83 000 davon mit Aufrufen — die waren online und sind pauschal offline
genommen worden. Wer nur `status = published` zählt, stellt pr4you, Blödorn
und Crossover Point mit Hunderten Meldungen neben yahoo@yahoo.com.

Eine Firma gilt jetzt als veröffentlicht, wenn sie eine Meldung mit
`published` ODER `hits > 0` hat. Nie veröffentlicht: 23 → 7 Adressen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-11 10:20:57 +00:00
parent 8a1e79aebb
commit 77318dcb79
3 changed files with 93 additions and 3 deletions

View file

@ -40,7 +40,8 @@ class CompanyAddressClassifier
* `pr@deutsche-stadtauskunft.ag` trägt 133 Namen und hat trotzdem 134
* Firmen mit veröffentlichten Meldungen. Das trennscharfe Signal ist die
* Veröffentlichung: Hinter einer Platzhalter- oder Wegwerfadresse ist nie
* etwas erschienen, hinter einer Agentur laufend.
* etwas erschienen, hinter einer Agentur laufend — auch wenn das Jahre her
* ist und die Meldungen heute offline sind (siehe `classifyAll()`).
*/
private const JunkPublishedRatio = 0.05;
@ -84,14 +85,24 @@ class CompanyAddressClassifier
*/
public function classifyAll(int $collectionThreshold): array
{
// Einmal alle Firmen mit mindestens einer veröffentlichten Meldung,
// Einmal alle Firmen, die JEMALS eine Meldung veröffentlicht haben,
// statt je Firma eine korrelierte Unterabfrage: Das läuft über den
// gesamten Bestand, und das ist eine Abfrage gegen hunderttausend.
//
// „Jemals" heißt: heute `published` ODER Aufrufe gezählt. Der Status
// allein trügt beim Altbestand — das Altsystem hat 2009–2018 rund
// 126 000 Meldungen auf `rejected` gesetzt, 83 000 davon mit Aufrufen.
// Eine abgelehnte Meldung wird nie aufgerufen; die waren online und
// sind später pauschal offline genommen worden. Ohne die Aufrufe
// stünden pr4you, Blödorn oder Crossover Point mit Hunderten Meldungen
// aus 2006–2011 als „nie veröffentlicht" neben `yahoo@yahoo.com`.
$withPublication = array_flip(
PressRelease::query()
->withoutGlobalScope(PortalScope::class)
->where('status', 'published')
->whereNotNull('company_id')
->where(function ($query): void {
$query->where('status', 'published')->orWhere('hits', '>', 0);
})
->distinct()
->pluck('company_id')
->all()