-
Notifications
You must be signed in to change notification settings - Fork 0
/
Generators.scala
119 lines (99 loc) · 4.82 KB
/
Generators.scala
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package sanskrit_coders.scl
import akka.actor.{Actor, ActorLogging}
import dbSchema.grammar.{Subanta, Tinanta}
import org.slf4j.{Logger, LoggerFactory}
import sanskrit_coders.common.LtToolboxCommandWrapper
class SubantaGenerator(override val binFilePath: String) extends LtToolboxCommandWrapper(binFilePath = binFilePath) {
override val log: Logger = LoggerFactory.getLogger(getClass.getName)
final val prakaaraCodeMap = Map[String, String](
"sAXAraNa" -> "nA",
"sarvanAma" -> "sarva",
"safkhyA" -> "saMKyA",
"safkhyeya" -> "saMKyeyam",
"pUraNa" -> "pUraNam"
)
val lingaCodeMap = Map[String, String](
"pum" -> "puM",
"napum" -> "napuM",
"swrI" -> "swrI"
)
val vachanaCodeMap = Map[Int, String](
1 -> "eka",
2 -> "xwi",
3 -> "bahu"
)
// Example query: jFAna<vargaH:nA><lifgam:napuM><viBakwiH:1><vacanam:bahu><level:1>
def getQuery(root: String, prakAra: String, linga: String, vibhakti: Int, vachana: Int): String = {
s"${root}" +
s"<vargaH:${prakaaraCodeMap.get(prakAra).get}>" +
s"<lifgam:${lingaCodeMap.get(linga).get}>" +
s"<viBakwiH:${vibhakti}>" +
s"<vacanam:${vachanaCodeMap.get(vachana).get}>" +
s"<level:1>"
}
def getSubanta(root: String, prakAra: String, linga: String, vibhakti: Int, vachana: Int): Seq[String] = {
val result = queryBin(getQuery(root, prakAra, linga, vibhakti, vachana))
result.split("/")
}
}
object subantaGeneratorTest {
val log = LoggerFactory.getLogger(getClass.getName)
def main(args: Array[String]): Unit = {
val subantaGenerator = new SubantaGenerator(binFilePath = "/home/vvasuki/scl/build/morph_bin/sup_gen.bin")
var subanta = subantaGenerator.getSubanta("jFAna", "sAXAraNa", "napum", 2, 3)
log info s"subanta: $subanta"
}
}
class TinantaGenerator(override val binFilePath: String) extends LtToolboxCommandWrapper(binFilePath = binFilePath) {
override val log: Logger = LoggerFactory.getLogger(getClass.getName)
// aMSa1<prayogaH:karwari><lakAraH:lat><puruRaH:pra><vacanam:eka><paxI:AwmanepaxI><XAwuH:aMSa><gaNaH:curAxiH><level:1>
// cur1<prayogaH:karwari><lakAraH:lat><puruRaH:pra><vacanam:bahu><paxI:parasmEpaxI><XAwuH:curaz><gaNaH:curAxiH><level:1>
def getQuery(root: String, kimpadI: String, dhAtu: String, gaNa: String, prayoga: String,
lakAra: String, puruSha: String, vachana: String): String = {
s"${root}" +
s"<prayogaH:${prayoga}>" +
s"<lakAraH:${lakAra}>" +
s"<puruRaH:${puruSha}>" +
s"<vacanam:${vachana}>" +
s"<paxI:${kimpadI}>" +
s"<XAwuH:${dhAtu}>" +
s"<gaNaH:${gaNa}>" +
s"<level:1>"
}
// cur1<prayogaH:karwari><lakAraH:lat><puruRaH:pra><vacanam:bahu><paxI:parasmEpaxI><XAwuH:curaz><gaNaH:curAxiH><level:1>
def getTinanta(root: String, kimpadI: String, dhAtu: String, gaNa: String, prayoga: String,
lakAra: String, puruSha: String, vachana: String): Seq[String] = {
val result = queryBin(getQuery(root = root, kimpadI = kimpadI, dhAtu = dhAtu, gaNa = gaNa, prayoga = prayoga, lakAra = lakAra, puruSha = puruSha, vachana = vachana))
result.split("/")
}
}
//aMSa1<prayogaH:karwari><lakAraH:lat><puruRaH:pra><vacanam:eka><paxI:AwmanepaxI><XAwuH:aMSa><gaNaH:curAxiH><level:1>
//cur1<prayogaH:karwari><lakAraH:lat><puruRaH:pra><vacanam:bahu><paxI:parasmEpaxI><XAwuH:curaz><gaNaH:curAxiH><level:1>
object tinantaGeneratorTest {
val log = LoggerFactory.getLogger(getClass.getName)
def main(args: Array[String]): Unit = {
val tinantaGenerator = new TinantaGenerator(binFilePath = "/home/vvasuki/scl/build/morph_bin/wif_gen.bin")
var tinanta = tinantaGenerator.getTinanta(root = "cur1", kimpadI = "parasmEpaxI", dhAtu = "curaz",
gaNa = "curAxiH",
prayoga = "karwari", lakAra = "lat", puruSha = "pra", vachana = "bahu")
log info s"tinanta: $tinanta"
}
}
class GeneratorActor(subantaGenerator: SubantaGenerator, tinantaGenerator: TinantaGenerator) extends Actor with ActorLogging {
def receive: Receive = {
case subanta: Subanta => {
var vibhaktiNum = subanta.vibhakti.get.vibhaktiNum
if(subanta.vibhakti.get.prakaara != None) {
vibhaktiNum = 8
}
val padas = subantaGenerator.getSubanta(root = subanta.praatipadika.get.root, prakAra = subanta.praatipadika.get.prakaara.get, linga = subanta.praatipadika.get.linga.get, vibhakti = vibhaktiNum, vachana = subanta.vachana.get)
sender() ! padas
}
case tinanta: Tinanta => {
val padas = tinantaGenerator.getTinanta(root = tinanta.dhaatu.get.sclCode.get, kimpadI = tinanta.vivaxaa.get.kimpadI.get, dhAtu = tinanta.dhaatu.get.aupadeshikaDhaatu.get,
gaNa = tinanta.dhaatu.get.gaNa.get,
prayoga = tinanta.vivaxaa.get.prayoga.get, lakAra = tinanta.vivaxaa.get.lakaara.get, puruSha = tinanta.vivaxaa.get.puruSha.get, vachana = tinanta.vivaxaa.get.vachana.get)
sender() ! padas
}
}
}