February 25, 2010
There are several ways you can make use of keywords in content outside the well-known direct match that is most common. As search engine algorithms evolved over the last decade, a stronger understanding of semantics and context has emerged.
For example, the early algorithms understood that a dog and a puppy were related and loosely synonymous. Additionally, the understanding was that the adjective boiling was related to heat. However, early implementations of search algorithms would return word association errors that resulted in the understanding that ‘hot dog’ was loosely related to the phrase ‘boiling puppy.’
(more…)
Perhaps I owe everyone an apology. I’m not going to pretend I don’t take dodgeball very seriously; I think any uncertainty on that was addressed as I yelled feverishly from the sidelines throughout the game as if incanting an ancient dodgeball spirit to guide us to victory. Really, I was yelling quite loud. But it must have worked; something did – because this week – this week was not the result of luck. Its outcome was not staked in a weaker team, a smaller one, no! This victory (and oh, what a solid victory it was) was the result of a team that worked together, that fought together, and at the end of the night, simply wanted it more.
Am I gushing? I think I’m gushing a little bit. For the first time I feel affinity with the effusive soccer moms, the lyrical little league dads, singing the unending refrains of this home run, that game-winning goal. And much like them I refuse to shut up about it until I’ve told you the whole story.
(more…)
February 19, 2010
To upgrade our systems for the current personalized search systems and the future changes that are sure to come in 2010, we have developed a Python-based monitoring system that uses the APIs and AJAX request system in place at Google, Yahoo and Bing.
The values being pulled are what we consider the baseline rank before regional and personalized value is applied to the results (which is what you and your clients see when using the web frontend to the search engines in question).
For Python developers:
This was developed using Python 2.4, but the imported packages should apply seamlessly to 2.4 or greater. Please leave notes and ideas below so we can modify this and get a better system for everyone.
import re
import sys
import pprint
import urllib, urllib2
import simplejson as json
class RankChecker:
def __init__(self, keyword, domain):
self.keyword = keyword
self.RE_OBJ = re.compile(domain)
self.YAHOO_APP_CODE = 'YOUR CODE'
self.BING_APP_CODE = 'YOUR CODE'
def __googleFlag__(self):
self.URL_PREPEND = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='
self.URL_APPEND = ''
self.ITER_NAME = 'start'
self.ADDED_PARAMS = ['&safe=off','&rsz=large']
self.ITER_FUNC = lambda x: x * 8
self.LOOP_POINT = lambda x: x['responseData']['results']
self.RESULT_NODE = 'url'
def __yahooFlag__(self):
self.URL_PREPEND = 'http://boss.yahooapis.com/ysearch/web/v1/'
self.URL_APPEND = '?appid=' + urllib.quote(self.YAHOO_APP_CODE) + '&format=json'
self.ITER_NAME = 'start'
self.ADDED_PARAMS = ['&count=10']
self.ITER_FUNC = lambda x: x * 10 + 1
self.LOOP_POINT = lambda x: x['ysearchresponse']['resultset_web']
self.RESULT_NODE = 'url'
def __bingFlag__(self):
self.URL_PREPEND = 'http://api.search.live.net/json.aspx?Appid=' + urllib.quote(self.BING_APP_CODE) + '&Sources=Web&query='
self.URL_APPEND = ''
self.ITER_NAME = 'Web.Offset'
self.ADDED_PARAMS = ['&Web.Count=10']
self.ITER_FUNC = lambda x: x * 10
self.LOOP_POINT = lambda x: x['SearchResponse']['Web']['Results']
self.RESULT_NODE = 'Url'
def __retrieveLookup__(self, params):
f = urllib2.urlopen(self.URL_PREPEND + urllib.quote(str(self.keyword)) + self.URL_APPEND + params)
ret = self.LOOP_POINT(json.load(f))
return ret
def __findRank__(self):
return [[idx + 1, i] for idx, i in enumerate(self.LOOKUP_STACK) if self.RE_OBJ.search(i)]
def runLookup(self, flag):
self.LOOKUP_STACK = list()
if flag == 'y':
self.__yahooFlag__()
elif flag == 'g':
self.__googleFlag__()
elif flag == 'b':
self.__bingFlag__()
for i in range(0, 5):
self.LOOKUP_STACK.extend([i[self.RESULT_NODE] for i in self.__retrieveLookup__('&' + self.ITER_NAME + '=' + str(self.ITER_FUNC(i)) + str().join(self.ADDED_PARAMS)) if i[self.RESULT_NODE]])
return self.__findRank__()
if __name__ == '__main__':
rankObj = RankChecker(sys.argv[1], sys.argv[2])
print '\r\nGoogle:'
pprint.pprint(rankObj.runLookup('g'))
print '\r\nYahoo:'
pprint.pprint(rankObj.runLookup('y'))
print '\r\nBing:'
pprint.pprint(rankObj.runLookup('b'))
February 17, 2010
Ok guys, let’s talk about this.
Yes, I’m talking to you, teammates. I know you’re reading these too. I have set up a new branch on Vision Project entitled “Dodgeball”, and assigned you all a ticket entitled “EXPLANATION PLEASE”. You’ll notice that the due date is last Thursday – see, if I could just have the reasons why we were collectively plotting our demise by then, perhaps we could all avoid any further public disgrace.
We had uniforms guys. We had tenacity, wow-factor. Yet we marched onto that dodgeball court, and for forty-five minutes physically insisted that the other team destroy not only our record, but our dignity and our pride.
(more…)