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 Princeton-University eine Website an, unter der man Anfragen an diese Datenbank 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:
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 =
"http://wordnet.princeton.edu/perl/webwn";
private boolean debugging = false;
public WordNetLiveRequest() {
}
public Vector<String> findMatchingWords(String word, boolean blowup) {
Vector<String> words = filterWebsite(getWebsite(word));
if (blowup) {
words = blowup(words);
}
return words;
}
private Vector<String> filterWebsite(String website) {
website = website.replaceAll("\\<.*?\\>", "");
Pattern pattern = Pattern.compile("S:\\s\\([vn]\\)([a-z\\s,]*)\\(.*");
Matcher matcher = pattern.matcher(website);
Vector<String> otherWords = new Vector<String>();
while (matcher.find()) {
if (debugging) {
System.out.println(matcher.group(0));
System.out.println(" -->" + matcher.group(1));
}
String[] matches = matcher.group(1).split(",");
for (int i = 0; i < matches.length; i++) {
String word = matches[i].trim();
if (!otherWords.contains(word)) {
otherWords.add(word);
}
}
}
return otherWords;
}
private String getWebsite(String searchTerm) {
String completeText = "";
try {
String data = URLEncoder.encode("s", "UTF-8") + "="
+ URLEncoder.encode(searchTerm, "UTF-8");
// data += "&amp;amp;amp;" + URLEncoder.encode("key2", "UTF-8") + "=" +
// URLEncoder.encode("value2", "UTF-8");
// 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 + "\n";
}
wr.close();
rd.close();
} catch (Exception e) {
System.out.println("Error getting Website:");
e.printStackTrace();
}
return completeText;
}
private Vector<String> blowup(Vector<String> wordlist) {
Vector<String> newList = new Vector<String>();
for (String word : wordlist) {
if (!newList.contains(word))
newList.add(word);
Vector<String> 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 = "food";
WordNetLiveRequest wn = new WordNetLiveRequest();
List<String> words = wn.findMatchingWords(word, true);
System.out.println("Words related to '" + word + "': " + words);
}
}
Ein Programmaufruf wie in der o.a. Main-Routine gibt mit dem Schlüsselwort “food” gibt folgende Ausgabe:
Words related to ‘food’: [food, nutrient, solid food, food for thought, intellectual nourishment]
This is great info to know.