// vim: sts=4 sw=4 class WordNet { private $db_link = null; public $word = ''; public $wordinfo = array(); public $error = false; public $errorMsg = ''; function WordNet($word = '', $db_host = 'localhost', $db_name = 'wordnet', $db_user = 'user', $db_pass = '') { if ($this->db_link === null) { if (! ($this->db_link = @mysql_pconnect($db_host, $db_user, $db_pass))) { return $this->setError('Could not connect to MySQL'); } if (! mysql_select_db($db_name)) { return $this->setError('Could not select database: ' . mysql_error($this->db_link));; } } if (strlen($word)) { $this->get($word); } } function setError($msg) { $this->error = true; $this->errorMsg = $msg; return false; } function getRandom($type = '') { if (strlen($type)) { if ($type == 'pn') { $word_query = "SELECT word FROM wn_synset WHERE ss_type = 'n' AND (ASCII(word) between 65 and 90) ORDER BY RAND() LIMIT 1 "; } else if ($type == 'cn') { $word_query = "SELECT word FROM wn_synset WHERE ss_type = 'n' AND (SELECT BINARY word NOT REGEXP '[[:upper:]]+') ORDER BY RAND() LIMIT 1 "; } else { $word_query = "SELECT word FROM wn_synset WHERE ss_type = '$type' ORDER BY RAND() LIMIT 1 "; } } else { $word_query = "SELECT word FROM wn_synset ORDER BY RAND() LIMIT 1 "; } if (! ($word_dbh = mysql_query($word_query, $this->db_link))) { return $this->setError("Could not query word database: " . mysql_error($this->db_link)); } $this->word = $word; while ($word_row = mysql_fetch_array($word_dbh, MYSQL_ASSOC)) { $word = $word_row['word']; } $this->get($word); } function get($word) { $word = str_replace(' ', '_', $word); $word_query = "SELECT * FROM wn_synset WHERE word = '" . mysql_escape_string($word) . "' ORDER BY ss_type,sense_number "; if (! ($word_dbh = mysql_query($word_query, $this->db_link))) { return $this->setError("Could not query word database: " . mysql_error($this->db_link)); } $this->word = str_replace('_', ' ', $word); if (mysql_num_rows($word_dbh) == 0) { return $this->setError("The word '$word' was not found in our dictionary"); } while ($word_row = mysql_fetch_array($word_dbh, MYSQL_ASSOC)) { switch ($word_row['ss_type']) { case 'a': $part = "adjective"; break; case 'r': $part = "adverb"; break; case 'v': $part = "verb"; break; case 'n': $part = "noun"; break; } $def_query = "SELECT * FROM wn_gloss WHERE synset_id = " . $word_row['synset_id'] . " "; if (! ($def_dbh = mysql_query($def_query, $this->db_link))) { return $this->setError("Could not query definition database: " . mysql_error($this->db_link)); } while ($def_row = mysql_fetch_array($def_dbh, MYSQL_ASSOC)) { $this->wordinfo[$part][$word_row['sense_number']]['definition'] = str_replace("''", "'", $def_row['gloss']); // get the synonyms $syn_query = "SELECT * FROM wn_synset WHERE synset_id = " . $word_row['synset_id'] . " "; if (! ($syn_dbh = mysql_query($syn_query, $this->db_link))) { return $this->setError("Could not query synonym database: " . mysql_error($this->db_link)); } while ($syn_row = mysql_fetch_array($syn_dbh, MYSQL_ASSOC)) { if ($syn_row['word'] != $word_row['word']) { $this->wordinfo[$part][$word_row['sense_number']]['synonyms'][] = str_replace('_', ' ', $syn_row['word']); } } // get the antonyms $ant_query = "SELECT * FROM wn_antonym,wn_synset WHERE wn_antonym.synset_id_1 = " . $word_row['synset_id'] . " AND wn_antonym.wnum_1 = " . $word_row['w_num'] . " AND wn_antonym.synset_id_2 = wn_synset.synset_id AND wn_antonym.wnum_2 = wn_synset.w_num "; if (! ($ant_dbh = mysql_query($ant_query, $this->db_link))) { return $this->setError("Could not query antonym database: " . mysql_error($this->db_link)); } while ($ant_row = mysql_fetch_array($ant_dbh, MYSQL_ASSOC)) { if ($ant_row['word'] != $word_row['word']) { $this->wordinfo[$part][$word_row['sense_number']]['antonyms'][] = str_replace('_', ' ', $ant_row['word']); } } } } } } $wn = new WordNet(); $wn->get('word'); echo "
"; print_r($wn); echo ""; ?>