优化业务逻辑和基础库的大标题区间和字段的识别精度
This commit is contained in:
@@ -128,7 +128,7 @@ export function SidebarPanel({ sourceUrl, jobInfo, onClose }: SidebarPanelProps)
|
||||
}
|
||||
|
||||
/** 开启循环扫描(每秒执行一次) */
|
||||
const startScanLoop = (params: { siteMode?: "beisen"; sectionResults?: any[]; expandedResults?: any[] }) => {
|
||||
const startScanLoop = (params: { siteMode?: "beisen"; sectionResults?: any[]; expandedResults?: any[]; excludeTexts?: Set<string> }) => {
|
||||
stopScanLoop()
|
||||
const hasFullData = !!(params.sectionResults && params.expandedResults)
|
||||
// 立即执行一次
|
||||
@@ -459,10 +459,33 @@ export function SidebarPanel({ sourceUrl, jobInfo, onClose }: SidebarPanelProps)
|
||||
hideFillingOverlay() // 填写完成,移除遮罩
|
||||
|
||||
// 停止第一次循环扫描,开启第二次循环扫描(传入 sectionResults + expandedResults,分段精确)
|
||||
// 构建排除集合:从简历数据中提取所有值,避免将已填值误认为标签
|
||||
const scanExcludeTexts = new Set<string>()
|
||||
const scanResumeData = fillResult.resumeData || resumeData
|
||||
if (scanResumeData) {
|
||||
const main = scanResumeData.main
|
||||
if (main) {
|
||||
for (const val of Object.values(main)) {
|
||||
if (typeof val === "string" && val.trim()) scanExcludeTexts.add(val.trim())
|
||||
if (Array.isArray(val)) val.forEach((v) => { if (typeof v === "string" && v.trim()) scanExcludeTexts.add(v.trim()) })
|
||||
}
|
||||
}
|
||||
const expKeys: ("education" | "work" | "internship" | "project" | "competition")[] = ["education", "work", "internship", "project", "competition"]
|
||||
for (const sec of expKeys) {
|
||||
const items = scanResumeData[sec]
|
||||
if (!Array.isArray(items)) continue
|
||||
for (const item of items) {
|
||||
for (const val of Object.values(item as Record<string, any>)) {
|
||||
if (typeof val === "string" && val.trim()) scanExcludeTexts.add(val.trim())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
startScanLoop({
|
||||
siteMode: scanSiteMode,
|
||||
sectionResults: fillResult.sectionResults,
|
||||
expandedResults: fillResult.expandedResults,
|
||||
excludeTexts: scanExcludeTexts,
|
||||
})
|
||||
|
||||
} catch (e) {
|
||||
@@ -487,8 +510,49 @@ export function SidebarPanel({ sourceUrl, jobInfo, onClose }: SidebarPanelProps)
|
||||
const currentHost = window.location.hostname
|
||||
const siteMode = currentHost.includes("zhiye.com") ? "beisen" as const : undefined
|
||||
|
||||
// 从简历数据和缓存数据中提取所有已填值,构建排除集合
|
||||
// 避免 findLabelForInput 把这些值文字误认为是表单字段标签
|
||||
const excludeTexts = new Set<string>()
|
||||
if (resumeData) {
|
||||
// 主表字段值
|
||||
const main = resumeData.main
|
||||
if (main) {
|
||||
for (const val of Object.values(main)) {
|
||||
if (typeof val === "string" && val.trim()) excludeTexts.add(val.trim())
|
||||
if (Array.isArray(val)) val.forEach((v) => { if (typeof v === "string" && v.trim()) excludeTexts.add(v.trim()) })
|
||||
}
|
||||
}
|
||||
// 5大经历字段值
|
||||
const expSections: ("education" | "work" | "internship" | "project" | "competition")[] = ["education", "work", "internship", "project", "competition"]
|
||||
for (const sec of expSections) {
|
||||
const items = resumeData[sec]
|
||||
if (!Array.isArray(items)) continue
|
||||
for (const item of items) {
|
||||
for (const val of Object.values(item as Record<string, any>)) {
|
||||
if (typeof val === "string" && val.trim()) excludeTexts.add(val.trim())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 缓存中已记住的表单字段值
|
||||
if (cacheData.unfilledFormData) {
|
||||
for (const sec of cacheData.unfilledFormData as any[]) {
|
||||
const items = sec.formItems
|
||||
if (!items) continue
|
||||
if (sec.isExperience && Array.isArray(items)) {
|
||||
for (const seg of items) {
|
||||
if (Array.isArray(seg)) {
|
||||
for (const f of seg) { if (f.value && typeof f.value === "string") excludeTexts.add(f.value.trim()) }
|
||||
}
|
||||
}
|
||||
} else if (Array.isArray(items)) {
|
||||
for (const f of items) { if (f.value && typeof f.value === "string") excludeTexts.add(f.value.trim()) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 调用 fillStats 扫描页面所有字段
|
||||
const titleStats = scanPageFields({ siteMode })
|
||||
const titleStats = scanPageFields({ siteMode, excludeTexts })
|
||||
|
||||
// 提取非简历格式字段(B2阶段字段)
|
||||
const nonResumeData = extractNonResumeFields(titleStats)
|
||||
|
||||
Reference in New Issue
Block a user