Recentemente sto lavorando a un progetto che mira a valutare se un'app Android si blocca o meno. Il processo di valutazione è
1.Collect the logs(which record the execution process of an app).
2.Generate formulas to predict the result
(formulas is generated by GP)
3.Evaluate the logs by formulas
Ora posso produrre formule, ma per comodità per gli utenti, voglio tradurre le formule in una forma di linguaggio naturale e dire agli utenti perché si è verificato un arresto anomalo. (Penso che assomigli a "elaborazione inversa del linguaggio naturale".)
Per spiegare l'idea in modo più chiaro, immagina di avere una formula come questa:
155 - count(onKeyDown) >= 148
È ovvio che if count (onKeyDown) > 7, il risultato di "155 - count (onKeyDown) > = 148" è falso, quindi il log contiene più di 7 eventi onKeyDown sarebbe "Failed" previsto.
Voglio mostrare agli utenti che se l'evento onKeyDown viene visualizzato più di 7 volte (155-148 = 7), questa app si arresta in modo anomalo.
Tuttavia, la formula reale è molto più complicata, come ad esempio:
(< !( ( SUM( {Att[17]}, Event[5]) <= MAX( {Att[7]}, Att[0] >= Att[11]) OR SUM( {Att[17]}, Event[5]) > MIN( {Att[12]}, 734 > Att[19]) ) OR count(Event[5]) != 1 ) > (< count(Att[4] = Att[3]) >= count(702 != Att[8]) + 348 / SUM( {Att[13]}, 641 < Att[12]) mod 587 - SUM( {Att[13]}, Att[10] < Att[15]) mod MAX( {Att[13]}, Event[2]) + 384 > count(Event[10]) != 1))
Ho provato a implementare questa funzione con C ++, ma è piuttosto difficile, ecco lo snippet di codice Sto lavorando proprio ora.
Qualcuno sa come implementare rapidamente questa funzione? (forse con alcuni strumenti o risultati di ricerca?) Qualsiasi idea è benvenuta:)
Grazie in anticipo.