year_scoring
¶
Release scoring system for music metadata evaluation.
This module contains the core scoring algorithm that evaluates music releases to determine the most likely original release year. The scoring system considers multiple factors including artist/album matching, release characteristics, contextual information, and source reliability.
Extracted from the legacy external API service to enable modular usage across different API providers while preserving the sophisticated scoring logic.
ArtistPeriodContext
¶
Bases: TypedDict
Context about an artist's active period.
ReleaseScorer
¶
ReleaseScorer(
scoring_config=None,
min_valid_year=1900,
definitive_score_threshold=85,
console_logger=None,
remaster_keywords=None,
major_market_codes=None,
)
Release scoring system for evaluating music metadata quality.
This class implements the sophisticated scoring algorithm that evaluates releases from different sources to determine the most likely original release. The algorithm considers multiple factors and applies configuration-driven scoring rules to ensure consistent and accurate results.
Attributes:
| Name | Type | Description |
|---|---|---|
scoring_config |
ScoringConfig
|
Configuration dictionary with scoring parameters |
min_valid_year |
Minimum valid year for releases (default: 1900) |
|
current_year |
Current year for validation (default: current system year) |
|
definitive_score_threshold |
Threshold for considering a score definitive |
|
artist_period_context |
ArtistPeriodContext | None
|
Optional context about artist's active period |
console_logger |
Logger for debug output |
Initialize the release scorer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scoring_config
|
ScoringConfig | None
|
Typed scoring parameters (uses defaults if None) |
None
|
min_valid_year
|
int
|
Minimum valid year for releases |
1900
|
definitive_score_threshold
|
int
|
Threshold for definitive scoring |
85
|
console_logger
|
Logger | None
|
Optional logger for debug output |
None
|
remaster_keywords
|
list[str] | None
|
Keywords to identify edition suffixes |
None
|
major_market_codes
|
list[str] | None
|
Country codes for major market bonus |
None
|
Source code in src/services/api/year_scoring.py
set_artist_period_context
¶
Set the artist activity period context for scoring.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
context
|
ArtistPeriodContext | None
|
Dictionary with start_year and end_year information |
required |
Source code in src/services/api/year_scoring.py
clear_artist_period_context
¶
score_original_release
¶
score_original_release(
release,
artist_norm,
album_norm,
*,
artist_region,
source="unknown",
album_orig=None
)
REVISED scoring function prioritizing original release indicators (v3).
This is the core scoring algorithm that evaluates a release against multiple criteria to determine how likely it is to be the original release of an album.
The scoring considered: 1. Core match quality (artist/album name matching) 2. Release characteristics (type, status, reissue indicators) 3. Contextual factors (year validation, artist activity period) 4. Source reliability (MusicBrainz > iTunes > Discogs)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
release
|
dict[str, Any]
|
Dictionary containing release metadata |
required |
artist_norm
|
str
|
Normalized artist name for matching |
required |
album_norm
|
str
|
Normalized album name for matching |
required |
artist_region
|
str | None
|
Artist's region/country for bonus scoring |
required |
source
|
str
|
Source of the release data (musicbrainz, discogs, itunes) |
'unknown'
|
album_orig
|
str | None
|
Original album name with parentheses for edition stripping |
None
|
Returns:
| Type | Description |
|---|---|
int
|
Integer score (0-100+) indicating release quality/originality |
Source code in src/services/api/year_scoring.py
804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 | |
create_release_scorer
¶
create_release_scorer(
scoring_config=None,
min_valid_year=1900,
definitive_score_threshold=85,
console_logger=None,
remaster_keywords=None,
major_market_codes=None,
)
Create a configured ReleaseScorer instance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scoring_config
|
ScoringConfig | None
|
Typed scoring parameters (uses defaults if None) |
None
|
min_valid_year
|
int
|
Minimum valid year for releases |
1900
|
definitive_score_threshold
|
int
|
Threshold for definitive scoring |
85
|
console_logger
|
Logger | None
|
Optional logger for debug output |
None
|
remaster_keywords
|
list[str] | None
|
Keywords to identify edition suffixes |
None
|
major_market_codes
|
list[str] | None
|
Country codes for major market bonus |
None
|
Returns:
| Type | Description |
|---|---|
ReleaseScorer
|
Configured ReleaseScorer instance |