130 lines
3.1 KiB
YAML
130 lines
3.1 KiB
YAML
---
|
|
# Provide an overview/outline/description of the math
|
|
# MathPlayer just tried to shorten things like "mfrac" by just saying "fraction"
|
|
# For mrow, it say up to 5 operands and just say "and n more things" for the rest
|
|
# This results in strings of varying length. Given human memory is about 7 words long,
|
|
# it would be better to aim for 7 words (maybe aim for a range of 6-10 words).
|
|
# Idea:
|
|
# Start by generating a terse form of the speech
|
|
# At every step when the strings are being joined
|
|
# a) if the #words <= 7, return the joined string
|
|
# b) otherwise, set verbosity to 'overview' and regenerate the expression and use that
|
|
# There is a balance that you want to maximize the info given, so 10 words is likely better then 3.
|
|
# That might mean that at the top level, we may want to allow the first few children to expand
|
|
|
|
- name: default
|
|
tag: math
|
|
match: "."
|
|
replace: [{x: "*[1]"}]
|
|
|
|
- name: default
|
|
tag: [mi, mn, mo, mtext]
|
|
match: "."
|
|
replace: [{x: text()}]
|
|
|
|
- name: default
|
|
tag: mfrac
|
|
match: "."
|
|
replace:
|
|
- test:
|
|
if: "IsNode(*[1], 'simple') and IsNode(*[2], 'simple')"
|
|
then:
|
|
- x: "*[1]"
|
|
- t: "over"
|
|
- x: "*[2]"
|
|
else:
|
|
- t: "fraction"
|
|
|
|
- name: default
|
|
tag: msqrt
|
|
match: "."
|
|
replace:
|
|
- t: "square root"
|
|
- test:
|
|
if: "IsNode(*[1], 'simple')"
|
|
then:
|
|
- test:
|
|
if: "$Verbosity!='Terse'"
|
|
then: {t: "of"}
|
|
- x: "*[1]"
|
|
|
|
- name: default
|
|
tag: mroot
|
|
match: "."
|
|
replace:
|
|
- test:
|
|
if: "*[2][self::m:mn]"
|
|
then_test:
|
|
- if: "*[2][.='2']"
|
|
then: {t: "square root"}
|
|
- else_if: "*[2][.='3']"
|
|
then: {t: "cube root"}
|
|
- else_if: "*[2][not(contains(., ','))]" # FI: Changed decimal point to decimal comma
|
|
then: [{x: "ToOrdinal(*[2])"}, {t: "root"}]
|
|
else:
|
|
- test:
|
|
if: "*[2][self::m:mi][string-length(.)=1]"
|
|
then:
|
|
- x: "*[2]"
|
|
- pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}]
|
|
else: {x: "*[2]"}
|
|
- t: "root"
|
|
- test:
|
|
if: "IsNode(*[1], 'simple')"
|
|
then:
|
|
- test:
|
|
if: "$Verbosity!='Terse'"
|
|
then: {t: "of"}
|
|
- x: "*[1]"
|
|
|
|
- name: default
|
|
tag: mtable
|
|
match:
|
|
- "*[2][self::m:mtable] and"
|
|
- "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))"
|
|
replace:
|
|
- t: "the"
|
|
- x: count(*[2]/*)
|
|
- t: "by"
|
|
- x: count(*[2]/*[self::m:mtr][1]/*)
|
|
- test:
|
|
if: "*[1][.='|']" # just need to check the first bracket since we know it must be (, [, or |
|
|
then: {t: "determinant"}
|
|
else: {t: "matrix"}
|
|
|
|
- name: default
|
|
tag: mtable
|
|
match: "."
|
|
replace:
|
|
- t: "the"
|
|
- x: count(*[2]/*)
|
|
- t: "by"
|
|
- x: count(*[2]/*[self::m:mtr][1]/*)
|
|
- t: "table"
|
|
|
|
- name: short-mrow
|
|
tag: mrow
|
|
match: "count(*)<6"
|
|
replace:
|
|
- insert:
|
|
nodes: "*"
|
|
replace: [{pause: auto}]
|
|
|
|
- name: long-mrow
|
|
tag: mrow
|
|
match: "."
|
|
replace:
|
|
- x: "*[1]"
|
|
- pause: auto
|
|
- x: "*[2]"
|
|
- pause: auto
|
|
- x: "*[3]"
|
|
- pause: auto
|
|
- x: "*[4]"
|
|
- pause: auto
|
|
- x: "*[5]"
|
|
- pause: auto
|
|
- t: "and so on"
|
|
|
|
- include: "SimpleSpeak_Rules.yaml"
|