update
This commit is contained in:
@@ -203,6 +203,21 @@ pub async fn phase_detect_person_in_tags(db: &Database) -> (DirtySet, usize) {
|
||||
let (primary, aliases) = title_parser::split_person_name_with_aliases(person_name);
|
||||
let final_name = if primary.is_empty() { person_name.clone() } else { primary };
|
||||
|
||||
// 跳过字符串 <= 2 的人名(太短不像人名)
|
||||
if final_name.chars().count() <= 2 {
|
||||
// 仍需将标签从 clean_tags 中排除(人名相关标签已被移除)
|
||||
let tags_json_new = serde_json::to_string(&clean_tags).unwrap_or_else(|_| "[]".to_string());
|
||||
let all_words_json = album.all_words.as_deref().unwrap_or("[]");
|
||||
let all_words_new: Vec<[String; 2]> = serde_json::from_str::<Vec<[String; 2]>>(all_words_json)
|
||||
.unwrap_or_default()
|
||||
.into_iter()
|
||||
.filter(|pair| !known_persons.contains(&pair[0].to_lowercase()))
|
||||
.collect();
|
||||
let words_json_new = serde_json::to_string(&all_words_new).unwrap_or_else(|_| "[]".to_string());
|
||||
db.update_album_tags(&album.id, &tags_json_new, &words_json_new).await;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 用事务包裹所有写入,避免逐条 autocommit 导致巨慢
|
||||
let mut tx = db.pool.begin().await.expect("begin tx");
|
||||
db.update_album_person_with_tx(&mut tx, &album.id, person_name, &final_name).await;
|
||||
@@ -386,6 +401,12 @@ pub async fn phase_parse_dirty(db: &Database, dirty_set: &DirtySet) -> (usize, u
|
||||
if let Some(name) = &best_person {
|
||||
let (primary, aliases) = title_parser::split_person_name_with_aliases(name);
|
||||
let final_name = if primary.is_empty() { name.clone() } else { primary };
|
||||
|
||||
// 跳过字符串 <= 2 的人名(太短不像人名)
|
||||
if final_name.chars().count() <= 2 {
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut tx = db.pool.begin().await.expect("begin tx");
|
||||
db.update_album_person_with_tx(&mut tx, &album.id, name, &final_name).await;
|
||||
let pid = db.insert_person_with_tx(&mut tx, &final_name, None).await;
|
||||
|
||||
@@ -340,7 +340,8 @@ pub fn is_excluded_name(name: &str) -> bool {
|
||||
pub fn is_likely_person_name(name: &str) -> bool {
|
||||
let name = name.trim();
|
||||
if name.is_empty() { return false; }
|
||||
if name.len() < 2 { return false; }
|
||||
// 字符数必须 >= 3(人名至少需要 2 个中文字或 3 个英文字母)
|
||||
if name.chars().count() <= 2 { return false; }
|
||||
|
||||
// 先排除已知的非人名
|
||||
if is_excluded_name(name) { return false; }
|
||||
|
||||
Reference in New Issue
Block a user