Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Google Meinten Sie (https://www.delphipraxis.net/74613-google-meinten-sie.html)

API 6. Aug 2006 11:35


Google Meinten Sie
 
Hat jemand von euch schon mal eine Funktion gecoded welche
von einem bestimmten Wort ähnliche Wörter aus Google ausliest.

Man gibt z.B Deutch ein und Google sagt "Meinten Sie: Deutsch"

Delphi-Quellcode:
function GetSimilarWord(meinwort: string): string;
begin
end;
Habe einen Code gefunden aber nicht in Delphi.
Wie kann ich das übersetzen?

Code:
=begin
Raimbo, the Ruby AIM Bot Object.
Copyright (C) 2003 Kurt M. Dresner (kdresner@rubyforge.org)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
=end

require 'net/http'
require 'uri/common'
require 'cgi'
Net::HTTP.version_1_2
module Google
  def Google.search(inputterms, numresults=1)
    unless inputterms.length > 0
      return "What should I search for?"
    end
    searchterms = URI.escape inputterms
   
    query = "/search?q=#{searchterms}&btnG=Google+Search"
    result = "no results found."
   
    proxy_host = nil
    proxy_port = nil
   
    if(ENV['http_proxy'])
      if(ENV['http_proxy'] =~ /^http:\/\/(.+):(\d+)$/)
        proxy_host = $1
        proxy_port = $2
      end
    end
    http = Net::HTTP.new("www.google.com", 80, proxy_host, proxy_port)
   
    http.start do |http|
      begin
        resp , = http.get(query)
        if resp.code.to_i == 200
     didyoumean = nil
     results = []
     resp.body.each("Similar pages</a>") do |l|
       if not didyoumean and l =~ /Did you mean:.*?[i](.*?)<\/i>.*?<\/a>/
         didyoumean = $1
       end
       if (l =~ /(<p class="?g"?>)(<a.*?<\/a>)/) and (results.size < numresults)
         results.push("Hit #{results.size + 1}: #{$2}")
       end
     end
     unless results.empty?
       result = results.join("\n")
       if (results.size < numresults) and didyoumean
         result += " (Did you mean [i]#{didyoumean}[/i]?)."
       else
         result += "."
       end
            # comment out the line below to leave the search terms bolded
            result.gsub!(/[b]|<\/b>/, "")
     else
       if didyoumean
         result += "\n(Did you mean [i]#{didyoumean}[/i]?)."
       end
     end
   end
      rescue => e
   result = "Error encountered while talking to Google."
      end
    end
    CGI.unescapeHTML result
  end
end

Meflin 6. Aug 2006 11:40

Re: Google Meinten Sie
 
also diese funktion macht nichts anderes als das der Funktion übergebene Wort an Google zu schicken und zu schauen ob Google ein "did you mean..." vorschlägt und das zurückzugeben - das ist ja nicht wirklich eine glanzleistung :?

Ich weis nicht ob dir das bewusst ist - wenn ja: IdHTTP, und dann einfach was du zurückbekommst auswerten, dürfte nicht sooo schwer sein.

Wenn nein - und das hoffe ich ;) - kann ich dir aber da jetzt leider auch keinen Algo anbieten :(


3_of_8 6. Aug 2006 11:41

Re: Google Meinten Sie
 
Tja, lies dir ein C++ Tutorial durch.

Oder, noch ne Idee, du überprüfst SoundEx Werte, und zwar die vom eingegebenen Wort mit Wörtern in einer Datenbank, wobei die Wörter in der Datenbank, die öfter eingegeben werden, Vorrang haben.

Delphi-Quellcode:
type
  TWord = record
    text: String;
    count: Integer;
  end;

var Words: array of TWord;

//...

function GetSimilar(str: String): String;
var I: Integer;
    bestindex, bestcount: Integer;
begin
  bestcount:=0;
  bestindex:=-1;
  for I:=0 to high(Words) do
    if (soundexsimilar(str, words[I].text)) and (words[I].count>bestcount) then
    begin
      bestcount:=words[I].count;
      bestindex:=I;
    end;
  if bestindex=-1 then result:='' else result:=words[bestindex].text;
end;

sakura 6. Aug 2006 11:41

Re: Google Meinten Sie
 
Zitat:

Zitat von Meflin
IdHTTP, und dann einfach was du zurückbekommst auswerten, dürfte nicht sooo schwer sein.

Achtung, unbedingt den User-Agent ändern. Google reagiert allergisch auf den originalen IdHttp-UserAgent :stupid:

...:cat:...

mkinzler 6. Aug 2006 11:42

Re: Google Meinten Sie
 
Du brauchst einen Algorithmus der die die Ähnlichkeit von 2 Wörtern berechnet. Wie z.B. Levenshtein.

sakura 6. Aug 2006 11:43

Re: Google Meinten Sie
 
Zitat:

Zitat von mkinzler
Du brauchst einen Algorithmus der die die Ähnlichkeit von 2 Wörtern berechnet. Wie z.B. Levenshtein.

Will er doch gar nicht, er will einfach Googles Antwort nutzen :roll:

...:cat:...

API 6. Aug 2006 11:54

Re: Google Meinten Sie
 
Zitat:

Zitat von sakura
Zitat:

Zitat von mkinzler
Du brauchst einen Algorithmus der die die Ähnlichkeit von 2 Wörtern berechnet. Wie z.B. Levenshtein.

Will er doch gar nicht, er will einfach Googles Antwort nutzen :roll:

...:cat:...

Danke für die Antworten. sakura hat recht, bitte immer schön die Fragestellung durchlesen, so wie in der Schule :wink:

Wie kann man den User-Agent ändern? Braucht es da einen Registry Eingriff?

fkerber 6. Aug 2006 11:56

Re: Google Meinten Sie
 
Hi!

Nein, dazu gibt es im OI (bei ausgewählter IdHttp-Komponente) die Eigenschaft Request und dort drunter User-Agent!


Ciao, Frederic

API 6. Aug 2006 11:57

Re: Google Meinten Sie
 
ok, schon gefunden
Delphi-Quellcode:
TIdHttp.Request.UserAgent

mkinzler 6. Aug 2006 11:57

Re: Google Meinten Sie
 
Zitat:

sakura hat recht, bitte immer schön die Fragestellung durchlesen, so wie in der Schule Wink
Thema verfehlt! 6! Setzen! :oops:

vlees91 6. Aug 2006 11:59

Re: Google Meinten Sie
 
also ich habe mir mal was gebastelt mit einer wortliste aus einem wörterbuch (gnu), dass das kann:
buchstaben im wort zählen und mit dem buchstaben profil der wörter in der liste vergleichen. wahrscheinlichkeit ausrechnen
fertig

Meflin 6. Aug 2006 12:02

Re: Google Meinten Sie
 
Zitat:

Zitat von mkinzler
Thema verfehlt! 6! Setzen! :oops:

Naja, die Lösung über einen eigenen Algo wäre auch wesentlich sauberer als dieses Workaround :wall: Da tut einem ja alles weh :lol:


Zitat:

Zitat von vlees91
also ich habe mir mal was gebastelt mit einer wortliste aus einem wörterbuch (gnu), dass das kann:
buchstaben im wort zählen und mit dem buchstaben profil der wörter in der liste vergleichen. wahrscheinlichkeit ausrechnen
fertig

Supi :thumb: wenn du es jetzt auch noch hochlädst damit wir auch was davon haben, wär das noch besser, oder wolltest du uns nur neidisch machen :lol: ?


Khabarakh 6. Aug 2006 12:10

Re: Google Meinten Sie
 
Zitat:

Zitat von 3_of_8
Tja, lies dir ein C++ Tutorial durch.

Was einem bei einem Ruby-Quelltext natürlich wahnsinnig weiterhilft.

Daniel G 6. Aug 2006 12:51

Re: Google Meinten Sie
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von 3_of_8
Tja, lies dir ein C++ Tutorial durch.

Was einem bei einem Ruby-Quelltext natürlich wahnsinnig weiterhilft.

:lol:

vlees91 6. Aug 2006 15:38

Re: Google Meinten Sie
 
der qt ist 1. in php und 2. bin ich atm an einem anderen rechner...

EDatabaseError 6. Aug 2006 15:40

Re: Google Meinten Sie
 
@Topic:
wenns fertig ist wär das was für die CodeLibrary

API 8. Aug 2006 08:00

Re: Google Meinten Sie
 
Liste der Anhänge anzeigen (Anzahl: 1)
Haben unterdessen etwas gemacht. Könnt es euch ja mal anschauen und mir Verbesserungsvorschläge geben.
Danke. :wink:

Download weiter unten

API 8. Aug 2006 08:05

Re: Google Meinten Sie
 
Habe noch einen Bug gefunden.
Wenn ich 2 oder mehrere Wörter eingebe, gibt's einen

Zitat:

Socket Error # 10053
Software caused connection abort.
Was bedeutet das?

API 8. Aug 2006 08:11

Re: Google Meinten Sie
 
Zitat:

Zitat von API
Habe noch einen Bug gefunden.
Wenn ich 2 oder mehrere Wörter eingebe, gibt's einen

Zitat:

Socket Error # 10053
Software caused connection abort.
Was bedeutet das?

ich sollte wohl die Leerstellen durch + ersetzen. dann kommt der Fehler nicht mehr...

API 8. Aug 2006 08:20

Re: Google Meinten Sie
 
Liste der Anhänge anzeigen (Anzahl: 1)
:thumb: Hier noch ein Update

Meflin 8. Aug 2006 10:40

Re: Google Meinten Sie
 
Zitat:

Zitat von EDatabaseError
wenns fertig ist wär das was für die CodeLibrary

ähm nicht wirklich. ich bezweifle nämlich dass das so ganz koscher bzw. mit den agb (oder was immer) von Google so ganz vereinbar. Denn für Leute die ihren Service nutzen wollen gibts ne API...


API 8. Aug 2006 15:44

Re: Google Meinten Sie
 
[quote="Meflin"]
Zitat:

Zitat von EDatabaseError
Denn für Leute die ihren Service nutzen wollen gibts ne API...

Hat das schon mal jemand gemacht?

API 12. Sep 2006 08:16

Re: Google Meinten Sie
 
Zitat:

Zitat von API

Hat das schon mal jemand gemacht?

Anscheinend nicht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz