I needed a facility for finding related words. Luckily, I was able to find the Big Huge Thesaurus API.
As web services go, it's pretty dang near perfect:
- You can get up and running with a free API key for testing purposes in a few seconds
- The API is as simple as invoking a URL in the format: http://words.bighugelabs.com/api/2/API_KEY/WORD_TO_LOOKUP/
- The API will return a variety of formats, from basic text to JSON and XML
- It's hacker friendly, in that you can rig up a php CURL function in a few minutes, or even just test it out in your web browser
In fact, here's the PHP code I wrote to access it. Feel free to use and enjoy:
/*
* Find related words. 'word' is the word to search for.
* `narrow_to_relationship' will cause just matches of a particular relationship
* to return.
*
* Leave off the second option to get back all results.
*
* Possible values for narrow_to_relationship: syn (synonym),
* ant (antonyms), rel (related) and sim (similar).
*
* Return back an array of arrays of data -or an array of a specific
* type of words.
*/
function find_related_words($word, $narrow_to_relationship = false) {
$key = BIGHUGELABS_API_KEY;
$url = "http://words.bighugelabs.com/api/2/$key/" . urlencode($word) . "/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$lines = preg_split('/[\n\r]/', curl_exec($ch));
$results = array();
foreach($lines as $l) {
$values = explode("|", $l);
if($narrow_to_relationship) {
if($narrow_to_relationship == $values[1]) {
$results[] = $values[2];
}
} else {
$results[] = array('part' => $values[0], 'relationship' => $values[1], 'word' => $values[2]);
}
}
return $results;
}
// Sample Usage
$I_am_a = find_related_words("hacker"); // get back all terms related to hacker
$I_want_to_be = find_related_words("hacker", "syn"); // get back a list of synonyms
Using a thesaurus is a simple way to make a user's input seem a lot smarter. I'm actually surprised I've gone this long without integrating one into an app before. Luckily, using the facility was a breeze.
No comments:
Post a Comment