Vyacheslav Tikhonov

Рейтинг
130
Регистрация
27.01.2001
Должность
Developer
Интересы
search engines, bots, information retrieval, data mining
Master's Degree in Computer Science

<font face="Verdana" size="2">Originally posted by Keva:
Знаешь, ты, похоже, что-то перепутал :-) "лес" и "лесби" - это не мой любимый запрос :-) </font>

Я имел в виду только "лес" - полгода назад серьезно за него получил по рукам Стемминг у меня тогда дал баг и давал шаблончик вроде "лес\w+", по которому я и пролетел По тому, как профессионально меня потом в форуме распекли и какой был ник, я и подумал... в общем, сорри, значит ошибся.

<font face="Verdana" size="2">
Кстати, в морфологии для использования в поисковых системах имеет смысл решить и еще один вопрос - вопрос альтернативного начертания. Например, обсуждаемое слово имеет альтернативное начертание "скотоложество", которое было бы неплохо тоже находить по моему нынешнему любимому запросу :-)
</font>

Для этого нужен хороший большой словарь. А пока нету

<font face="Verdana" size="2">
А в Рамблере мы уже довольно используем для нераспознанных морфологическим анализатором слов "нечеткую", т. е. вероятностную морфологию, но поиск не находит "лес" по запросу "лесби" :-)))
</font>

Тут нужно хотя бы попытаться нормальную четкую морфологию родить

<font face="Verdana" size="2">Originally posted by baranov:
Здорово все....
А есть ли менее комерческие реализации?
или более простые решения - по типу того, что я говорил - отбрасывать окончания и возможно суффикс за компанию....
</font>

Это стемминг называется. Прямо скажем, решение не совсем удачное, но когда вообще ничего нет и в прикладной лингвистике не разбираешься, на первое время сойдет. Хотя тогда начинают возникать интересные казусы. Например, по запросу 'лес' начинает находиться 'лесби' и т.д. (вон Keva хорошо знает, это его любимый запрос )

А вообще собрать морфологию просто так, на ровном месте, очень трудно, даже если ты семи пядей во лбу - там одних только морфологических таблиц должно быть не менее 700 и взять их можно только у лингвистов или пытаться как-то синтезировать из подручных средств.

Хотя мне, в принципе, уже удалось создать довольно работоспособный

морфологический анализатор для существительных и прилагательных, который, правда, учитывает пока не все аспекты русского языка.

В общем, морфология - это куча хлопот и времени, так что если ее предлагают почти бесплатно, берите

<font face="Verdana" size="2">Originally posted by baranov:
Здорово все....
А есть ли менее комерческие реализации?
или более простые решения - по типу того, что я говорил - отбрасывать окончания и возможно суффикс за компанию....
</font>

Это стемминг называется. Прямо скажем, решение не совсем удачное, но когда вообще ничего нет и в прикладной лингвистике не разбираешься, на первое время сойдет. Хотя тогда начинают возникать интересные казусы. Например, по запросу 'лес' начинает находиться 'лесби' и т.д. (вон Keva хорошо знает, это его любимый запрос )

А вообще собрать морфологию просто так, на ровном месте, очень трудно, даже если ты семи пядей во лбу - там одних только морфологических таблиц должно быть не менее 700 и взять их можно только у лингвистов или пытаться как-то синтезировать из подручных средств.

Хотя мне, в принципе, уже удалось создать довольно работоспособный

морфологический анализатор для существительных и прилагательных, который, правда, учитывает пока не все аспекты русского языка.

В общем, морфология - это куча хлопот и времени, так что если ее предлагают почти бесплатно, берите

<font face="Verdana" size="2">Originally posted by baranov:
А на сколько почти? Я что-то не знаком с ним - чайник все-таки.

Есть ли дока, или кому-нибудь не лень сюда будет реализацию на С вставить.
</font>

Ссылки по теме:

http://www.zdnet.ru/pcmag/9612/129611.asp

Здесь реализация CRC32 (взята с http://klariosha.narod.ru/PN/DOC/doc-i02.htm):

u_long crc32_table[256];
/* Initialized first time "crc32()" is called. If you prefer, you can
* statically initialize it at compile time. [Another exercise.]
*/
u_long crc32(u_char *buf, int len)
{
u_char *p;
u_long crc;
if (!crc32_table[1]) /* if not already done, */
init_crc32(); /* build table */
crc = 0xffffffff; /* preload shift register, per CRC-32 spec */
for (p = buf; len &gt; 0; ++p, --len)
crc = (crc &lt;&lt; 8) ^ crc32_table[(crc &gt;&gt; 24) ^ *p];
return ~crc; /* transmit complement, per CRC-32 spec */
}
/*
* Build auxiliary table for parallel byte-at-a-time CRC-32.
*/
#define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */
init_crc32()
{
int i, j;
u_long c;
for (i = 0; i &lt; 256; ++i) {
for (c = i &lt;&lt; 24, j = 8; j &gt; 0; --j)
c = c & 0x80000000 ? (c &lt;&lt; 1) ^ CRC32_POLY : (c &lt;&lt; 1);
crc32_table = c;
}
}


[This message has been edited by Vyacheslav Tikhonov (edited 02-10-2001).]

[This message has been edited by Vyacheslav Tikhonov (edited 02-10-2001).]

<font face="Verdana" size="2">Originally posted by baranov:
А на сколько почти? Я что-то не знаком с ним - чайник все-таки.

Есть ли дока, или кому-нибудь не лень сюда будет реализацию на С вставить.
</font>

Ссылки по теме:

http://www.zdnet.ru/pcmag/9612/129611.asp

Здесь реализация CRC32 (взята с http://klariosha.narod.ru/PN/DOC/doc-i02.htm):

u_long crc32_table[256];
/* Initialized first time "crc32()" is called. If you prefer, you can
* statically initialize it at compile time. [Another exercise.]
*/
u_long crc32(u_char *buf, int len)
{
u_char *p;
u_long crc;
if (!crc32_table[1]) /* if not already done, */
init_crc32(); /* build table */
crc = 0xffffffff; /* preload shift register, per CRC-32 spec */
for (p = buf; len &gt; 0; ++p, --len)
crc = (crc &lt;&lt; 8) ^ crc32_table[(crc &gt;&gt; 24) ^ *p];
return ~crc; /* transmit complement, per CRC-32 spec */
}
/*
* Build auxiliary table for parallel byte-at-a-time CRC-32.
*/
#define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */
init_crc32()
{
int i, j;
u_long c;
for (i = 0; i &lt; 256; ++i) {
for (c = i &lt;&lt; 24, j = 8; j &gt; 0; --j)
c = c & 0x80000000 ? (c &lt;&lt; 1) ^ CRC32_POLY : (c &lt;&lt; 1);
crc32_table = c;
}
}


[This message has been edited by Vyacheslav Tikhonov (edited 02-10-2001).]

[This message has been edited by Vyacheslav Tikhonov (edited 02-10-2001).]

<font face="Verdana" size="2">Originally posted by baranov:
А на сколько почти? Я что-то не знаком с ним - чайник все-таки.

Есть ли дока, или кому-нибудь не лень сюда будет реализацию на С вставить.
</font>

Насчет 'почти' - для циклической суммы нереально. Я здесь привел термин 'почти' для того, чтобы показать, что у каждого слова должен быть свой уникальный код, иначе возникают коллизии. Реально же уникальный код получить сложно и больше для этого подойдет какая-нибудь хэш-функция типа MD5. Или придется разрешать коллизии.

<font face="Verdana" size="2">Originally posted by baranov:
А на сколько почти? Я что-то не знаком с ним - чайник все-таки.

Есть ли дока, или кому-нибудь не лень сюда будет реализацию на С вставить.
</font>

Насчет 'почти' - для циклической суммы нереально. Я здесь привел термин 'почти' для того, чтобы показать, что у каждого слова должен быть свой уникальный код, иначе возникают коллизии. Реально же уникальный код получить сложно и больше для этого подойдет какая-нибудь хэш-функция типа MD5. Или придется разрешать коллизии.

<font face="Verdana" size="2">Originally posted by Cherny:
=() Это как же - или один .ua или три .com?!</font>

Это в лучшем случае, если уже есть торговая марка. Если нет, то еще +100$

Материал по теме:

http://uatoday.net/kernel/tech/news-6137.html

<font face="Verdana" size="2">Originally posted by baranov:
А что это за CRC32?</font>

Циклический код - используется для нахождения контрольной суммы. В данной версии поисковика по слову определяется его почти(!) уникальный числовой код и заносится в базу. Поиск потом идет не по самому слову, а по его коду, что проще.

Широко используется в основном в криптографии наряду с другими подобными хэш-функциями. В поисковых системах я встречал его в HTDig, если не ошибаюсь.

[This message has been edited by Vyacheslav Tikhonov (edited 02-10-2001).]

<font face="Verdana" size="2">Originally posted by baranov:
А что это за CRC32?</font>

Циклический код - используется для нахождения контрольной суммы. В данной версии поисковика по слову определяется его почти(!) уникальный числовой код и заносится в базу. Поиск потом идет не по самому слову, а по его коду, что проще.

Широко используется в основном в криптографии наряду с другими подобными хэш-функциями. В поисковых системах я встречал его в HTDig, если не ошибаюсь.

[This message has been edited by Vyacheslav Tikhonov (edited 02-10-2001).]

Всего: 847