fix(backend): Umschrift-Muster toleranter, Kanji-Kuenstler ueber Romaji erkennbar
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
06b13caea9
commit
748b1446a2
3 files changed
+49
-4
No files matched your search
+23
-2
@@ -29,7 +29,17 @@ function buildTitleKeywords(title, romaji = '') {
|
||||
const alternativen = [escRe(title.trim())];
|
||||
const r = (romaji || '').trim();
|
||||
if (r && r.toLowerCase() !== title.trim().toLowerCase() && !JP_RE.test(r)) {
|
||||
alternativen.push(escRe(r).replace(/\s+/g, '[ -]?'));
|
||||
// Die Umschrift des Tokenizers ist EINE Schreibweise von mehreren. Uploader schreiben
|
||||
// "Shonen" statt "Shounen", setzen Bindestriche oder lassen den Katakana-Laengungsstrich
|
||||
// weg. Das Muster laesst diese Abweichungen zu — sonst waere die Alternative so streng,
|
||||
// dass sie praktisch nie greift.
|
||||
alternativen.push(
|
||||
escRe(r)
|
||||
.replace(/ー/g, '') // kommt in lateinischen Titeln nie vor
|
||||
.replace(/\s+/g, '[ -]?')
|
||||
.replace(/ou/gi, '(?:ou|o|\u014d|oh)')
|
||||
.replace(/uu/gi, '(?:uu|u|\u016b)')
|
||||
);
|
||||
}
|
||||
return [`(?:${alternativen.join('|')})`];
|
||||
}
|
||||
@@ -212,8 +222,19 @@ async function downloadTrack({ jobId, artist, rawArtist, albumArtist, title, alb
|
||||
// Ausnahme hatte ein japanischer Kuenstler ueberhaupt keine Identitaetspruefung.
|
||||
const artistMetaPart = (artistFirstWord.length >= 3 || (JP_RE.test(artistFirstWord) && artistFirstWord.length >= 2))
|
||||
? ` & artist ~= (?i)${escRe(artistFirstWord)}` : '';
|
||||
// Kanji-Kuenstler: Kanaele und Videotitel schreiben den Namen meist lateinisch. Ohne diese
|
||||
// Alternative bliebe fuer sie nur das artist-Feld in Originalschrift — und steht dort die
|
||||
// lateinische Schreibweise, faellt der richtige Upload durch.
|
||||
const artistRomajiWord = (JP_RE.test(artistFirstWord) && isTokenizerReady())
|
||||
? ((romajiForStorage(artistFirstWord) || '').split(/\s+/)
|
||||
.filter(w => w.length >= 3 && !JP_RE.test(w))
|
||||
.sort((a, b) => b.length - a.length)[0] || '')
|
||||
: '';
|
||||
const artistRomajiParts = artistRomajiWord
|
||||
? [` & channel ~= (?i)${escRe(artistRomajiWord)}`, ` & artist ~= (?i)${escRe(artistRomajiWord)}`]
|
||||
: [];
|
||||
// Alle Wege, den Kuenstler zu erkennen. yt-dlp verodert mehrere --match-filter.
|
||||
const identitaet = [artistChannelPart, artistMetaPart].filter(Boolean);
|
||||
const identitaet = [artistChannelPart, artistMetaPart, ...artistRomajiParts].filter(Boolean);
|
||||
|
||||
// Use a space (not " - ") between artist and title: this matches how users type
|
||||
// in the YTM search box and ranks the exact official track first. A dash skews
|
||||
|
||||
Reference in new issue
Block a user