feat: 扩大体量和显影参数范围 #4

Merged
mattuy merged 2 commits from feat/wide-volume-range into main 2026-07-25 09:04:27 +00:00
3 changed files with 17 additions and 9 deletions
Showing only changes of commit 143823f953 - Show all commits
+2 -2
View File
@@ -74,10 +74,10 @@ app.innerHTML = `
<label class="control" for="retention-control"> <label class="control" for="retention-control">
<span class="control__heading"> <span class="control__heading">
<span>显影</span> <span>显影</span>
<output id="retention-value">14%</output> <output id="retention-value">15%</output>
</span> </span>
<span class="control__hint">留下多少原文词语</span> <span class="control__hint">留下多少原文词语</span>
<input id="retention-control" type="range" min="5" max="40" value="14" /> <input id="retention-control" type="range" min="0" max="100" value="15" />
</label> </label>
<label class="control" for="volume-control"> <label class="control" for="volume-control">
+8
View File
@@ -36,6 +36,14 @@ describe('selectKeywords', () => {
expect(candidates.some((candidate) => candidate.selected)).toBe(true) expect(candidates.some((candidate) => candidate.selected)).toBe(true)
}) })
it('显影 0% 不保留词语,100% 保留全部候选词', () => {
const hidden = selectKeywords(SOURCE, 0, 1)
const revealed = selectKeywords(SOURCE, 100, 1)
expect(hidden.some((candidate) => candidate.selected)).toBe(false)
expect(revealed.every((candidate) => candidate.selected)).toBe(true)
})
}) })
describe('generateMosaic', () => { describe('generateMosaic', () => {
+5 -5
View File
@@ -345,12 +345,12 @@ export function selectKeywords(
return candidates return candidates
} }
const desiredCount = Math.min( const desiredCount =
retention <= 0
? 0
: Math.min(
candidates.length, candidates.length,
Math.max( Math.max(1, Math.ceil(candidates.length * (retention / 100))),
candidates.length >= 4 ? 2 : 1,
Math.round(candidates.length * (retention / 100)),
),
) )
const ranked = [...candidates].sort( const ranked = [...candidates].sort(
(left, right) => right.score - left.score || left.start - right.start, (left, right) => right.score - left.score || left.start - right.start,