-
Notifications
You must be signed in to change notification settings - Fork 0
/
entadGen.py
53 lines (44 loc) · 1.79 KB
/
entadGen.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from constants import *
from fileLoading import *
from samplingMethods import *
def sampleEntad(wordDictionary):
def sampleRandomType(key):
return sampleRecursively(wordDictionary[key], wordDictionary)
adjectives = sampleRandomType(ADJ_KEY)
limitation = sampleRandomType(LIMITATION_KEY)
return (
"\n".join(
[
"ENTAD",
f"shaped as {sampleRandomType(OBJECT_KEY)}{'' if len(adjectives) == 0 else f' that is {adjectives}'}",
f"has {sampleRandomType(NATURE_KEY)} nature with magic of {sampleRandomType(MAGIC_KEY)}",
f"limited due to {limitation}" if len(limitation) != 0 else "",
]
)
).strip()
def writeFrequencyTable(wordDictionary):
for key in [LIMITATION_KEY, NATURE_KEY, ADJ_KEY, MAGIC_KEY, OBJECT_KEY]:
writeFrequencySubTable(wordDictionary[key], wordDictionary)
print("\n\n")
def writeFrequencySubTable(
samplingObject, wordDictionary, probability=1.0, layer=0, prefix="", postfix=""
):
print(
f"{'-'*layer} {probability*100:.3} {prefix}{samplingObject.getText()}{postfix}"
)
if isinstance(samplingObject.value, list) and layer == 0:
totalOdds = sum(O.oddsRatio for O in samplingObject.value)
for O in samplingObject.value:
writeFrequencySubTable(
O,
wordDictionary,
probability * O.oddsRatio / totalOdds,
layer + 1,
f"{prefix}{samplingObject.getPrefix(wordDictionary)}",
f"{samplingObject.getPostfix(wordDictionary)}{postfix}",
)
if __name__ == "__main__":
formatWordDictionary()
wordDictionary = loadWordDictionary()
# writeFrequencyTable(wordDictionary)
print(sampleEntad(wordDictionary))