Thema: [Java] Wordmix
-
23.11.2011, 16:29 #1
[Java] Wordmix
Hallo,
im Moment programmiere ich eine Wordmix-Klasse für meinen MClienten und dachte, ich könnte das bisherige Resultat mal online stellen.
[HIDE]
PHP-Code:package util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author Mentos
* Fully rewritten WordmixBot by Mentos.
* Ich bin krank. Habt Mitleid!
* Wer sie verwendet, schreibt es bitte in den Bot rein!
*/
public class WordmixBot {
public WordmixBot()
{
String input = "Markt(°B°1°°) in(°B°2°°) mit(°B°3°°) steigt(°B°4°°) Berger(°B°5°°) Bilfinger(°B°6°°) ein.(°B°7°°) Übernahme(°B°8°°) indischen(°B°9°°)";
googleAnswere(input);
}
/**
* Liest den Quelltext einer Seite aus
* @param websiteURL Die InternetSeite
* @return Den Quelltext
*/
private static String getSource(String websiteURL) {
try {
String sourceLine;
URL url = new URL(websiteURL);
URLConnection con = url.openConnection();
con.setRequestProperty("User-Agent", "");
//InputStream inputStream = url.openStream();
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder source = new StringBuilder();
while ((sourceLine = bufferReader.readLine()) != null) {
source.append(sourceLine);
}
return source.toString();
} catch (Exception x) {
x.printStackTrace();
return null;
}
}
/**
* Sucht für das Knuddels-Chat-System die Richtige Wordmix-Antwort
* @param input Alles vom Packet ab dem _
* @return (Manchmal) die richtige Antwort!
*/
public static String googleAnswere(String input)
{
String source;
try {
source = getSource("http://www.google.de/search?q=" + java.net.URLEncoder.encode(googleString(input), "UTF-8")); //Quelltext herunterladen
List<String> used = new ArrayList<String>(); //Eine Liste machen (Welche Wörter wurden schon benutzt)
StringBuilder solution = new StringBuilder(); //Einen StringBuilder für die Finale Lösung
HashMap textNumber = textNumber(input); //Eine HashMap mit den Wörtern (Mentos => 1)
source = source.substring(source.indexOf("<b>Web</b>")); //Alles ab <b>Web</b> beachten
String[] solutions = source.split("<b>");//Keine Ahnung mehr
String search = util.Util.StringArrayToString(solutions, " ").replace("</b>", "");
for(String s:search.split(" ")) //Für jedes einzelne Wort
{
if(!s.isEmpty()){ //Vorrausgesetzt es ist nicht leer
if(textNumber.containsKey(s) && !used.contains(s)) //Wird überprüft, ob es gebraucht wird und wenn ja, ob es verwendet wurde.
{
solution.append(textNumber.get(s)); //Dann wird die Lösung dem StringBuilder hinzugefügt
used.add(s); //Und auch der Used-Liste
if(solution.length() == textNumber.values().size()) //Wenn die Anzahl der Lösung der Anzahl der Suche entspricht
{
return solution.toString(); //Die Lösung zurückgeben.
}
}}
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* TextNumber. Gibt für einen InputString (z.B. Mentos(°B°1°°) König.(°B°2°°) ist(°B°3°°)) eine HashMap zurück (Mentos => 1,...)
* @param input Der KnuddelsString, der die Wörter+Nummern beinhaltet (z.B. Mentos(°B°1°°) König.(°B°2°°) ist(°B°3°°))
* @return HashMap (Mentos => 1, König => 2, ist => 3)
*/
private static HashMap textNumber(String input)
{
String patternString = "([A-Za-zäöüÄÜÖéè\\.,!ß]+)\\(°B°([0-9]+)°°\\)"; //Pattern zum matchen :)
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); //Kompilieren
Matcher matcher = pattern.matcher(input); //Auf den Input rausstrecken
HashMap<String, Integer> returnment = new HashMap<String, Integer>();
while(matcher.find())
{
returnment.put(matcher.group(1), Integer.valueOf(matcher.group(2))); //Hinzufügen!
}
return returnment;
}
/**
* Passt den String an Google an
* @param input Den KnuddelsString
* @return Einen Google-Konformen String
*/
private static String googleString(String input)
{
String patternString = "([A-Za-zäöüÄÜÖéè\\.,!ß]+)\\(°B°[0-9]+°°\\)"; //Pattern zum matchen :)
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE); //Kompilieren
Matcher matcher = pattern.matcher(input); //Auf den Input rausstrecken
StringBuilder builder = new StringBuilder();
while(matcher.find())
{
builder.append("\"").append(matcher.group(1)).append("\"").append(' ');
}
System.out.println(builder.toString().substring(0, builder.length()));
return builder.toString().substring(0, builder.length());
}
}
------
/**
* Gibt ein StringArray zu einem String anhand eines Delimeters zurück!
* @param array Das StringArray
* @param delimeter Der Delimeter
* @return Einen String, der das StringArray mit den Delimetern verbunden hat.
*/
public static String StringArrayToString(String[] array, String delimeter) {
StringBuilder builder = new StringBuilder();
for (String s : array) {
builder.append(s);
builder.append(delimeter);
}
return builder.toString().substring(0,
builder.length() - delimeter.length());
}
Geändert von DeKaDeNz (08.02.2012 um 00:32 Uhr)
„Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
- Albus Dumbledore, Harry Potter 2
/guestchat registerGuest
-
The Following 5 Users Say Thank You to Mentos For This Useful Post:
-
23.11.2011, 16:36 #2
AW: [Klasse] Wordmix
Der MClient ist doch schon etwas älter oder? Wirst du ihn völlig neu rausbringen, oder nur kleine Veränderungen vornehmen?
-
23.11.2011, 17:01 #3
AW: [Klasse] Wordmix
<3 genau so hatte ich mir das vorgestellt
[HIDE=10]Also wenn ich das richtig verstanden habe, funktioniert der Bot so:
Mustersatz (4) das (3) ein (2) ist (1).
Du schickst mal nur den Satz ohne die Zahlen an Google: Mustersatz - Google-Suche das ist ein.
Wie gehst du danach vor? Prüft du auf Relevanz? Wenn ja, wie? Nach welchen Kriterien wird dann die Reihenfolge zurückgegeben?[/HIDE]
@Mods: Man kanns mit der "Beitragsputzerei" auch übertreiben -.-
-
23.11.2011, 17:06 #4
AW: [Klasse] Wordmix
Aehm. Also erst wird die Anfrage an Google gesendet.
Dann wird halt Quelltextbereinigung vorgenommen. Dann wird für jedes Wort geprüft, ob es vorhanden ist und wenn ja, ob es das erste Mal vorkommt.
Danach wird das zurückgegeben. Sicherheiten habe ich noch nicht eingebaut.„Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
- Albus Dumbledore, Harry Potter 2
/guestchat registerGuest
-
The Following User Says Thank You to Mentos For This Useful Post:
AFU (23.11.2011)
-
23.11.2011, 17:10 #5
AW: [Klasse] Wordmix
Warum ob es das erste mal vorkommt? Wieso ist das wichtig?
Mit das meinst du hier, dass die Positionen zurückgegeben werden an der sie sich befinden? Also quasi schon das finale Ergebnis, was der Bot retourniert? (1234234)
Was meinst du genau mit Sicherheiten?
BTW: Ich würde mich freuen, wenn man zukünftig einen privater Pastebin mit Java-Highlighting benutzt
-
23.11.2011, 17:13 #6
AW: [Klasse] Wordmix
Ja. Aber die Klasse ist auch noch nicht besonders gut. Ich arbeite gerade an einer neuen Struktur, die besser geht
MfG„Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
- Albus Dumbledore, Harry Potter 2
/guestchat registerGuest
-
The Following User Says Thank You to Mentos For This Useful Post:
AFU (23.11.2011)
Ähnliche Themen
-
Win7 Java in Safari ausführen (Fehlermeldung Java nicht installiert)
Von Silverstar im Forum WindowsAntworten: 8Letzter Beitrag: 02.12.2013, 23:41 -
Frage Wordmix bot.
Von x Like a Boss x3 im Forum Knuddels BotsAntworten: 1Letzter Beitrag: 20.07.2013, 15:22 -
Release WordMix v0.5
Von exception im Forum ShowroomAntworten: 4Letzter Beitrag: 31.07.2012, 14:06 -
Wordmix in .at
Von x failstar im Forum Knuddels ChatspieleAntworten: 0Letzter Beitrag: 28.05.2012, 12:33 -
Wordmix Bot
Von godfather2012 im Forum Knuddels BotsAntworten: 1Letzter Beitrag: 03.01.2012, 04:57
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.