<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AI Playground &#187; Google</title>
	<atom:link href="http://www.aiplayground.org/thema/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aiplayground.org</link>
	<description>Thoughts on artificial intelligence, cognitive science, academia, and life in general.</description>
	<lastBuildDate>Thu, 25 Mar 2010 22:04:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>&#220;ber Googles Verh&#228;ltnis zu k&#252;nstlicher Intelligenz</title>
		<link>http://www.aiplayground.org/artikel/google-ai/</link>
		<comments>http://www.aiplayground.org/artikel/google-ai/#comments</comments>
		<pubDate>Sun, 30 Oct 2005 09:36:16 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Zukunft]]></category>

		<guid isPermaLink="false">http://ai2.stuhlmueller.info/artikel/google-ai/</guid>
		<description><![CDATA[&#8220;We are scanning those books to be read by an AI&#8221;. So lauteten die Worte seiner Gastgeber, schreibt der Historiker George Dyson &#252;ber seinen Besuch des Google-Hauptquartiers. Eigentlich sollte uns das nicht &#252;berraschen. Was k&#252;nstliche Intelligenz angeht treffen sich M&#246;glichkeiten und Motivation nirgendwo so direkt wie bei Google. M&#246;glichkeiten Das Kapital. Das Unternehmen hat inzwischen [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;We are scanning those books to be read by an AI&#8221;. So lauteten die Worte seiner Gastgeber, schreibt der Historiker George Dyson &#252;ber seinen <a href="http://www.edge.org/3rd_culture/dyson05/dyson05_index.html">Besuch des Google-Hauptquartiers</a>. Eigentlich sollte uns das nicht &#252;berraschen. Was k&#252;nstliche Intelligenz angeht treffen sich M&#246;glichkeiten und Motivation nirgendwo so direkt wie bei Google.<span id="more-28"></span></p>
<h2>M&#246;glichkeiten</h2>
<ul>
<li><strong>Das Kapital</strong>. Das Unternehmen hat inzwischen <a href="http://boerse.ard.de/content.jsp?key=dokument_122286">&#252;ber sieben Milliarden Dollar</a> an kurzfristig liquiden Mitteln. </li>
<li><strong>Die Infrastruktur</strong>. Im Januar 2005 <a href="http://www.technologyreview.com/articles/05/01/issue/ferguson0105.asp?p=5">berichtete Technology Review</a>, dass Google ein globales Netz von &#252;ber 250.000 Servern betreibt.</li>
<li><strong>Das Personal</strong>. Wer die f&#252;hrenden Forscher im Bereich <em>Machine Learning</em> sucht, wird bei Google vermutlich eher f&#252;ndig als an den meisten Universit&#228;ten. Auch sonst scheint das Unternehmen viele inspirierte, am Bereich KI interessierte Angestellte zu haben. Louis Monier, Gr&#252;nder von Altavista, <a href="http://battellemedia.com/archives/001653.php">schreibt &#252;ber seine Zukunft bei Google</a>:</li>
</ul>
<blockquote><p>We have a few tools today, mostly statistics to isolate repeating data from the noise, but I think we will eventually go much further. What we need are generic pattern recognition engines. It ties into what Jeff Hawkins is talking about on the structure of the neocortex.</p></blockquote>
<h2>Motivation</h2>
<p>Bereits heute legt Google nicht nur gro&#223;en Wert auf den Algorithmus f&#252;r die Sortierung der Suchergebnisse, sondern auch auf den zur Optimierung der Werbeanzeigen. Je genauer vorhergesagt werden kann, ob ein Besucher auf einen Werbelink klickt oder nicht, desto besser f&#252;r Googles Finanzen. In einem <a href="http://www.nytimes.com/2005/10/30/business/yourmoney/30google.html?adxnnl=1&#038;adxnnlx=1130695446-nkj40tHQgWmo8jafyLc2lA">Artikel der NY Times</a> (Registrierung <a href="http://www.bugmenot.com/">n&#246;tig</a>) stand dazu letztens:</p>
<blockquote><p>Hidden behind its simple white pages, Google has already created what it says is one of the most sophisticated artificial intelligence systems ever built. In a fraction of a second, it can evaluate millions of variables about its users and advertisers, correlate them with its potential database of billions of ads and deliver the message to which each user is most likely to respond. Because of this technology, users click ads 50 percent to 100 percent more often on Google than they do on Yahoo, Mr. Noto estimates, and that is a powerful driver of Google&#8217;s growth and profits.</p></blockquote>
<p>Die finanzielle Seite ist jedoch nur eine von mehreren, und angesichts von Googles bisheriger Entwicklung nicht unbedingt die einflussreichste (es sei denn, nach dem IPO hat sich doch mehr ge&#228;ndert als Sergey, Larry &#038; Co zugeben wollen &#9472; aber das ist ein anderes Thema). Wenn Texte nicht mehr nur auf statistische Merkmale hin analysiert, sondern inhaltlich verstanden werden, l&#246;st das jede Menge Probleme. Was ist relevant? Was ist Spam? Und um was geht es auf einer bestimmten Internetseite eigentlich?</p>
<p>Googles proklamiertes Ziel &#9472; <em>to organize the world&#8217;s information</em> &#9472; ist ohne k&#252;nstliche Intelligenz nur in Grenzen m&#246;glich. Noch haben wir diese Grenzen nicht erreicht, und ob es noch Jahre oder Jahrzehnte dauern wird l&#228;sst sich schwer sagen. Daran, dass wir diese Grenzen erreichen werden, besteht jedoch wenig Zweifel. </p>
<p>Zum Ende seines Artikels, kurz nach ein paar Worten zur Arbeitsathmosph&#228;re bei Google, schreibt George Dyson:</p>
<blockquote><p>For 30 years I have been wondering, what indication of its existence might we expect from a true AI? Certainly not any explicit revelation, which might spark a movement to pull the plug. Anomalous accumulation or creation of wealth might be a sign, or an unquenchable thirst for raw information, storage space, and processing cycles, or a concerted attempt to secure an uninterrupted, autonomous power supply. But the real sign, I suspect, would be a circle of cheerful, contented, intellectually and physically well-nourished people surrounding the AI.</p></blockquote>
<p>So viel f&#252;r heute aus der Connecting-The-Dots-Abteilung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/google-ai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Web APIs</title>
		<link>http://www.aiplayground.org/artikel/google-apis/</link>
		<comments>http://www.aiplayground.org/artikel/google-apis/#comments</comments>
		<pubDate>Sat, 18 Dec 2004 09:16:36 +0000</pubDate>
		<dc:creator>Andreas</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://ai2.stuhlmueller.info/artikel/google-apis/</guid>
		<description><![CDATA[Google ist ein Ph&#228;nomen: Die Suchmaschine kennt mehr als 8 Milliarden Webseiten. Dazu kommen mehr als 845 Millionen Usenet-Postings. Googles Infrastruktur umfasst inzwischen mehr als 250.000 Server. Nirgendwo anders wird eine gr&#246;&#223;ere Menge an Daten verarbeitet und per Website der &#214;ffentlichkeit zug&#228;nglich gemacht. Inzwischen d&#252;rfen nicht mehr nur Menschen, sondern auch Maschinen auf den Datenschatz [...]]]></description>
			<content:encoded><![CDATA[<p>Google ist ein Ph&#228;nomen: Die Suchmaschine kennt mehr als 8 Milliarden Webseiten. Dazu kommen mehr als 845 Millionen Usenet-Postings. Googles Infrastruktur umfasst inzwischen mehr als 250.000 Server. Nirgendwo anders wird eine gr&#246;&#223;ere Menge an Daten verarbeitet und per Website der &#214;ffentlichkeit zug&#228;nglich gemacht. Inzwischen d&#252;rfen nicht mehr nur Menschen, sondern auch Maschinen auf den Datenschatz zugreifen: Das Zauberwort hei&#223;t &#8220;Web Services&#8221;.<span id="more-13"></span></p>
<p>Im letzten Teil der &#8220;Daten, Daten, Daten&#8221;-Serie [1] wurde das Konzept der Web Services vorgestellt. Zur Erinnerung:</p>
<blockquote><p>Was f&#252;r uns Menschen Websites sind, das sind f&#252;r Computer Web Services &#8211; Internet-Dienste, die in der Regel von gr&#246;&#223;eren Firmen wie Amazon, Google oder eBay angeboten werden und Unmengen an Informationen in (vornehmlich) maschinenlesbaren Formaten liefern.</p>
<p>Im Gegensatz zu den meisten Websites werden die Informationen bei Web Services als XML-Dateien abgerufen. XML (Extensible Markup Language) ist &#8220;ein Standard zur Erstellung strukturierter, maschinen- und menschenlesbarer Dateien.&#8221; [2]</p>
<p>Diese XML-Dateien werden &#252;ber das SOAP-Protokoll (Simple Object Access Protocol) vom Server abgerufen und lokal weiterverarbeitet. Erfreulicherweise bleibt es dem Software-Entwickler dabei oft erspart, sich mit den Hintergr&#252;nden von SOAP, XML und Co zu befassen, wenn bereits Module f&#252;r die Programmiersprache und den Web Service der Wahl existieren.</p></blockquote>
<p>F&#252;r die Google-API trifft das zu. Ob Visual Basic .Net [3], PHP [4] oder Python [5]: F&#252;r die Einbindung der API braucht es nicht mehr als ein paar Zeilen Code. Wie schon im Artikel &#252;ber die Amazon Web Services verwende ich auch hier zur Demonstration der M&#246;glichkeiten wieder Python, da der Code vergleichsweise einfach zu lesen ist und mit PyGoogle [5] ein exzellentes Modul f&#252;r die API existiert.</p>
<p>Doch was ist mit der Google-API [6] m&#246;glich, welche Daten stellt Google bereit? Neben Suchergebnissen in maschinenlesbarer Form sind die zwischengespeicherten Cache-Seiten, die Google von fast jeder Website erstellt, sowie Googles Rechtschreibkorrektur aufrufbar.</p>
<p>Die Suchergebnisse sind dabei der interessanteste Part. Sie enthalten unter anderem die Anzahl der Resultate f&#252;r eine bestimmte Anfrage (estimatedTotalResultsCount), die Zeit, die die Suche in Anspruch nahm (searchTime) und die einzelnen gefundenen Seiten mit URL, Titel (title), Ausschnitt aus der Seite (snippet), Dateigr&#246;&#223;e (cachedSize) und Kategorie (directoryCategory).</p>
<p>Ein Beispiel sagt mehr als tausend Worte, also versuchen wir uns an folgender Fragestellung: Welches der Jahre 1985-2009 wird am h&#228;ufigsten im Internet erw&#228;hnt? Und wie oft wurde es im Vergleich zu den anderen Jahren erw&#228;hnt? Unser Beispielprogramm soll also Suchvorg&#228;nge nach den Phrasen &#8220;year 1985&#8243;, &#8220;year 1986&#8243;, &#8230;, &#8220;year 2009&#8243; durchf&#252;hren und jeweils die Anzahl der Gesamtsuchergebnisse ausgeben.</p>
<p>In Python sieht das folgenderma&#223;en aus:<code>import google, sys<br />
google.setLicense(&#39;YourLicenseKey&#39;)<br />
&nbsp;<br />
for k in range(1985,2010):<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gData = google.doGoogleSearch(&#39;&#92;&#39;year &#39; + &#92;<br />
str(k)+&#39;&#92;&#39;&#39;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print k, &#92;<br />
str(gData.meta.estimatedTotalResultsCount).rjust(10)<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &#39;Fehler:&#39;, sys.exc_info()[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</code></p>
<p>Ist das PyGoogle-Modul installiert und ein g&#252;ltiger Lizenz-Schl&#252;ssel angegeben (kann unter [8] angefordert werden), so wird das Programm der Reihe nach die Phrasen-Suchen auf&#252;hren und die Suchergebnisse ausgeben:<code>1985&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;117000<br />
1986&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;111000<br />
1987&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;126000<br />
1988&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;136000<br />
1989&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;148000<br />
1990&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;216000<br />
(...)<br />
2003&nbsp;&nbsp;&nbsp;&nbsp;2100000<br />
2004&nbsp;&nbsp;&nbsp;&nbsp;2840000<br />
2005&nbsp;&nbsp;&nbsp;&nbsp;1280000<br />
2006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;149000<br />
2007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;65400<br />
2008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40100<br />
2009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;21400</code></p>
<p>Das Jahr 2004 wird also zurzeit am h&#228;ufigsten erw&#228;hnt, etwas &#246;fters als das Jahr 2000. Nat&#252;rlich lassen sich aus der Google-API gewonnene Daten auch graphisch darstellen:<br />
<img class="illu" src="http://www.aiplayground.org/img/google-api-years.gif" alt="Google Web API Statistik: Years"><br />
Ein weiteres Beispiel: Wir interessieren uns f&#252;r alle Websites mit .de-Domain, die in den Top-50 Suchergebnissen f&#252;r das Stichwort &#8220;Neuronale Netze&#8221; auftauchen. Eine alphabetisch sortierte Liste der Webadressen soll ausgegeben werden, wobei keine Domain doppelt vorkommen soll. Mit der Google-API kein Problem:<code>import google, sys<br />
&nbsp;<br />
google.setLicense(&#39;YourLicenseKey&#39;)<br />
Results = []<br />
&nbsp;<br />
for k in range(0,50,10):<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gData = &#92;<br />
google.doGoogleSearch(&#39;neuronale netze&#39;,k,10)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for n in gData.results:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Results.append(n.URL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &#39;Fehler:&#39;, sys.exc_info()[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;<br />
Results = [n[7:n.find(&#39;/&#39;,7)] &#92;<br />
for n in Results if (n.find(&#39;.de&#39;) != -1)]<br />
Results = [n for i,n &#92;<br />
in enumerate(Results) if n not in Results[:i]]<br />
&nbsp;<br />
Results.sort()<br />
for n in Results:<br />
&nbsp;&nbsp;&nbsp;&nbsp;print n</code></p>
<p>Das Python-Programm f&#252;hrt 5 Suchvorg&#228;nge mit jeweils 10 Ergebnissen aus und f&#252;gt f&#252;r jede URL eines Suchergebnisses der &#8220;Results&#8221;-Liste einen neuen Eintrag hinzu. Tritt ein Fehler auf (z.B. keine Internetverbindung verf&#252;gbar), so bricht das Programm ab und gibt eine entsprechende Fehlermeldung aus.</p>
<p>Nachdem die Ergebnisse erfolgreich abgerufen wurden, wird die &#8220;Results&#8221;-Liste auf die Eintr&#228;ge eingegrenzt, bei denen &#8220;.de&#8221; in der URL vorkommt. Gleichzeitig wird das &#8220;http://&#8221; am Anfang sowie der Verzeichnisstrang am Ende der URL entfernt.</p>
<p>In der n&#228;chsten Zeile des Programms werden s&#228;mtliche doppelten &#8220;Results&#8221;-Eintr&#228;ge gel&#246;scht, danach sortiert und per &#8220;print&#8221; angezeigt. Die Ausgabe des Programms sieht dann in etwa so aus:<br />
<code>fuzzy.cs.uni-magdeburg.de<br />
home.zait.uni-bremen.de<br />
itb.biologie.hu-berlin.de<br />
rfhs8012.fh-regensburg.de<br />
www-lehre.inf.uos.de<br />
www-ra.informatik.uni-tuebingen.de<br />
www.andreas-mielke.de<br />
www.artifin.de<br />
www.documanager.de<br />
www.faes.de<br />
(...)<br />
www.medi-informatik.de<br />
www.neuro.ct-webspace.de<br />
www.physik.uni-regensburg.de<br />
www.vdi.de<br />
wwwhni.uni-paderborn.de<br />
wwwmath.uni-muenster.de<br />
wwwuser.gwdg.de</code></p>
<p>Nat&#252;rlich l&#228;sst sich die Google-API auch hervorragend zum Zwecke der Suchmaschinen-Analyse und Optimierung (Search Engine Optimization, SEO) verwenden. Das n&#228;chste Beispielprogramm dieses Artikels soll anhand der ersten 50 Suchergebnisse f&#252;r den Begriff &#8220;SEO&#8221; feststellen, welchen Wert Google auf das Vorkommen des Suchbegriffes in Titel und URL legt bzw. bei welchem Anteil der Suchergebnisse der Suchbegriff in Titel/URL vorkommt.</p>
<p>Der Python-Quellcode ist weitgehend selbsterkl&#228;rend:<br />
<code>import google, sys<br />
&nbsp;<br />
google.setLicense(&#39;YourLicenseKey&#39;)<br />
InTitle = 0<br />
InURL = 0<br />
KeyWord = &#39;python&#39;<br />
NumResults = 50<br />
&nbsp;<br />
for k in range(0,NumResults,10):<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gData = google.doGoogleSearch(KeyWord,k,10)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for n in gData.results:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m = n.URL.lower()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m.find(KeyWord) != -1):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InURL += 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m = n.title.lower()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m.find(KeyWord) != -1):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InTitle += 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &#39;Fehler:&#39;, sys.exc_info()[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;<br />
print &#39;Keyword: &#39;,KeyWord<br />
print &#39;Keyword in URL: &#39;,InURL,&#39;von&#39;,NumResults, &#92;<br />
&#39;(&#39;, float(InURL)/float(NumResults)*100, &#39;% )&#39;<br />
print &#39;Keyword in Titel: &#39;,InTitle,&#39;von&#39;,NumResults, &#92;<br />
&#39;(&#39;, float(InTitle)/float(NumResults)*100, &#39;% )&#39;</code><br />
Nachdem eine Suchergebnis-Liste mit 10 Ergebnissen geladen wurde, werden f&#252;r jedes Element URL und Titel in Kleinbuchstaben umgewandelt und nach dem Schl&#252;sselwort durchsucht. Wird es gefunden, so werden die Variablen InURL bzw. InTitle um 1 erh&#246;ht. Vor das Programm endet, werden die Variablen als ganze Zahlen sowie als Prozentzahlen ausgegeben. Konkret sieht das so aus:<br />
<code>Keyword:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seo<br />
Keyword in URL:&nbsp;&nbsp;&nbsp;&nbsp;33 von 50 ( 66.0 % )<br />
Keyword in Titel:&nbsp;&nbsp;37 von 50 ( 74.0 % )<br />
&nbsp;<br />
Keyword:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search<br />
Keyword in URL:&nbsp;&nbsp;&nbsp;&nbsp;14 von 50 ( 28.0 % )<br />
Keyword in Titel:&nbsp;&nbsp;25 von 50 ( 50.0 % )<br />
&nbsp;<br />
Keyword:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python<br />
Keyword in URL:&nbsp;&nbsp;&nbsp;&nbsp;27 von 50 ( 54.0 % )<br />
Keyword in Titel:&nbsp;&nbsp;42 von 50 ( 84.0 % )<br />
</code><br />
Erweiterungen sind durchaus denkbar. Das Programm k&#246;nnte beispielsweise die Prozentzahlen f&#252;r die ersten 50 Suchergebnisse mit denen der Suchergebnisse 50-100 vergleichen und auf Unterschiede &#252;berpr&#252;fen. Weiterhin w&#228;re es denkbar, dass ganze Wortlisten automatisch abgearbeitet werden und die Ergebnisse in einer mit Tabellenkalkulationsprogrammen lesbaren (CSV-)Datei gespeichert werden.</p>
<p>Die Analyse von mehr als 20 hochfrequentierten Suchw&#246;rtern ergab folgenden Graph, die X-Achse gibt dabei die Nummer der Suchergebnis-Seite an:<br />
<img class="illu" src="http://www.aiplayground.org/img/google-api-competitive.gif" alt="Graph Competitive Keywords"><br />
Die meisten Seiten, die in den Top-200 f&#252;r so hart umk&#228;mpfte Schl&#252;sselw&#246;rter wie &#8220;advertising&#8221;, &#8220;business&#8221;, &#8220;estate&#8221;, &#8220;software&#8221; oder &#8220;marketing&#8221; vorkommen, haben das entsprechende Keyword im Titel. Den Unterschied kann die Verwendung von Keywords in der URL machen: Hier unterscheiden sich die Top-20 vom Rest.</p>
<p>Zum Vergleich der Graph, der sich bei der Analyse 20 weniger begehrter Keywords wie zum Beispiel &#8220;singularity&#8221;, &#8220;tschebyschew&#8221; oder &#8220;backpropagation&#8221; ergab:<br />
<img class="illu" src="http://www.aiplayground.org/img/google-api-noncompetitive.gif" alt="Graph Noncompetitive Keywords"><br />
Als Demonstration der M&#246;glichkeiten der Google-API zur Suchmaschinenanalyse sollte das gen&#252;gen. Was hier an Code vorgestellt wurde, ist das Ergebnis von 15 Minuten Arbeit &#8212; mit etwas gr&#246;&#223;erem Zeitaufwand sind die M&#246;glichkeiten schier unbegrenzt.</p>
<p>Zum Abschluss noch der Quellcode f&#252;r ein Programm, das vor allem f&#252;r Website-Betreibern von Nutzen ist: Ein Ranking-Checker. Das Programm &#228;hnelt dem zuvor beschriebenen Analyse-Programm, &#252;berpr&#252;ft aber anstatt des Vorkommens des Suchworts in URL/Titel das Vorkommen der eigenen URL in den Suchergebnissen. So l&#228;sst sich schnell feststellen, auf welcher Position der Suchergebnis-Seiten die eigene Website f&#252;r bestimmte Keywords zu finden ist.<br />
<code>import google, sys<br />
&nbsp;<br />
google.setLicense(&#39;YourLicenseKey&#39;)<br />
KeyWord = &#39;singularitaet&#39;<br />
MySite = &#39;aiplayground.org&#39;<br />
NumResults = 100<br />
ResFound = 0<br />
&nbsp;<br />
for k in range(0,NumResults,10):<br />
&nbsp;&nbsp;&nbsp;&nbsp;try:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gData = google.doGoogleSearch(KeyWord,k,10)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for n in gData.results:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc += 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m = n.URL.lower()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m.find(MySite) != -1) and (ResFound == 0):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResFound = k+rc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;except:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &#39;Fehler:&#39;, sys.exc_info()[0]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;<br />
print &#39;Website:  &#39;,MySite<br />
print &#39;Keyword:  &#39;,KeyWord<br />
print &#39;Position: &#39;,ResFound</code>Die Variable &#8220;k&#8221; gibt dabei jeweils die aktuelle Seite der Suchergebnisse an (10, 20, 30, &#8230;), die Variable &#8220;rc&#8221; die Position auf dieser Seite (1, 2, 3, &#8230;). Wird die eigene Website in der URL eines Suchergebnisses gefunden, so wird die Gesamt-Position, d.h. die Summe aus &#8220;k&#8221; und &#8220;rc&#8221;, in der Variablen &#8220;ResFound&#8221; abgespeichert, weitere Suchvorg&#228;nge abgebrochen und die Position auf dem Bildschirm ausgegeben.</p>
<p>Ein Ablauf des Programms kann zum Beispiel so aussehen:<br />
<code>Website:   aiplayground.org<br />
Keyword:   singularitaet<br />
Position:  52</code>Die Verwendung dieses Ranking-Checkers ist allerdings nur begrenzt hilfreich: Google verwendet f&#252;r die API einen anderen, nicht ganz so umfangreichen Index an Websites als f&#252;r die Suchergebnisse, die auf Google.com zur&#252;ckgegeben werden. Wer sein genaues Ranking erfahren will und das nicht per Hand tun will, ist also gezwungen, die Suchergebnisse direkt von Googles HTML-Seiten einzulesen.</p>
<p>[1] <a href="http://www.aiplayground.org/artikel/amazon-data/">Daten, Daten, Daten: Amazon Web Services</a><br />
[2] <a href="http://de.wikipedia.org/wiki/XML">Wikipedia: XML</a><br />
[3] <a href="http://msdn.microsoft.com/library/en-us/dv_vstechart/html/vbtchaccessinggooglewithvb.asp">Google APIs und VB.Net</a><br />
[4] <a href="http://blog.outer-court.com/archive/2003_06_22_index.html">Google APIs und PHP</a><br />
[5] <a href="http://pygoogle.sourceforge.net/">Google APIs und Python: PyGoogle</a><br />
[6] <a href="http://www.google.com/apis/">Google Web APIs</a><br />
[7] <a href="https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&#038;followup=http://api.google.com/createkey">Google Web APIs LicenseKey anfordern</a><br />
[8] <a href="http://www.technologyreview.com/articles/05/01/issue/ferguson0105.asp?p=5">Google: Mehr als 250.000 Server</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aiplayground.org/artikel/google-apis/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
