„highschool musical 3" fand TMDB nicht, „high school musical 3" schon
Drei gemeldete Fälle, alle an TMDB nachgemessen statt vermutet: highschool musical 3 0 Treffer high school musical 3 2 Treffer, der richtige zuerst Harry Potter im Orden des Phoenix 0 Treffer Harry Potter 20 Treffer, der richtige darunter dr dolittle 13 Treffer, der richtige zuerst Der fehlende Punkt bei Dr. Dolittle war nie das Problem — diese Vermutung ist in Suchvarianten.cs festgehalten, damit sie nicht wiederkommt. Die Suche versucht jetzt der Reihe nach: den Titel wie er dasteht, dann das längste Wort an jeder Stelle getrennt (von der Mitte nach aussen, ohne Wörterbuch — „highschool" trifft nach 2 Versuchen, „jurassicpark" nach 5), dann von hinten gekürzt, bis zwei Worte übrig sind. Höchstens zehn Anfragen, und nur dann, wenn die erste gar nichts brachte. Und die Treffer werden nach Ähnlichkeit zum gesuchten Titel sortiert, nicht nach Beliebtheit. Über gemeinsame Worte ohne Akzente: so trennt „Harry Potter" den „Orden des Phönix" von „Harry Potter: Fireplace", und „Phoenix" findet „Phönix". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
4b0323f955
commit
aeaf6eb578
@@ -222,3 +222,75 @@ public class TrefferwahlTests
|
||||
Assert.That(film!.ProviderId, Is.EqualTo(1));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Was versucht wird, wenn der Titel so nicht gefunden wird.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Die Fälle stammen aus dem echten Bestand und sind an TMDB nachgemessen.</b>
|
||||
/// „highschool musical 3" liefert dort null Treffer, „high school musical 3"
|
||||
/// zwei. „Harry Potter im Orden des Phoenix" null, „Harry Potter" zwanzig.
|
||||
/// Und „dr dolittle" dreizehn — der fehlende Punkt war nie das Problem.
|
||||
/// </remarks>
|
||||
public class SuchvariantenTests
|
||||
{
|
||||
[Test]
|
||||
public void Der_Titel_selbst_kommt_zuerst()
|
||||
{
|
||||
Assert.That(Suchvarianten.Fuer("Dr. Dolittle").First(), Is.EqualTo("Dr. Dolittle"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Ein_zusammengeschriebenes_Wort_wird_getrennt()
|
||||
{
|
||||
Assert.That(Suchvarianten.Fuer("highschool musical 3"),
|
||||
Does.Contain("high school musical 3"));
|
||||
}
|
||||
|
||||
/// <summary>Von der Mitte nach aussen — der richtige Schnitt kommt früh.</summary>
|
||||
[Test]
|
||||
public void Der_richtige_Schnitt_kommt_in_den_ersten_Versuchen()
|
||||
{
|
||||
var alle = Suchvarianten.Fuer("highschool musical 3").ToList();
|
||||
Assert.That(alle.IndexOf("high school musical 3"), Is.LessThanOrEqualTo(3));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Hintere_Worte_fallen_weg()
|
||||
{
|
||||
Assert.That(Suchvarianten.Fuer("Harry Potter im Orden des Phoenix"),
|
||||
Does.Contain("Harry Potter"));
|
||||
}
|
||||
|
||||
/// <summary>Unter zwei Worten hört es auf — „Harry" allein taugt nicht.</summary>
|
||||
[Test]
|
||||
public void Ein_einzelnes_Wort_wird_nicht_gesucht()
|
||||
{
|
||||
Assert.That(Suchvarianten.Fuer("Harry Potter im Orden des Phoenix"),
|
||||
Does.Not.Contain("Harry"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Es_wird_nicht_endlos_probiert()
|
||||
{
|
||||
Assert.That(Suchvarianten.Fuer("Ein ziemlich langer Titel mit vielen Worten darin"),
|
||||
Has.Exactly(10).Items);
|
||||
}
|
||||
|
||||
/// <summary>Phoenix findet Phönix: die Akzente fallen weg.</summary>
|
||||
[Test]
|
||||
public void Aehnlichkeit_sieht_ueber_Akzente_hinweg()
|
||||
{
|
||||
var richtig = Suchvarianten.Aehnlichkeit(
|
||||
"Harry Potter im Orden des Phoenix", "Harry Potter und der Orden des Phönix");
|
||||
var falsch = Suchvarianten.Aehnlichkeit(
|
||||
"Harry Potter im Orden des Phoenix", "Harry Potter: Fireplace");
|
||||
|
||||
Assert.That(richtig, Is.GreaterThan(falsch));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Nichts_Gemeinsames_ergibt_null()
|
||||
{
|
||||
Assert.That(Suchvarianten.Aehnlichkeit("Dune", "Alles steht Kopf"), Is.Zero);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user