Implementation av en sökmotor och robot för webbsidor

advertisement
Implementation av en sökmotor och
robot för webbsidor
Av Jakob Bandelin
Fördjupningsuppgift i kursen Artificiell intelligens, 729G50
Linköpings Universitet, 2007
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Förord
Det här arbetet är en fördjupningsuppgift på kursen Artificell Intelligens, 729G50, på
programmet för kognitionsvetenskap vid Linköpings universitet.
Sammanfattning
Sökmotorer använder robotar för att samla information om webbsidor och presentera
dessa sidor efter relevans när en användare gör en sökning. Arbetet går kortfattat
igenom hur sökmotorer och robotar är uppbyggda samt beskriver en implementation
av en enkel sökmotor och robot.
Sida 2
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Innehållsförteckning
Förord ............................................................................................................................................... 2
Sammanfattning ............................................................................................................................. 2
Innehållsförteckning ...................................................................................................................... 3
Inledning .......................................................................................................................................... 4
Bakgrund ..................................................................................................................................... 4
Syfte .............................................................................................................................................. 4
Metod och upplägg ................................................................................................................... 4
Litteraturgenomgång..................................................................................................................... 5
Sökmotorers anatomi ................................................................................................................ 5
Sökmotorers intelligens ............................................................................................................ 5
Robotens anatomi ...................................................................................................................... 7
Robotens intelligens .................................................................................................................. 7
Implementationen...................................................................................................................... 8
Sökmotorn............................................................................................................................... 8
Roboten.................................................................................................................................... 9
Avslutning ..................................................................................................................................... 10
Slutsatser från implementationen ........................................................................................ 10
Diskussion kring sökmotorerna ........................................................................................... 10
Referenser....................................................................................................................................... 12
Länkar......................................................................................................................................... 12
Bilagor ............................................................................................................................................. 13
index.php................................................................................................................................... 13
robot.php5 ................................................................................................................................. 14
Sida 3
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Inledning
Bakgrund
På Internet finns många webbsidor fyllda med information. Problemet för
internetanvändaren är att hitta bland informationen. För att underlätta sökandet har
det utvecklats sökmotorer som snabbt kan ge svar på vilka sidor en besökare kan vara
intresserad av utifrån olika sökord. Problemet för sökmotorerna är att presentera de
sidor som är mest relevanta för användaren. De använder olika mer eller mindre
intelligenta strategier när
de samlar, ordnar och presenterar sitt innehåll.
Sökmotorerna använder agenter, även kallade robotar eller crawlers, för att förse sig
med information om webbsidor och deras innehåll.
Syfte
Syftet med denna fördjupningsuppgift är att gå igenom hur en sökmotor och robot
fungerar. Utifrån teorin görs en implementation av en sökmotor där en intelligent
strategi används för att avgöra vilka webbsidor som är relevanta för en sökning. För
att fylla sökmotorn med information krävs också implementation av en robot.
Metod och upplägg
En kort litteraturgenomgång följs av en beskrivning av implementationen. Rapporten
avslutas med slutsatser från implementationen och en diskussion.
Sida 4
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Litteraturgenomgång
Sökmotorers anatomi
En sökmotor för Internet är ett webbaserat gränssnitt kopplat till en databas. I
databasen finns information om webbsidors innehåll och deras internetadresser, url.
När en användare skriver in ett eller flera sökord i gränssnittet är det sökmotorns
uppgift att gå igenom den information den har i sin databas och returnera till
användaren de sidor som kan tänkas vara relevanta för användaren. För att analysera
vilka av de lagrade sidorna som är mest intressanta används olika funktioner.
Sökmotorers intelligens
Det mest grundläggande sättet för en sökmotor att avgöra hur relevant en sida är för
en sökning är att helt enkelt räkna förekomsten av sökordet, eller sökorden. Den sida
som har flest träffar bedöms som mest relevant. För att ge ännu bättre resultat så
används även andra knep. Ett sätt är att ge mer vikt, eller poäng, om sökorden
förekommer på vissa ställen på webbsidan, det vill säga i hemsidans kod. Sidor som
har sökorden i titeln eller inom vissa taggar som <h1> eller <em> ger mer vikt
eftersom dom bedöms vara mer relevanta för användaren än sidor som saknar
sökorden i rubriker och dylikt. För att undvika att det kommer upp sökresultat där
någon bara fyllt sidor med ord så viktas ofta resultatet så att sidor med få ord i titeln,
och så vidare, får bättre poäng. Sökord som dyker upp långt ner på sidan ges mindre
eller inga poäng. Analys av vilka sidor som länkar till och från webbsidan påverkar
också dess bedömda relevans. Samma sak gäller för hur sidans adress ser ut. Adresser
som slutar på / eller .html ger bättre poäng än de som slutar på exempelvis
?articleID=57743&Session=3oiurweoiruweiouweriuwuv5&cookie=set. (Arasu, 2001.
Brin & Page, 1998. Pinkerton, 1994).
Sökmotorer vill gärna ha sidor som är byggda på ett visst sätt. Följande är från
Googles Design and content guidelines:
•
Make a site with a clear hierarchy and text links. Every page should be
reachable from at least one static text link.
Sida 5
Jakob Bandelin
Jakob.bandelin@gmail.com
•
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Offer a site map to your users with links that point to the important parts of
your site. If the site map is larger than 100 or so links, you may want to break
the site map into separate pages.
•
Create a useful, information-rich site, and write pages that clearly and
accurately describe your content.
•
Think about the words users would type to find your pages, and make sure
that your site actually includes those words within it.
•
Try to use text instead of images to display important names, content, or links.
The Google crawler doesn't recognize text contained in images.
•
Make sure that your TITLE tags and ALT attributes are descriptive and
accurate.
•
Check for broken links and correct HTML.
•
If you decide to use dynamic pages (i.e., the URL contains a "?" character), be
aware that not every search engine spider crawls dynamic pages as well as
static pages. It helps to keep the parameters short and the number of them few.
•
Keep the links on a given page to a reasonable number (fewer than 100).
(http://www.google.com/support/webmasters/bin/answer.py?answer=35769.
Hämtad 2007-10-10.)
Ett citat från “What is a tall poppy among web pages?” ger också en vink om hur en
webbsida skall vara uppbyggd för att hamna på en bra plats hos sökmotorerna
(Pringle, 1998):
“If you want your web page to stand out above the crowd for appropriate searches on
several search engines the following are good tactics. Give informative title, headings,
meta fields and, of course, text. Include important keywords in the title, headings and
meta fields but do not use excessive repetition which will be caught out. Consider using
terms in full more often than one would in normal writing, rather than using
pronouns and other indirect ways of referring to subjects. It may be necessary to have
different pages to attract different kinds of reader who might use different language and
jargon - the novice, the expert, the technician, the end-user, etc. - but avoid spamming
and do not attempt to attract search engines by deceit.”
Sida 6
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Robotens anatomi
Roboten har en databas med adresser som den skall besöka. Det kan vara sidor som
den redan besökt men skall göra ett återbesök till eller helt nya sidor. När den
kommer till en sida rapporterar den till sökmotorns databas vad den hittar. Den lägger
till de länkar den hittar på sidan i sin adressdatabas.
Robotens intelligens
Om roboten väljer de länkar den skall besöka i första hand med omsorg kommer
sökmotorn få ett bättre index (Cho, 1998). När roboten skall rapportera till sökmotorn
måste den tampas med att korrekt tolka den kod den hittar. Det är inte säkert att
sidorna är korrekt skrivna och HTML-taggarna kan vara mer eller mindre nästlade i
varandra. Roboten måste också ta reda på om den får läsa en sida överhuvudtaget. På
de flesta webbservrar finns en fil som talar om om det finns dokument som inte skall
sparas i sökmotorer. Roboten måste också visa hänsyn till att den tar mycket resurser
från de system som den letar igenom. En snabb robot kan läsa flera hundra sidor i
sekunden så det är bra om den kan bearbeta olika webbplatser samtidigt. (Arasu,
2001. Brin & Page, 1998. Pinkerton, 1994).
Sida 7
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Implementationen
Bild 1. Sökmotorn.
Sökmotorn
För sökmotorn byggdes en webbsida i html, css och php med ett formulär där
användaren kan skriva in sitt sökord och skicka iväg. Sökmotorn svarar då med att
visa en sida med resultatet av sökningen(se bild 1). För att sökmotorn skall kunna
utföra sin uppgift behövdes en databas, som byggdes i MySQL, med ett par tabeller:
•
Urls, lagrade sidors adress (url) och ett id
•
Titles, lagrade en sidas titel som kopplades till ett urls id
•
Contents, lagrade en sidas innehåll och kopplade det till en urls id
•
Lexicon, lagrade alla de ord som roboten stötte på under sin färd på WWW.
Varje ord kopplades till ett id.
Sida 8
Jakob Bandelin
Jakob.bandelin@gmail.com
•
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Counts, lagrade det poäng som en sida, url id, fått för ett visst ord, lexicon id.
När användaren sökte så kontrollerade sökmotorn vilket lexicon-id sökordet hade.
Sedan hämtade den de sidor som fått högst poäng på det ordet och skrev ut titel, url
och en sammanfattning av innehållet i en lista. För att enklare kunna se hur väl
poängsättningen fungerade skrevs även poäng ut för sidan (bild 1).
Roboten
Roboten använde en tabell i databasen för att lagra adresser. När den kom till en ny
sida kontrollerade den först om den fick läsa sidan för servern. Om den fick läsa sidan
tog den ut alla länkar på sidan och kontrollerade om det var några länkar som redan
var lagrade i sökmotorn eller låg i tabellen och väntade på att bli besökta. De nya
länkarna lagrade roboten i sin att-besöka-tabell. För att inte belasta en enskild server
och få lite spridning på vad den besökte valde den slumpvis adress att besöka. När
den tagit länkarna så plockade roboten ut titeln från sidan och sidans innehåll. Sen
plockade roboten bort tecken som inte skulle vara med i sökmotorns index såsom %,
#, !, med flera. För att snabba på analysen av sidorna och minska storleken på
sökmotorns databas plockades även de 25 vanligaste förekommande orden i engelska
bort (British National Corpus®, http://www.natcorp.ox.ac.uk/). Sen gick roboten
igenom titel och sidans innehåll och summerade ord för ord hur många poäng sidan
fick. Poängsättningsfunktionen satte ihop titel med innehållet och gav fem poäng till
de första hundra orden, två poäng till de nästa etthundra femtio orden och ett poäng
till och med det ord som kom på plats femhundra. Ord som kom senare fick inga
poäng.
Sida 9
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Avslutning
Slutsatser från implementationen
•
Det är svårt att parsa kod som är felaktigt skriven.
•
Databasen blir snabbt en flaskhals. Jag byggde den inte på ett bra sätt.
•
Tabellen med länkar som skulle besökas växte explosionsartat. Även när jag
tagit bort så att bara länkar som började med “http://” fick ta plats så växte
den fort. På ungefär 350 sidor kan man lätt samla på sig över 10 000 länkar.
•
En del sidor är väldigt stora så det var bra att klippa av dem innan de
analyserades eftersom det ändå bara de femhundra första orden som skulle få
poäng.
•
När jag tog bort de 25 vanligaste engelska orden från analys och lagring ökade
hastigheten på roboten markant.
•
När jag tog bort flera specialtecken från analys och lagring så växte lexikonet
mycket långsammare. Det växte ändå förvånansvärt snabbt, snabbare än vad
jag förväntat mig. Femhundra urls i sökmotorn gav runt 20 000 ord i lexikonet.
•
Det gick att ändra i poängsättning och annat utan att hämta hem alla sidor på
nytt om man kan tolerera att det finns kvar sidor med gammal poängsättning.
En smartare implementation av databaser och sökmotor hade varit att inte låta
roboten poängsätta utan att låta det ske och skötas av sökmotorn när den fick
en sökning.
•
Poängsättningen verkar vara rätt så ok. Men mitt index är för litet, knappt
1 000 sidor för att kunna avgöra hur ok det skulle vara med fler webbsidor i
index.
Diskussion kring sökmotorerna
Sökmotorernas uppgift är att presentera bra sökresultat till användarna. För att göra
det måste de minimera felaktiga träffar och sökresultat där individer eller
organisationer med hjälp av olika knep manipulerar sig till bra placeringar. Det finns
fler än tio miljarder webbsidor och skapas fler varje dag. Google har gått från två
analyser, sin berömda PageRank och en som kontrollerar ord som kommer tidigt på
en sida, till runt 200 olika analyser enligt egen utsago i en artikel i New York Times
(Hansell, 2007). Nuförtiden räcker det inte med ett stort index. Sökmotorerna måste bli
Sida 10
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
smartare – både för att hålla fuskare borta och för att presentera bra resultat. Det
verkar lovande med att göra ingående semantiska analyser av sidor och sökningar.
Det är svårt att veta hur mycket som redan finns i sökmotorerna idag eftersom det är
hårt skyddade affärshemligheter. Jag tror också det kommer dyka upp fler nichade
sökmotorer som specialiserar sig på olika ämnen och tjänster. Dessa kommer kunna
ha mycket mer hårt tweakade analysfunktioner än de allmänna sökmotorerna. Dom
behöver inte heller crawla hela nätet utan kan försöka räkna ut vilka sidor som är
intressanta att besöka oftare. Så förmodligen har vi snart även meta-sökmotorer där
man kan söka reda på vilken sökmotor man skall använda för att söka efter en viss
sak.
För att förbättra sina resultat håller sökmotorerna gärna kolla på vad användaren
sökt efter tidigare och var sökningen kommer ifrån. När sökmotorerna vill skräddarsy
träfflistan efter användarens sökhistorik blir det också en etisk fråga om personlig
integritet. Vill vi verkligen ha sökmotorer som vet allt om vad vi gör på nätet – även
om dom ger oss kanonbra sökträffar?
Sida 11
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Referenser
Arasu, A., Cho, J., Garcia-Molina, H., Paepcke, A., and Raghavan, S. Searching the
Web ACM Trans. on Internet Technology 1(1), 2-43, 2001.
Brin, Sergey and Page, Larry (1998). The Anatomy of a Large-Scale Hypertextual Web
Search Engine. Proceedings of the seventh international conference on World Wide
Web.
Junghoo Cho, Hector Garcia-Molina, Lawrence Page. Efficient Crawling Through URL
Ordering. In Proceedings of the the World Wide Web conference (WWW), Brisbane,
Australia, April 1998.
Hansell, Saul. Google Keeps Tweaking Its Search Engine, New York Times. Published:
June 3, 2007.
Pinkerton, Brian. Finding What People Want: Experiences with the WebCrawler. The
Second International WWW Conference Chicago, USA, October 17–20, 1994. Scoring
mechanisms.
Pringle, Glen, Allison, Lloyd and Dowe, David L. What is a tall poppy among web
pages? in Proc. 7th Int. World Wide Web Conference, Brisbane, pp369-377, April 1998,
& Comp. Networks & ISDN Systems 30(#1-7).
Länkar
Googles Webmaster Guidelines. Design and content guidelines.
http://www.google.com/support/webmasters/bin/answer.py?answer=35769
Hämtad 2007-10-10.
Sida 12
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
Bilagor
index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Search engine</title>
<link rel="stylesheet" href="stylesheets/basic.css" type="text/css"
media="screen" title="no title" charset="utf-8" />
</head>
<?php
$word = htmlspecialchars(trim($_POST['word']));
include('includes/db.inc.php');
$db = db_connect();
?>
<body>
<div id='content'>
<div id="search">
<h1>Search Engine</h1>
<?php
$query = "SELECT * FROM lexicon";
$result = mysql_query($query);
$words = mysql_num_rows($result);
$query = "SELECT * FROM urls";
$result = mysql_query($query);
$urls = mysql_num_rows($result);
?>
<p class='info'>Current index is <?=$urls?> urls and <a
href='lexicon.php'>lexicon</a> containing <?=$words?> unique words.</p>
<form action="index.php" method="post">
<input type="text" name="word" value="<?=$word?>" />
<input type="submit" name="submit" value="search" />
</form>
</div>
<div id='results'>
<?php
if ($word != "") {
print "<p class='status'>Search results for word: $word</p>";
$query = "SELECT lexiconid FROM lexicon WHERE word = '$word'";
//print "$query<br />";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$lexiconid = $row[0];
if ($lexiconid != "") {
// print "lexiconid: $lexiconid<br />";
$query = "SELECT urlid, count FROM counts WHERE lexiconid = '$lexiconid'
ORDER BY count DESC LIMIT 10";
//
print "query: $query<br />";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
Sida 13
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
$urlid = $row['urlid'];
$count = $row['count'];
$subquery = "SELECT url FROM urls WHERE id = '$urlid'";
$subresult = mysql_query($subquery);
$r = mysql_fetch_row($subresult);
$url = $r[0];
$subquery = "SELECT title FROM titles WHERE urlid = '$urlid'";
$subresult = mysql_query($subquery);
$r = mysql_fetch_row($subresult);
$title = htmlspecialchars(substr($r[0], 0, 64));
$subquery = "SELECT content FROM contents WHERE urlid =
'$urlid'";
$subresult = mysql_query($subquery);
$r = mysql_fetch_row($subresult);
$content = htmlspecialchars(substr($r[0], 0, 256));
if ($title == "") { $title = $url; }
print "<p class='title'><a href='$url'>$title</a></p>
<p class='url'>$url</p>
<p class='content'>$content</p>
<p class='keywordcount'>Score: $count</p>";
}
}
if ($lexiconid == "") {
print "<p>No search results for: $word</p>";
}
}
?>
</div>
<div id='footer'>
<p>This simple search engine is built for the AI course at
Linköping univeristy, by Jakob Bandelin.</p>
</div>
</div>
</body>
</html>
robot.php5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>robot</title>
</head>
<body>
<?php
include("robotsallowed.php");
include("includes/db.inc.php");
$db = db_connect();
function getTitle($s) {
$s = stristr($s, '<title>');
$s = substr($s, 7);
$s = explode("</title>", $s);
$s = htmlspecialchars(substr($s[0], 0, 128));
return $s;
Sida 14
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
}
function acceptableWord($s) {
//remove 25 most common enlish words
$unwanted = array("the", "of", "to", "and", "a", "in", "is", "it",
"you", "that", "he", "was", "for", "on", "are", "with", "as", "I", "his", "they", "be",
"at", "one", "have", "this", " ");
$s = str_ireplace($unwanted, "", $s);
if ($s == "") { return false; }
return true;
}
function getRandomUrlId() {
$query = "SELECT id, url FROM urlstack";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
$rand = rand(0, $rows);
for ($j = 0; $j < $rand; $j++) {
$row = mysql_fetch_row($result);
}
$id = $row[0];
$url = $row[1];
// for debugging - print "random is: $rand, url is: $url";
// if the stack happens to be empty go to delicious else remove it from
the stack and return it
if ($rows == 0) {
$url = "http://del.icio.us";
} else {
$query = "DELETE FROM urlstack WHERE id = '$id'";
$result = mysql_query($query);
}
return $url;
}
function getLinksAndContentFromUrl($url) {
ini_set('user_agent', 'JBAI
(http://www.bandelin.se/ai/robotinfo.html)');
if(robots_allowed($url, "JBAI")) {
$input = @file_get_contents($url);
if ($input == "") { $returnstr = "access denied for: $url";
return $returnstr; }
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER))
{ foreach($matches as $match) {}}
//get links
//add each if not added already
foreach($matches as $match) {
$link = $match[2];
$substr = substr($link, 0, 7);
//print "<h3>analysing: $link</h3>";
if ($substr != "http://") {
//print "skipped";
}
if ($substr == "http://") { // will only take the links
starting with http://
$query = "SELECT * FROM urlstack WHERE url =
'$link'";
Sida 15
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
$result = mysql_query($query);
$rows1 = mysql_num_rows($result);
$query = "SELECT * FROM urls WHERE url = '$link'";
$result = mysql_query($query);
$rows2 = mysql_num_rows($result);
if ($rows1 > 0) {
//print "in stack already.<br />";
}
elseif ($rows2 > 0) {
//print "in index already.<br />";
}
else {
$query = "INSERT INTO urlstack (id, url)
VALUES ('', '$link')";
$result = mysql_query($query);
//print "added to stack!<br />";
}
}
}
}
return $input;
}
function addRandomSite() {
$url = getRandomUrlId();
print "<h3>$url</h3>"; //some feedback is always nice
//process links -> content
$input = getLinksAndContentFromUrl($url);
if ($input != "could not access url") {
//Store the URL
$query = "INSERT INTO urls (id, url) VALUES ('', '$url')";
$result = mysql_query($query);
$query = "SELECT id FROM urls WHERE url = '$url'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$urlid = $row[0];
//Get & Store the title from input
$title = getTitle($input);
if ($title == "") { $title = $url; }
$query = "INSERT INTO titles (urlid, title) VALUES ('$urlid',
'$title')";
$result = mysql_query($query);
print "<h4>Title: $title</h4>";
//Get the words and clean up some
$unwanted = array("<", "+", "-", ":", "[", "]", "_", "", "", "",
"", ">", "/", "'","=", "?","!", "#", "&", "%", "|", ",", ".", ";", "(", ")", "{", "}",
"*", "\"", "\n");
$input = strip_tags($input);
$content = htmlspecialchars(substr(trim($input), 0, 255));
$input = trim(str_replace($unwanted, " ", $input));
$title = trim(str_replace($unwanted, " ", $title));
print "<p>going to explode:<br />INPUT: $input<br />TITLE:
$title<br />";
print "<p>SUMMARY: $content</p>";
//print "<h2>String is now</h2>";
//print "$s";
$exploded = explode(" ", $input); // n first words
$exploded_title = explode(" ", $title);
Sida 16
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
$exploded = array_merge($exploded_title, $exploded);
$query = "INSERT INTO contents (urlid, content) VALUES ('$urlid',
'$content')";
$result = mysql_query($query);
$c = 0; //for giving the first words more value
print "WORDS:";
foreach($exploded as $word) {
$word = trim($word);
if (acceptableWord($word)){
//fix the scores
$c++;
$value = 0;
if ($c > 500) { break; }
if ($c < 500) { $value = 1;}
if ($c < 250) { $value = 2;}
if ($c < 100) { $value = 5;}
//if word is not in lexicon add it
print "$word($value), ";
$query = "SELECT * FROM lexicon WHERE word =
'$word'";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
if ($rows == 0) {
$query = "INSERT INTO lexicon (lexiconid,
word) VALUES ('', '$word')";
$result = mysql_query($query);
}
//get lexicon id
$query = "SELECT lexiconid FROM lexicon WHERE word
= '$word'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$lexiconid = $row[0];
//add count
$query = "SELECT count FROM counts WHERE lexiconid
= '$lexiconid' AND urlid = '$urlid'";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
if ($rows == 0) {
$query = "INSERT INTO counts (count,
urlid, lexiconid) VALUES ('$value', '$urlid',
'$lexiconid')";
$result = mysql_query($query);
}
$query = "SELECT count FROM counts WHERE lexiconid
= '$lexiconid' AND urlid = '$urlid'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$count = $row[0] + $value;
$query = "UPDATE counts SET count = '$count' WHERE
urlid = '$urlid' AND lexiconid = '$lexiconid'";
$result = mysql_query($query);
}
}
} else {
print "Access denied by robots.txt.";
}
}
?>
Sida 17
Jakob Bandelin
Jakob.bandelin@gmail.com
Fördjupningsuppgift
Artificiell intelligens, 729G50
Linköpings universitet, 2007
<?php
for ($k = 0; $k < 50; $k++) { //add 50 sites
print "$k...";
addRandomSite();
} //stop loop
?>
</body>
</html>
Sida 18
Download