feat(segmentation): quote anchors so a re-extraction costs a re-anchor
This commit is contained in:
parent
9e9bb8645d
commit
c54e8383df
4 changed files with 244 additions and 8 deletions
|
|
@ -76,6 +76,12 @@ RULE_TABLE_BLOCK = "rule:table-block"
|
|||
RULE_POPPLER_SIZE_AND_BOLD = "rule:poppler-size-and-bold"
|
||||
RULE_NAMES = (RULE_HEADING, RULE_TABLE_BLOCK, RULE_POPPLER_SIZE_AND_BOLD)
|
||||
|
||||
#: How many characters of context each side of a quote anchor carries. Enough
|
||||
#: to separate two occurrences of a repeated heading, short enough that an
|
||||
#: edit NEAR a segment does not invalidate the anchor FOR it -- the anchor
|
||||
#: exists to survive shifts, so making it fragile would defeat it.
|
||||
ANCHOR_CONTEXT = 48
|
||||
|
||||
#: Norwegian and English function words. A heading made only of these names no
|
||||
#: unit of knowledge -- it is a connective that happened to sit on its own line.
|
||||
#: Topic 2's stop-word gate, and the only place this tool judges wording.
|
||||
|
|
@ -278,6 +284,16 @@ def build_plan(
|
|||
"okf_type": okf_type,
|
||||
"span": [candidate.start, candidate.end],
|
||||
"ingested_at": proposed_at,
|
||||
# The offsets are a hint the anchor may correct. Written at
|
||||
# proposal time because that is the only moment the text the
|
||||
# adjudicator will judge and the offsets naming it are known
|
||||
# to agree -- reconstructing it later would anchor to whatever
|
||||
# the extraction had already become.
|
||||
"anchor": {
|
||||
"quote": text[candidate.start : candidate.end],
|
||||
"prefix": text[max(0, candidate.start - ANCHOR_CONTEXT) : candidate.start],
|
||||
"suffix": text[candidate.end : candidate.end + ANCHOR_CONTEXT],
|
||||
},
|
||||
# PROPOSED first, then the rule that proposed it. `derived` is
|
||||
# this library's existing "which of these did we infer" marker,
|
||||
# so a consumer that already distrusts derived fields
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue