- Text Processing - Python
- Server Processing - PHP, SQL
- Client - Javascript
Source code is posted below
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
function connect() {
$servername = "XXXX";
$username = "XXXX";
$password = "XXXX";
$dbname = "XXXX";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
return NULL;
}
return $conn;
}
function test($conn) {
$sql = "SELECT name FROM candidate";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "name: " . $row["name"];
}
} else {
echo "0 results";
}
}
function get_single_result($conn,$sql,$row_name) {
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
return $row[$row_name];
}
return "";
}
function get_rand($probabilities) {
$n = 100;
$rand_list = array();
foreach( $probabilities as $value) {
array_push($rand_list, round($n*$value,0));
}
$choice = rand(1,$n);
$sum = 0;
for( $i = 0; $i < count($rand_list); $i++) {
$sum += 1;
if( $choice >= $sum and $choice <= $sum + $rand_list[$i]) {
return $i;
}
$sum += $rand_list[$i];
}
return 0;
}
function iterate_text($conn, $name, $id, $value, $length, $capitalize) {
$should_capitalize = False;
if($length <= 0) {
return $value;
}
$prob_list = array();
$val_list = array();
$prob_sql = "SELECT to_state, frequency FROM chain ch
JOIN candidate ca ON ca.id = ch.candidate
WHERE ca.name='" . $name . "' and from_state='" . $id ."'";
$result = $conn->query($prob_sql);
while($row = $result->fetch_assoc()) {
array_push($val_list, $row["to_state"]);
array_push($prob_list, $row["frequency"]);
}
$state_index = get_rand($prob_list);
$next_state = $val_list[$state_index];
$new_value = $value . " " . $next_state;
return iterate_text($conn, $name, $new_value, $next_state, $length - 1, $should_capitalize);
}
function make_text($conn,$name,$length) {
$rand_sql = "SELECT ch.from_state from_state FROM chain ch JOIN candidate ca ON ca.id = ch.candidate WHERE ca.name='" . $name . "' ORDER BY RAND() LIMIT 1";
$rand_id = get_single_result($conn, $rand_sql, "from_sate");
echo iterate_text($conn, $name, $rand_id, $rand_id, $length, True);
}
function disconnect($conn) {
$conn->close();
}
$conn = connect();
make_text($conn,$_GET["name"],5);
disconnect($conn);