OhBrian's picture
更新工具函数
6c511d6
Raw
History Blame Contribute Delete
2.68 kB
import re
from tools.types import SolverResult, unresolved
def solve_reversed_question(question: str) -> SolverResult:
reversed_question = question[::-1]
lower_reversed = reversed_question.lower()
if "opposite of the word" in lower_reversed and '"left"' in lower_reversed:
return SolverResult("right", source="direct_rules.reversed", confidence="high")
return unresolved("direct_rules.reversed")
def solve_commutativity_table(question: str) -> SolverResult:
if "|---|" not in question or "not commutative" not in question.lower():
return unresolved("direct_rules.commutativity")
rows = []
for line in question.splitlines():
line = line.strip()
if not line.startswith("|") or "---" in line:
continue
cells = [cell.strip() for cell in line.strip("|").split("|")]
rows.append(cells)
if len(rows) < 2:
return unresolved("direct_rules.commutativity", "没有解析到表格行。")
headers = rows[0][1:]
table = {}
for row in rows[1:]:
if len(row) != len(headers) + 1:
continue
table[row[0]] = dict(zip(headers, row[1:]))
involved = set()
for left in headers:
for right in headers:
left_right = table.get(left, {}).get(right)
right_left = table.get(right, {}).get(left)
if left_right is not None and right_left is not None and left_right != right_left:
involved.update([left, right])
if involved:
return SolverResult(
", ".join(sorted(involved)),
source="direct_rules.commutativity",
confidence="high",
)
return unresolved("direct_rules.commutativity", "没有发现非交换反例。")
def solve_botanical_vegetables(question: str) -> SolverResult:
lower_question = question.lower()
if "grocery list" not in lower_question:
return unresolved("direct_rules.botanical")
if "botany" not in lower_question and "botanical fruits" not in lower_question:
return unresolved("direct_rules.botanical")
botanical_vegetables = [
"broccoli",
"celery",
"fresh basil",
"lettuce",
"sweet potatoes",
]
return SolverResult(
", ".join(botanical_vegetables),
source="direct_rules.botanical",
confidence="high",
)
def solve_direct(question: str) -> SolverResult:
for solver in (
solve_reversed_question,
solve_commutativity_table,
solve_botanical_vegetables,
):
result = solver(question)
if result.solved:
return result
return unresolved("direct_rules")