Крок один: Редукція "сторонніх" слів з blob "а

Перша проблема полягає в тому, що дані переповнені сторонніми
словами (приводами, вигуками ..), такими як "як, де, а, і". Ці слова
допомагають нам, людям, спілкуватися, але не мають нічого спільного з нашою проблемою, коли
потрібно отримати висновок за релевантністю.

Нижче, в кінці статті, я доклав мій особистий список таких, "сторонніх",
слів.

Отже, ми зараз намагаємося зробити – вибрати з даних ці слава, і, – в ново
створеної табличці з двома полями: словом і його покажчиком (лічильником). Нам
необхідно щось на зразок такого:

+—–+—————+
| qid | word |
+—–+—————+
| 6 | links |
| 5 | Fire |
| 5 | topics |
| 5 | related |
| 5 | Shakespeare |
| 4 | people |
| 4 | Knowpost |
| 3 | cuba |
| 3 | cigar |
+—–+—————+

Так, давайте створимо власне табличку:

CREATE TABLE search_table(
word VARCHAR(50),
qid INT)

Наступним кроком буде – обробити і перемістити дані в нашу таблицю
search_table.

<?php
$query = "SELECT blob,identifier FROM your_table";
$result = mysql_query($query);
$number = mysql_numrows($result);
$j = 0;
WHILE ($j < $number) {

/ * Наш "blob" * /
$body = mysql_result($result,$j,"blob");

/ * Наш "identifier * /
$qid = mysql_result($result,$j,"qid");

/ * Відкрити файл зі сторонніми словами в масив * /

$noise_words = file("noisewords.txt");
$filtered = $body;

/ * Розміщуємо пробіл перед першим словом * /
$ Filtered = ereg_replace ("^"," ", $ filtered);

/ * Тепер ми позбулися від непотрібних слів і
можемо помістити те, що залишилося – у масив
*/

/ * Пробігаємо циклом і видаляємо неправильні слова * /
for ($i=0; $i < count($noise_words); $i++) {
$filterword = trim($noise_words[$i]);
$filtered =
eregi_replace ("$ filterword", "", $ filtered);
}

$filtered = trim($filtered);
$filtered = addslashes($filtered);
$ Querywords = ereg_replace (",","",$ filtered);
$ Querywords = ereg_replace ("",",",$ querywords);
$ Querywords = ereg_replace ("?","",$ querywords);
$ Querywords = ereg_replace ("(","",$ querywords);
$ Querywords = ereg_replace (")","",$ querywords);
$ Querywords = ereg_replace (".","",$ querywords);
$ Querywords = ereg_replace (",","","",$ querywords);
$ Querywords = ereg_replace ("^",""",$ querywords);
$ Querywords = ereg_replace ("$",""",$ querywords);

/ * Тепер ми повинні мати щось типу
“Word1″,”Word2″,”Word3”
так що тепер ми можемо загнати все в масив
*/
$eachword = explode(",", $querywords);

/ * Нарешті ми можемо пробігтися по
масиву і помістити кожне слово в базу даних,
разом з лічильником
*/

for ($k=0; $k < count($eachword); $k++) {
$inputword = "INSERT INTO search_table
VALUES($eachword[$k],$qid)";
mysql_query($inputword);
}

/ * Пробігтися по циклу ще разок з новими даними * /
$j++;
}

?>


Цей скрипт обробляє ваші старі дані. Необхідно додати подібну ж
обробку на додавання даних у вашу базу даних (коли її вводить користувач,
господар – чи хто завгодно) – так, щоб база була оновлена в процесі.

Крок два: Пошук в таблиці


Тепер ми маємо таблицю з ключовими словами і лічильниками. Як зібрати запит?

По-перше, необхідно переформатувати (ні, не жорсткий диск) – слова пошуку
в рядок виду "word1", "word2", "word3" і записати її в $ querywords.

Далі використовувати подібний нижче наступного запит:

SELECT count (search_table.word) as score, search_table.qid, your_table.blob
FROM search_table,your_table
WHERE your_table.qid = search_table.qid AND search_table.word
IN($querywords)
GROUP BY search_table.qid
ORDER BY score DESC";

Висновок же може бути, наприклад, таким:

<?php 

$getresults = mysql_query($search);
$resultsnumber = mysql_numrows($getresults);

IF ($resultsnumber == 0) {

PRINT "Нічого не знайдено."
. "Спробуйте використовувати інші ключові слова.";

} ELSEIF ($resultsnumber > 0) {

PRINT "Пошук повернув $ resultsnumber результатів <BR>"
. "Розташування за релевантністю <BR> <BR>";
for($count = 0; $count < $resultsnumber; $count++) {
$body = mysql_result($getresults,$count,"blob");
$qid = mysql_result($getresults,$count,"qid");

$body2print = substr($body, 0, 100);
$cnote = $count+1;
PRINT "$ cnote. <a Href=yourcontent.php3?qid=$qid>"
. "<i> $ Body2print …</ i> </ a> <BR>";
}
}

?>


Отже, у вас є механізм пошуку за ключовими словами у вашій базі даних по
релевантності (актуальності запитом).

Звичайно, це не Yandex і не Google :-))).

Але у нас тепер є невеликий пошуковий механізм, який цілком швидко і
грамотно працює і цілком підходить звичайному користувачеві (який не збирається
використовувати логічні елементи і т.п.).

Ось лист моїх "сторонніх" слів:

noisewords.txt
————–
a
about
after
ago
all
almost
along
also
am
an
and
answer
any
anybody
anywhere
are
aren”t
around
as
ask
at
bad
be
been
before
being
best
better
between
big
but
by
can
can”t
come
could
couldn”t
day
did
didn”t
do
does
don”t
down
each
either
else
even
ever
every
everybody
everyone
far
find
for
found
from
get
go
going
gone
good
got
had
has
have
haven”t
having
her
here
hers
him
his
home
how
href
I
if
in
into
is
isn”t
it
its
know
large
less
like
little
looking
look
many
me
more
most
must
my
near
never
new
news
no
none
not
nothing
of
off
often
old
on
once
only
or
other
our
ours
out
over
page
please
question
rather
recent
she
should
sites
small
so
some
something
sometime
somewhere
than
true
thank
that
the
their
theirs
them
then
there
these
they
this
those
though
through
thus
time
times
to
too
under
until
untrue
up
upon
use
users
version
very
via
want
was
way
web
were
what
when
where
which
who
whom
whose
why
wide
will
with
within
without
world
worse
worst
would
www
yes
yet
you
your
yours

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*