Hanni und Nanni ist nicht Hanni und Nanni 3
Deine drei Fälle haben eines gemeinsam, und es ist nicht das, was ich zuerst vermutet hatte: keiner der Dateinamen nennt ein Jahr. Der Riegel von gestern greift deshalb nicht. Gemessen, woran es wirklich liegt. Bei TMDB heisst der Film „Hanni & Nanni", auf der Platte „Hanni und Nanni". Das Kaufmanns-Und fällt im Vergleichs- schlüssel als Sonderzeichen heraus, das Wort „und" bleibt stehen — die Namensgleichheit griff also nie. Gewählt wurde stattdessen der erstbeste Treffer, und das war „Hanni & Nanni 3". Der richtige stand auf Platz zwei, und alle vier Treffer hatten dieselbe Beliebtheit: die Reihenfolge war Zufall. Bindewörter zwischen zwei Namen zählen jetzt nicht mehr mit — gestrichen, nicht übersetzt, sonst bliebe „Batman and Robin" aussen vor. Am Wortanfang bleiben sie stehen: „Und dann kam Polly" ist kein „dann kam Polly". Und die Suche vergleicht über den Schlüssel statt Zeichen für Zeichen. Das verhindert aber nur Neues. Was schon zusammengelegt ist, bleibt es — deshalb gibt es jetzt „Eigener Film": eine Datei löst sich aus ihrem Titel und wird ein eigener Eintrag, mit dem Titel aus dem Dateinamen und ohne Kennung. Eine zu raten hiesse, denselben Fehler zu wiederholen; so steht sie unter „Ohne Zuordnung" und ist in zwei Klicks richtig. Der Super-Mario-Fall liegt anders: beide Titel treffen heute richtig. Der steckt noch aus einem früheren Lauf fest und braucht das Trennen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c3124ba27c
commit
58e06d0539
@@ -1,4 +1,5 @@
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Flaro.Core.Library;
|
||||
@@ -61,7 +62,41 @@ public static class Titelschluessel
|
||||
}
|
||||
}
|
||||
|
||||
return bau.ToString().TrimEnd();
|
||||
return OhneBindewort(bau.ToString().TrimEnd());
|
||||
}
|
||||
|
||||
/// <summary>Die Wörter, die nur zwei Namen verbinden.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Weil „&" verschwindet und „und" stehenbleibt.</b> TMDB führt
|
||||
/// den Film als „Hanni & Nanni", auf der Platte heisst er „Hanni und
|
||||
/// Nanni" — das Kaufmanns-Und fällt als Sonderzeichen heraus, das Wort
|
||||
/// nicht, und die beiden Schlüssel gingen auseinander. Die Namensgleichheit
|
||||
/// griff deshalb nicht, und gewählt wurde stattdessen der erstbeste
|
||||
/// Treffer: „Hanni & Nanni 3". Gemessen am echten Dienst — der richtige
|
||||
/// Film stand auf Platz zwei.
|
||||
///
|
||||
/// <b>Gestrichen statt umgeschrieben.</b> „&" nach „und" zu übersetzen
|
||||
/// hiesse, sich für eine Sprache zu entscheiden; „Batman and Robin" bliebe
|
||||
/// dann aussen vor. Ohne das Bindewort passt beides.
|
||||
/// </remarks>
|
||||
private static readonly string[] Bindewoerter = ["und", "and", "et", "e", "y"];
|
||||
|
||||
private static string OhneBindewort(string schluessel)
|
||||
{
|
||||
if (schluessel.Length == 0) return schluessel;
|
||||
|
||||
var worte = schluessel.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
if (worte.Length < 3) return schluessel; // „Ich und" ist kein Bindewort-Fall
|
||||
|
||||
// **Nur zwischen zwei Wörtern, nie am Rand.** „Und dann kam Polly"
|
||||
// fängt mit einem Bindewort an, und das gehört zum Titel.
|
||||
var behalten = worte
|
||||
.Where((w, i) => i == 0 || i == worte.Length - 1
|
||||
|| !Bindewoerter.Contains(w, StringComparer.Ordinal))
|
||||
.ToArray();
|
||||
|
||||
return string.Join(' ', behalten);
|
||||
}
|
||||
|
||||
/// <summary>Ob zwei Fundstücke derselbe Titel sind.</summary>
|
||||
|
||||
Reference in New Issue
Block a user