Naturalize caption character expressions
This commit is contained in:
@@ -94,6 +94,26 @@ def couple_subject_sentence(
|
||||
return f"{subject} are adults"
|
||||
|
||||
|
||||
def expression_detail(expression: Any, clean_text: Callable[[Any], str]) -> tuple[str, bool]:
|
||||
text = clean_text(expression)
|
||||
if not text:
|
||||
return "", False
|
||||
has_character_labels = bool(
|
||||
re.search(
|
||||
r"\b(?:Woman|Man) [A-Z] has\b|\bthe (?:woman|man) has\b",
|
||||
text,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
)
|
||||
text = re.sub(
|
||||
r"\b((?:Woman|Man) [A-Z]|the (?:woman|man)) has\b",
|
||||
r"\1 with",
|
||||
text,
|
||||
flags=re.IGNORECASE,
|
||||
)
|
||||
return text, has_character_labels
|
||||
|
||||
|
||||
def single_from_row_result(
|
||||
request: CaptionMetadataRouteRequest,
|
||||
deps: CaptionMetadataRouteDependencies,
|
||||
@@ -148,7 +168,11 @@ def single_from_row_result(
|
||||
if pose:
|
||||
parts.append(f"{pronoun(subject)} is {deps.pose_clause(pose)}")
|
||||
if expression:
|
||||
parts.append(f"{possessive_pronoun(subject)} expression is {expression}")
|
||||
expression, labeled_expression = expression_detail(expression, deps.clean_text)
|
||||
if labeled_expression:
|
||||
parts.append(f"The expression detail shows {expression}")
|
||||
else:
|
||||
parts.append(f"{possessive_pronoun(subject)} expression is {expression}")
|
||||
if scene:
|
||||
parts.append(f"The setting is {scene}")
|
||||
if deps.detail_allows(detail_level) and camera_scene:
|
||||
@@ -204,7 +228,11 @@ def couple_from_row_result(
|
||||
if deps.detail_allows(detail_level) and camera_scene:
|
||||
parts.append(camera_scene)
|
||||
if expression:
|
||||
parts.append(f"Their expressions are {expression}")
|
||||
expression, labeled_expression = expression_detail(expression, deps.clean_text)
|
||||
if labeled_expression:
|
||||
parts.append(f"The expression details show {expression}")
|
||||
else:
|
||||
parts.append(f"Their expressions are {expression}")
|
||||
if deps.detail_allows(detail_level) and composition:
|
||||
parts.append(f"The composition is {composition}")
|
||||
if keep_style and style:
|
||||
@@ -258,7 +286,11 @@ def configured_cast_from_row_result(
|
||||
if scene:
|
||||
scene_bits.append(f"set in {scene}")
|
||||
if expression:
|
||||
scene_bits.append(f"with {expression}")
|
||||
expression, labeled_expression = expression_detail(expression, deps.clean_text)
|
||||
if labeled_expression:
|
||||
scene_bits.append(f"with expression details showing {expression}")
|
||||
else:
|
||||
scene_bits.append(f"with {expression}")
|
||||
if composition:
|
||||
scene_bits.append(f"framed as {composition}")
|
||||
if scene_bits and deps.detail_allows(detail_level):
|
||||
@@ -299,7 +331,11 @@ def group_or_layout_from_row_result(
|
||||
if primary == "layout scene":
|
||||
parts = [f"{deps.cap_first(subject)} is arranged as an adults-only designed illustration layout"]
|
||||
if expression:
|
||||
parts.append(f"The featured expression is {expression}")
|
||||
expression, labeled_expression = expression_detail(expression, deps.clean_text)
|
||||
if labeled_expression:
|
||||
parts.append(f"The featured expression details show {expression}")
|
||||
else:
|
||||
parts.append(f"The featured expression is {expression}")
|
||||
else:
|
||||
parts = [f"{deps.cap_first(subject)} includes adults"]
|
||||
if age:
|
||||
@@ -307,7 +343,11 @@ def group_or_layout_from_row_result(
|
||||
if item:
|
||||
parts.append(f"They wear {item}")
|
||||
if expression:
|
||||
parts.append(f"They show {expression}")
|
||||
expression, labeled_expression = expression_detail(expression, deps.clean_text)
|
||||
if labeled_expression:
|
||||
parts.append(f"Their expressions show {expression}")
|
||||
else:
|
||||
parts.append(f"They show {expression}")
|
||||
if scene:
|
||||
parts.append(f"The setting is {scene}")
|
||||
if deps.detail_allows(detail_level) and camera_scene:
|
||||
|
||||
Reference in New Issue
Block a user