PDA

View Full Version : PHP/Mysql Help


Automated
03-12-2003, 09:33 AM
HI Guys,

Due to the Amount of help i got with the first stage of this script, i would like some assistance with the second/final stage.

What i have is a DB with over 268,000 entries into it, each one containing a word and it's definition. (AKA the whole English dictionary)

What i am doing is going to create the AIML (Artificial intelligence Mark-up language) so that i can "teach" this knowledge to my artificially intelligent chat bot.

I have written the AIML and need a sort of Mail Merge script that will replace each existence of {word} and {definition} with the appropriate information in the DB.

Here is the AIML i have written, i have given a simple version for the moment;
<category>
<pattern>what does {word} mean?<pattern>
<template>{word} means {definition}</template>
</category>

<category>
<pattern>What is the meaning of {word}<pattern>
<template>{word} means {definition}</template>
</category>

What needs to happen is for the script to do the replace and then export the output to a file (any name) now to prevent time outs maybe it could do 1000 records each time before i refresh the page to do the next.

Once each record has been done and exported it should set a sort of "flag" next to that record in the DB so the same thing isnt exported twice.

I appreciate that this probably isnt a small project so i will see what i can offer you in exchange for your expertise

Thanks.
Matthew

sparky2
03-15-2003, 09:09 PM
You want to export data from ALL the rows in a db table into ONE file, right? <category>
<pattern>what does {word} mean?<pattern>
<template>{word} means {definition}</template>
</category>

<category>
<pattern>What is the meaning of {word}<pattern>
<template>{word} means {definition}</template>
</category>
If that's the case, and you are comfortable executing queries from the MySQL commandline (or you have mysqladmin installed) you can just run a query to achieve the export -- you won't even need to wrap it in a PHP script.

You'll use a MySQL query like this:
SELECT... INTO OUTFILE '/path/from/root/filename.ext'
SELECT
'<category>\n<pattern>What is the meaning of ',
field1,
'<pattern>\n<template>',
field1,' means ',field2,'</template>\n</category>\n\n'
INTO OUTFILE '/path/from/root/filename.AIML'

I marked up verbatim what you posted.
Does a "forward slash" belong in the second <pattern> tag ???

Since it's just a query & doesn't have to echo anything to a browser, it'll run extremely fast. No need to chop it into multiple passes; the query will probably only take about 30-40 seconds to complete 286,000 rows. At that point, you'll just go retrieve the output file from whatever directory you told MySQL to write it to.

Prior to running the "full version" you might want to test the output & verify that the data will be in the "desired format".
Here's an example query to use in order to check:SELECT
'<category>\n<pattern>What is the meaning of ',
field1,
'<pattern>\n<template>',
field1,' means ',field2,'</template>\n</category>\n\n'
LIMIT 2;this will just echo 2 rows worth of output to your commandline ---------^

This assumes you're on a unix server.
If you're running on a Windows server, you'll need to use \r\n for the linebreak character.

Hmm...
I just checked the "formatting" using this query against our vbb.thread table:select '<hello>',trim(threadid),'</hello>\r',trim(title),' </JUSTanENDtag>\r\r'
from post limit 5 INTO outfile '/backup/helo.txt';...and the trim() isn't helping.
So, your output file may need to be tweaked in a text editor using search/replace before you use it as an AIML file.

You might want to search/replace multiple spaces with a single space, and search/replace to remove the tailend space between the "word" and the closing "pattern" tag.