Profile Extension: 'ExactMatchPrimarySourceMultiAcceptedTaxonomicMatch' tiebreaker
还没有人认领这个 Issue。
评估
调研方向
从 src/taxonopy/resolution/strategy/profiles/exact_match_primary_source_multi_accepted_taxonomic_match.py 开始,重点查看相同分类匹配失败的第 6 步和第 7 步。检查显示的 Cupidopsis jobates trace 和 Gnverifier 结果,然后为匹配之间的细微差异定义并验证一个谨慎的 tiebreaker,同时不允许过于宽松的匹配通过。
由索引模型根据 Issue 内容生成。
描述
Labels: enhancement
Exploring resolutions with FAILED_FORCED_INPUT status in resolved_taxa/taxonopy-v0.1/source=eol/part-00000-34c55989-4190-4247-86af-fac6c8b665bb-c000.snappy.resolved.parquet
One of the most significant failed reasons is "Tie between # results with equal taxonomic matches", failed by exact_match_primary_source_multi_accepted_taxonomic_match.py
Example:
Current resolution:
{
"uuid": "481396b6-9b8f-4aff-98f7-305fddfb56f3",
"scientific_name": "Cupidopsis jobates (Hopffer, 1855)",
"common_name": "",
"source_dataset": "eol",
"source_id": "20451407",
"resolution_status": "FAILED_FORCED_INPUT",
"kingdom": "Metazoa",
"phylum": "Arthropoda",
"class": "Insecta",
"order": "Lepidoptera",
"family": "Lycaenidae",
"genus": "Pterygota",
"species": "Cupidopsis jobates (Hopffer, 1855)",
"resolution_path": "RESOLVED",
"resolution_strategy": "ForceFailedToInput",
"final_query_term": "Cupidopsis jobates (Hopffer, 1855)",
"final_query_rank": "species",
"final_data_source_id": 11,
"meta_matched_current_name": null,
"meta_matched_result_id": null,
"meta_matched_full_name": null,
"meta_author_disambiguation": null,
"meta_accepted_record_id": null,
"meta_synonym_matched": null,
"meta_accepted_name": null,
"meta_fuzzy_matched_name": null,
"meta_edit_distance": null
}
Trace Entry:
{
"entry": {
"uuid": "481396b6-9b8f-4aff-98f7-305fddfb56f3",
"scientific_name": "Cupidopsis jobates (Hopffer, 1855)",
"common_name": "",
"kingdom": "Metazoa",
"phylum": "Arthropoda",
"class_": "Insecta",
"order": "Lepidoptera",
"family": "Lycaenidae",
"genus": "Pterygota",
"species": "Cupidopsis jobates (Hopffer, 1855)",
"source_dataset": "eol",
"source_id": "20451407"
},
"group": {
"entry_uuids": [
"2c46684b-496b-4d64-b487-4251ebdbe310",
"aa1a82a2-2d50-4681-b7e3-3768c674799e",
"64f7a51d-a0c9-4f34-8b24-1ea6d1e3fab1",
"083599e4-414e-4f5a-97f0-f41ed97e0002",
"60abecc6-b094-41b4-a186-3d9a44f29f37",
"1e67550c-f952-4cdc-a24c-4faf655f9f61",
"43242bc9-074d-4615-b15e-ea9840371518",
"481396b6-9b8f-4aff-98f7-305fddfb56f3",
"56e23a31-b5b3-474f-9e8f-801c44a7948d",
"43a67fdd-261d-42c9-b6d6-d4fd3ec9a023"
],
"kingdom": "Metazoa",
"phylum": "Arthropoda",
"class_": "Insecta",
"order": "Lepidoptera",
"family": "Lycaenidae",
"genus": "Pterygota",
"species": "Cupidopsis jobates (Hopffer, 1855)",
"scientific_name": "Cupidopsis jobates (Hopffer, 1855)",
"common_names": [],
"key": "b23906440604c734648a630620dff46874353e48f5e4723a9f542dc8989f657b",
"group_count": 10
},
"query_plan": {
"term": "Cupidopsis jobates (Hopffer, 1855)",
"rank": "species",
"source_id": 11
},
"resolution_attempts": [
{
"key": "4391cf2052ad6c22c8f18db002d45191e37b9a11d59d54b2695de16e7576eba8",
"entry_group_key": "b23906440604c734648a630620dff46874353e48f5e4723a9f542dc8989f657b",
"query_term": "Cupidopsis jobates (Hopffer, 1855)",
"query_rank": "species",
"data_source_id": 11,
"status": "FAILED",
"is_successful": false,
"is_retry": false,
"previous_key": null,
"resolution_strategy_name": "ExactMatchPrimarySourceMultiAcceptedTaxonomicMatch",
"failure_reason": "Tie between 2 results with equal taxonomic matches",
"resolved_classification": null,
"error": null,
"metadata": {
"match_count": 5,
"total_results": 2,
"tied_results_count": 2,
"tied_record_ids": [
"1929059",
"9894815"
],
"selection_method": "taxonomic_hierarchy_match_tie"
}
}
]
}
This profile strategy currently simply fails when it encounters ambiguities like the one shown here.
However, the match terms are not exactly the same; there are slight differences (e.g. a single-letter misspelling, including or omitting an author/year suffix, resolved at higher ranks).
Gnverifier Verification:
{
"id": "af6739ea-1c38-5677-8dc9-125c112b1a9c",
"name": "Cupidopsis jobates (Hopffer, 1855)",
"cardinality": 2,
"matchType": "Exact",
"results": [
{
"dataSourceId": 11,
"dataSourceTitleShort": "GBIF Backbone Taxonomy",
"curation": "AutoCurated",
"recordId": "1929059",
"outlink": "https://gbif.org/species/1929059",
"entryDate": "2024-01-11",
"sortScore": 9.427395485947873,
"matchedNameID": "af6739ea-1c38-5677-8dc9-125c112b1a9c",
"matchedName": "Cupidopsis jobates (Hopffer, 1855)",
"matchedCardinality": 2,
"matchedCanonicalSimple": "Cupidopsis jobates",
"matchedCanonicalFull": "Cupidopsis jobates",
"currentRecordId": "1929059",
"currentNameId": "af6739ea-1c38-5677-8dc9-125c112b1a9c",
"currentName": "Cupidopsis jobates (Hopffer, 1855)",
"currentCardinality": 2,
"currentCanonicalSimple": "Cupidopsis jobates",
"currentCanonicalFull": "Cupidopsis jobates",
"taxonomicStatus": "Accepted",
"isSynonym": false,
"classificationPath": "Animalia|Arthropoda|Insecta|Lepidoptera|Lycaenidae|Cupidopsis|Cupidopsis jobates",
"classificationRanks": "kingdom|phylum|class|order|family|genus|species",
"classificationIds": "1|54|216|797|5473|1929057|1929059",
"editDistance": 0,
"stemEditDistance": 0,
"matchType": "Exact",
"scoreDetails": {
"cardinalityScore": 1,
"infraSpecificRankScore": 0,
"fuzzyLessScore": 1,
"curatedDataScore": 0.33333334,
"authorMatchScore": 1,
"acceptedNameScore": 1,
"parsingQualityScore": 1
}
},
{
"dataSourceId": 11,
"dataSourceTitleShort": "GBIF Backbone Taxonomy",
"curation": "AutoCurated",
"recordId": "9894815",
"outlink": "https://gbif.org/species/9894815",
"entryDate": "2024-01-11",
"sortScore": 9.387489602933003,
"matchedNameID": "95cc66ca-a6a8-5d90-8e33-834402e866b4",
"matchedName": "Cupidopsis iobates",
"matchedCardinality": 2,
"matchedCanonicalSimple": "Cupidopsis iobates",
"matchedCanonicalFull": "Cupidopsis iobates",
"currentRecordId": "9894815",
"currentNameId": "95cc66ca-a6a8-5d90-8e33-834402e866b4",
"currentName": "Cupidopsis iobates",
"currentCardinality": 2,
"currentCanonicalSimple": "Cupidopsis iobates",
"currentCanonicalFull": "Cupidopsis iobates",
"taxonomicStatus": "Accepted",
"isSynonym": false,
"classificationPath": "Animalia|Arthropoda|Insecta|Lepidoptera|Lycaenidae|Cupidopsis|Cupidopsis iobates",
"classificationRanks": "kingdom|phylum|class|order|family|genus|species",
"classificationIds": "1|54|216|797|5473|1929057|9894815",
"editDistance": 1,
"stemEditDistance": 0,
"matchType": "Fuzzy",
"scoreDetails": {
"cardinalityScore": 1,
"infraSpecificRankScore": 0,
"fuzzyLessScore": 0.6666667,
"curatedDataScore": 0.33333334,
"authorMatchScore": 0.14285715,
"acceptedNameScore": 1,
"parsingQualityScore": 1
}
}
],
"curation": "AutoCurated"
}
But the profile defines the tie strategy that if there are multiple ‘best matches’ (taxonomic matches with the highest score that have the most specific ranks, from species to fianl_query_rank), they are tied and fail by it. According to step 6 and step 7 in exact_match_primary_source_multi_accepted_taxonomic_match.py
Consider adding a separate tiebreaker when a tie is detected, to find the best match among those slight differences, but be careful not to be too lax in letting things through.
- 主要语言
- Python
- 星标
- 19
- 派生
- 0
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Imageomics/TaxonoPy 的其他 Issue
-
难度 1/5 1 小时以内 新手友好度 78/100
Imageomics/TaxonoPy#35 ·
-
enhancement
难度 4/5 3-5 天 新手友好度 45/100
Imageomics/TaxonoPy#38 ·
-
documentation
难度 3/5 1-2 天 新手友好度 55/100
Imageomics/TaxonoPy#34 ·
-
Trace command package version silent cache misses可能重新可做 @thompsonmj 于 222 天前认领,目前没有进行中的 PR。 未关闭enhancement
Imageomics/TaxonoPy#29 · 已指派 1 人 ·
-
edge case
难度 5/5 一周以上 新手友好度 35/100
Imageomics/TaxonoPy#25 ·
查看 Imageomics/TaxonoPy 的全部 Issue
相似的 Issue
-
customer-reported
难度 2/5 1-3 小时 新手友好度 68/100
Azure/azure-cli#34150 · 1 条评论 ·
维护者通常 1 天内回复
-
community-request
难度 1/5 1 小时以内 新手友好度 95/100
NVIDIA-NeMo/Curator#2464 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 88/100
WeblateOrg/translation-finder#1099 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
trezor/trezor-firmware#7997 ·
维护者通常 2 天内回复
-
难度 2/5 1-3 小时 新手友好度 88/100
维护者通常 1 天内回复