<?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>michael.wiedau.com &#187; Java</title>
	<atom:link href="http://www.michael.wiedau.com/articles/category/computer/java-computer/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michael.wiedau.com</link>
	<description>Persönlicher Blog von Michael Wiedau</description>
	<lastBuildDate>Tue, 07 Feb 2012 15:11:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<atom:link rel="next" href="http://www.michael.wiedau.com/articles/category/computer/java-computer/feed/?page=2" />

		<item>
		<title>Google AJAX API mit Java</title>
		<link>http://www.michael.wiedau.com/articles/google-ajax-api-mit-java/</link>
		<comments>http://www.michael.wiedau.com/articles/google-ajax-api-mit-java/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 10:47:58 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.wiedau.com/?p=71</guid>
		<description><![CDATA[Möchte man die Möglichkeiten einer Internetsuche mit Google aus Java heraus benutzen können, so ist das zunächst recht schwer möglich, da Google keine Webservices anbietet, die diesen Zugriff ermöglichen. Google besitzt aber eine Schnittstelle um es Anwendungen des Web 2.0 &#8230; <a href="http://www.michael.wiedau.com/articles/google-ajax-api-mit-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Möchte man die Möglichkeiten einer Internetsuche mit Google aus Java heraus benutzen können, so ist das zunächst recht schwer möglich, da Google keine Webservices anbietet, die diesen Zugriff ermöglichen. Google besitzt aber eine Schnittstelle um es Anwendungen des Web 2.0 zu ermöglichen, einen AJAX-Zugriff ihre Suchmaschine zu ermöglichen. Diese AJAX-Schnittstelle kann genutzt werden um über einen HTTP-Request die Suchmaschine mit Java aufzurufen.</p>
<ul>
<li><a href="http://blog.wiedau.com/wp-content/uploads/2008/09/GoogleAJAXSearchAPI.java">GoogleAJAXSearchAPI.java</a></li>
<li><a href="http://blog.wiedau.com/wp-content/uploads/2008/09/googleresult.java">GoogleResult.java</a></li>
</ul>
<p>Hierzu muss ein Google-API Key besorgt werden, welcher nach erfolgreicher Anmeldung kostenlos sein dürfte. Folgender Sourcecode erledigt diese Aufgabe<br />
<span id="more-71"></span></p>
<pre class="brush: java; title: ; notranslate">
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class GoogleAJAXSearchAPI {
	private static String URLHEADER = &quot;\&quot;unescapedUrl\&quot;:\&quot;&quot;;

	private static String TITLEHEADER = &quot;\&quot;titleNoFormatting\&quot;:\&quot;&quot;;

	private static String APIKEY = &quot;--your own key here --&quot;;

    private static String ENDPOINTURL = &quot;http://www.google.com/uds/GwebSearch?&quot;+
    &quot;callback=GwebSearch.Raw&quot; +
    &quot;Completion&amp;amp;amp;context=0&amp;amp;amp;lstkp=0&amp;amp;amp;rsz=large&amp;amp;amp;hl=en&amp;amp;amp;&quot; +
    &quot;sig=8656f49c146c5220e273d16b4b6978b2&quot;;

	public List&lt;GoogleResult&gt; search(String searchstring) {
		SearchResultList results = new SearchResultList();
		URLConnection uc;
		HttpURLConnection connection = null;
		InputStream inputStream = null;
		StringBuffer output = new StringBuffer();
		String endpoint = null;

		try {
			searchstring = searchstring.replace(&quot; &quot;, &quot;+&quot;);

			endpoint = ENDPOINTURL + &quot;&amp;amp;amp;q=&quot; + searchstring + &quot;&amp;amp;amp;key=&quot; + APIKEY
					+ &quot;&amp;amp;amp;v=1.0&quot;;
			uc = new URL(endpoint).openConnection();
			connection = (HttpURLConnection) uc;
			connection.setDoOutput(true);
			connection.setRequestMethod(&quot;GET&quot;);
			connection.connect();
			String line;
			inputStream = connection.getInputStream();
			BufferedReader rd = new BufferedReader(new InputStreamReader(
					inputStream));
			while ((line = rd.readLine()) != null) {
				output.append(line);
			}
			inputStream.close();
//			System.out.println(endpoint);
			return processResult(output.toString());
		} catch (Exception e1) {
			System.err.println(&quot;Error while searching Google:&quot;);
			e1.printStackTrace();
		}
		return results;
	}

	private List&lt;GoogleResult&gt; processResult(String resultset) {
		List&lt;GoogleResult&gt; searchResults = new ArrayList&lt;GoogleResult&gt;();
		StringTokenizer stringTokenizer = new StringTokenizer(resultset, &quot;,{&quot;);
		String next;

		String url = null;
		String title = null;

		while (stringTokenizer.hasMoreTokens()) {
			next = stringTokenizer.nextToken();
			if (next.startsWith(URLHEADER))
				url = next.substring(URLHEADER.length(), next.length() - 1);
			else if (next.startsWith(TITLEHEADER))
				title = next.substring(TITLEHEADER.length(), next.length() - 1);

			if (url != null &amp;amp;amp;&amp;amp;amp; title != null) {
				searchResults.add(new GoogleResult(title, url));
				url = null;
				title = null;
			}
		}
		return searchResults;
	}

	public static void main(String[] args) throws Exception {

		String search = &quot;sin maastricht&quot;;
		GoogleAJAXSearchAPI googleAPI = new GoogleAJAXSearchAPI();
		List&lt;GoogleResult&gt; results = googleAPI.search(search);
		System.out.println(&quot;Results for search for &quot;+search);
		for(GoogleResult result : results) {
			System.out.println(result);
		}
	}
}
</pre>
<p>Es wird auch die kleine Klasse GoogleResult benötigt, die ein solches Result abspeichert: </p>
<pre class="brush: java; title: ; notranslate">

public class GoogleResult {
    private String url, title;

    public GoogleResult (String title, String url)
    {
        setTitle(title);
        this.url = url;
    }

    private void setTitle (String title)
    {
        this.title = title;
    }

    public String getTitle () {
    	return title;
    }

    public String getUrlString() {
        return url;
    }

    @Override
    public String toString() {
        return (title + &quot;\t&quot; + url);
    }

    public boolean equals (GoogleResult r)
    {
        if (r.getUrlString().equals(url))
            return true;
        return false;
    }

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.michael.wiedau.com/articles/google-ajax-api-mit-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Live-Zugriff auf WordNet</title>
		<link>http://www.michael.wiedau.com/articles/java-live-zugriff-auf-wordnet/</link>
		<comments>http://www.michael.wiedau.com/articles/java-live-zugriff-auf-wordnet/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 17:00:12 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Aritificial Intelligence]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://blog.wiedau.com/?p=61</guid>
		<description><![CDATA[An der Princeton-University wurde seit 1985 ein Computerprogramm entwickelt, welches den Wortschatz der englischen Sprache möglichst komplett abbilden soll. Dieser Wort-Korpus umfasst neben den Wörtern selbst auch die inhaltlichen Zusammenhänge zwischen den Wörtern. Um diesen Korpus zu testen, bietet die &#8230; <a href="http://www.michael.wiedau.com/articles/java-live-zugriff-auf-wordnet/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>An der <a href="http://www.princeton.edu/">Princeton-University</a> wurde seit 1985 ein Computerprogramm entwickelt, welches den Wortschatz der englischen Sprache möglichst komplett abbilden soll. Dieser Wort-Korpus umfasst neben den Wörtern selbst auch die inhaltlichen Zusammenhänge zwischen den Wörtern. Um diesen Korpus zu testen, bietet die Princeton-University eine Website an, unter der man <a href="http://wordnet.princeton.edu/perl/webwn">Anfragen an diese Datenbank</a> stellen kann. Möchte man nun aus JAVA heraus auf diese Informationen zugreifen, so geht das einerseits durch den kompletten Download der Datenbank und der lokalen Installation auf dem eigenen Computer oder aber durch folgende Java-Klasse:<br />
<span id="more-61"></span></p>
<pre class="brush: java; title: ; notranslate">

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.List;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WordNetLiveRequest {

	private String requestURL =
		&quot;http://wordnet.princeton.edu/perl/webwn&quot;;

	private boolean debugging = false;

	public WordNetLiveRequest() {
	}

	public Vector&lt;String&gt; findMatchingWords(String word, boolean blowup) {
		Vector&lt;String&gt; words = filterWebsite(getWebsite(word));
		if (blowup) {
			words = blowup(words);
		}
		return words;
	}

	private Vector&lt;String&gt; filterWebsite(String website) {
		website = website.replaceAll(&quot;\\&lt;.*?\\&gt;&quot;, &quot;&quot;);
		Pattern pattern = Pattern.compile(&quot;S:\\s\\([vn]\\)([a-z\\s,]*)\\(.*&quot;);
		Matcher matcher = pattern.matcher(website);
		Vector&lt;String&gt; otherWords = new Vector&lt;String&gt;();
		while (matcher.find()) {
			if (debugging) {
				System.out.println(matcher.group(0));
				System.out.println(&quot; --&gt;&quot; + matcher.group(1));
			}
			String[] matches = matcher.group(1).split(&quot;,&quot;);
			for (int i = 0; i &lt; matches.length; i++) {
				String word = matches[i].trim();
				if (!otherWords.contains(word)) {
					otherWords.add(word);
				}
			}
		}
		return otherWords;
	}

	private String getWebsite(String searchTerm) {
		String completeText = &quot;&quot;;
		try {
			String data = URLEncoder.encode(&quot;s&quot;, &quot;UTF-8&quot;) + &quot;=&quot;
					+ URLEncoder.encode(searchTerm, &quot;UTF-8&quot;);
			// data += &quot;&amp;amp;amp;amp;amp;&quot; + URLEncoder.encode(&quot;key2&quot;, &quot;UTF-8&quot;) + &quot;=&quot; +
			// URLEncoder.encode(&quot;value2&quot;, &quot;UTF-8&quot;);

			// Send data
			URL url = new URL(requestURL);
			URLConnection conn = url.openConnection();
			conn.setDoOutput(true);
			OutputStreamWriter wr = new OutputStreamWriter(conn
					.getOutputStream());
			wr.write(data);
			wr.flush();

			// Get the response
			BufferedReader rd = new BufferedReader(new InputStreamReader(conn
					.getInputStream()));
			String line;
			while ((line = rd.readLine()) != null) {
				completeText += line + &quot;\n&quot;;
			}
			wr.close();
			rd.close();
		} catch (Exception e) {
			System.out.println(&quot;Error getting Website:&quot;);
			e.printStackTrace();
		}
		return completeText;
	}

	private Vector&lt;String&gt; blowup(Vector&lt;String&gt; wordlist) {
		Vector&lt;String&gt; newList = new Vector&lt;String&gt;();
		for (String word : wordlist) {
			if (!newList.contains(word))
				newList.add(word);
			Vector&lt;String&gt; tmpList = findMatchingWords(word, false);
			for (String word2 : tmpList) {
				if (!newList.contains(word2))
					newList.add(word2);
			}
		}
		return newList;
	}

	public static void main(String[] args) {
		String word = &quot;food&quot;;
		WordNetLiveRequest wn = new WordNetLiveRequest();
		List&lt;String&gt; words = wn.findMatchingWords(word, true);
		System.out.println(&quot;Words related to '&quot; + word + &quot;': &quot; + words);
	}

}
</pre>
<p>Ein Programmaufruf wie in der o.a. Main-Routine gibt mit dem Schlüsselwort &#8220;food&#8221; gibt folgende Ausgabe:</p>
<blockquote><p>Words related to &#8216;food&#8217;: [food, nutrient, solid food, food for thought, intellectual nourishment]</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.michael.wiedau.com/articles/java-live-zugriff-auf-wordnet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java HashMap durchlaufen</title>
		<link>http://www.michael.wiedau.com/articles/java-hashmap-durchlaufen/</link>
		<comments>http://www.michael.wiedau.com/articles/java-hashmap-durchlaufen/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 12:43:38 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.wiedau.com/?p=58</guid>
		<description><![CDATA[Java bietet mit seiner Klasse java.util.HashMap eine sehr schöne Implementierung einer assiziativen Speichermöglichkeit. Um die Elemente in einer HashMap zu durchlaufen bietet sich folgender Code an: for ( Map.Entry&#60;String, String&#62; e : h.entrySet() ) System.out.println( e.getKey() + "="+ e.getValue() );]]></description>
			<content:encoded><![CDATA[<p>Java bietet mit seiner Klasse java.util.HashMap eine sehr schöne Implementierung einer assiziativen Speichermöglichkeit. Um die Elemente in einer HashMap zu durchlaufen bietet sich folgender Code an:</p>
<blockquote>
<pre><strong>for</strong> <span style="color: #4444ff;"><strong>(</strong></span> <span style="color: #2040a0;">Map</span>.<span style="color: #2040a0;">Entry</span><span style="color: #4444ff;">&lt;</span><span style="color: #2040a0;">String</span>, <span style="color: #2040a0;">String</span><span style="color: #4444ff;">&gt;</span> <span style="color: #2040a0;">e</span> <span style="color: #4444ff;">:</span> <span style="color: #2040a0;">h</span>.<span style="color: #2040a0;">entrySet</span><span style="color: #4444ff;"><strong>(</strong></span><span style="color: #4444ff;"><strong>)</strong></span> <span style="color: #4444ff;"><strong>)</strong></span>
<span style="color: #2040a0;">System</span>.<span style="color: #2040a0;">out</span>.<span style="color: #2040a0;">println</span><span style="color: #4444ff;"><strong>(</strong></span> <span style="color: #2040a0;">e</span>.<span style="color: #2040a0;">getKey</span><span style="color: #4444ff;"><strong>(</strong></span><span style="color: #4444ff;"><strong>)</strong></span> <span style="color: #4444ff;">+</span> <span style="color: #008000;">"="</span><span style="color: #4444ff;">+</span> <span style="color: #2040a0;">e</span>.<span style="color: #2040a0;">getValue</span><span style="color: #4444ff;"><strong>(</strong></span><span style="color: #4444ff;"><strong>)</strong></span> <span style="color: #4444ff;"><strong>)</strong></span><span style="color: #4444ff;">;</span></pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.michael.wiedau.com/articles/java-hashmap-durchlaufen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

