Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

ЗАДАЧА - Help, Help, Help

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> ЗАДАЧА - Help, Help, Help
Имя
Сообщение << Старые топики   Новые топики >>
ЗАДАЧА - Help, Help, Help - 2005-04-12 11:34:38   
Fei

Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
Дан естественно-языковый текст (например, первые N страниц романа Толстого "Анна Каренина")

Задача: Программа должна самостоятельно, без дополнительного обучения сгенерировать понятие "слово" и выделить все слова в исходном тексте.

Запрещается:
- В явном или неявном виде задавать понятие "слово" (например, предполагать до обработки, что слово - это последовательность символов между пробелами или идти на другие "ухищрения" - программа не должна иметь представления о том, что "пробел" и "запятая" - это служебные символы, один разделяет слова, другой предназначен для пунктуации..)
- Иметь в "базе знаний" какие-то частные правила выделения объектов, получать информацию в систему, кроме исходного текста (диалог с оператором, толковый словарь и т.п.).
Post #: 1
ЗАДАЧА - Help, Help, Help - 2005-04-12 11:51:32   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
Интересный вопрос.
Я бы стал отталкиваться от частоты встречаемости символов в тексте. Самый повторяющийся символ, с большой вероятностью, разделяет в тексте слова (конечно, если текст не зашифрован). Это необходимо взять за основу для первичной обработки текста.

Итак, слова друг от друга мы отделили. Далее встает проблема отделить слова от знаков препинания. Попробуй отталкиваться от того, что знаки препинания не могут встречаться в середине слова, а только в конце.

Скорее всего, твоя программа будет "пробегать" по тексту, занося каждый символ в БД. Наряду с частотой встречаемости, один из параметров должен показывать, был ли данный символ встречен в середине слова. Если был - присваиваем параметру единичку. После обработки достаточного количества текста символы, оставшиеся "с ноликом" можно причислять к знакам препинания. Само собой, подобный анализ следует проводить только после нахождения символа, отделяющего одно слово от другого.

Удачи!
Post #: 2
ЗАДАЧА - Help, Help, Help - 2005-04-13 10:29:57   
Fei

Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
Спасибо за идею, попробую!!!!!
Post #: 3
ЗАДАЧА - Help, Help, Help - 2005-04-14 02:07:37   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
[p]
quote:

—————-<BR>Цитата: Дата:12.04.2005 11:34:38, Автор: Fei ::
Дан естественно-языковый текст (например, первые N страниц романа Толстого &amp;amp;quot;Анна Каренина&amp;amp;quot;)<BR><BR>…<BR>- Иметь в &amp;amp;quot;базе знаний&amp;amp;quot; какие-то частные правила выделения объектов, получать информацию в систему, кроме исходного текста (диалог с оператором, толковый словарь и т.п.). <BR><BR>
—————-


Что есть частные правила выделения объектов?

Я тут попробовал сделать вот что, написал прогу которая подсчитывает количество появлений всех возможных последовательностей символов с длиной от 1 до 10 символов. Прогнал через неё "Тома Сойера" (правда на английском, но зато 406502b) и получил файлик со строками следующего формата:
_<строка>____<число>_
где строка это некоторая последовательность символов из текста, а число — статистическая вероятность появления такой последовательности в тексте такой строки.
Вот начало этого файла:
_ ___0.202348_
_e___0.087808_
_t___0.066755_
_a___0.057028_
_o___0.056935_
_n___0.049264_
_h___0.046241_
_i___0.042996_
_s___0.042290_
_ ___0.040669_
_r___0.037559_
_d___0.036172_
_l___0.029855_
_e ___0.025100_
_ t___0.023407_
_u___0.022229_
_he___0.021493_
_th___0.020197_
_d ___0.019783_
_ a___0.018620_

Потом я сказал:

$ grep "he" words.dat

Я выбрал "he", потому-что это первая последовательность символов длины больше 1, непосредственный подсчёт вероятности которой дал большее значение, чем расчет на основе вероятностей появления 1-символьных:

_he___0.021493_
_the___0.012571_
_he ___0.011183_
_ the___0.010748_
_the ___0.007424_
_ the ___0.006935_
_ he___0.003877_
_her___0.003279_
_ the___0.002192_
_he ___0.002180_


Если теперь попробовать
$ grep "the" words.dat
то получится

_the___0.012571_
_ the___0.010748_
_the ___0.007424_
_ the ___0.006935_
_ the___0.002192_
_ther___0.001542_
_ the ___0.001481_
_the ___0.001360_
_n the___0.001338_
_d the___0.001326_


Напрашивается выделить ` the ' как отдельную последовательность (после него частота резко падает).

Но это не способ, а лишь намётки… Надо всё сводить к статистическим вероятностям появления последовательностей, и может быть дисперсиям этих появлений.

А вообще, было бы очень полезно разобраться как работают алгоритмы сжатия, точнее на каких принципах (я в этом не рублю не капли поэтому точнее сказать какие именно алгоритмы не могу). Если по тексту попробовать составить словарь содержащий набор последовательностей символов таким образом чтобы весь тект можно записать этими последовательностями, и размер словаря был минимален, то не будет ли этот словарь содержать все слова (слова в человеческом понимании) из текста?
Post #: 4
ЗАДАЧА - Help, Help, Help - 2005-04-14 14:15:08   
Fei

Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
2 rgo
Вот код программы
program count;
var a, b, c: array[0..255] of integer;
f: text; i: char;
m: word; j, k,l: byte;
begin
assign(f,'input.txt');
reset(f);
while not eof(f) do
begin
read(f,i);
inc(a[ord(i)]);
end;
close(f);
l:=0;
for k:=0 to 255 do begin
m:=0;
for j:=1 to 255 do if a[m]<a[j] then m:=j;
if a[m]>-1 then
begin
b[l]:=m;
c[l]:=a[m];
inc(l);
a[m]:=-1;
end;
end;
assign(f,'output.txt');
rewrite(f);
for j:=0 to 255 do if c[j]>0 then
writeln(f,chr(b[j]),chr(9),{b[j],chr(9),}c[j]) else break;
close(f);
end.

Смысл: она показывает сколько раз повторяется один и тот зе символ.
Можно попробовать создать первый алфавит (до слорарей рано)
Post #: 5
ЗАДАЧА - Help, Help, Help - 2005-04-15 02:47:31   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Блин я же говорю ковыряй алгоритмы сжатия, вот например здесь, мне кажется LZW это почти то что надо, останется только подсчитать в выходном потоке частоты появления разных чисел. а рядом просто то что тебе необходимо знать. да и вообще лезь сюда
Post #: 6
ЗАДАЧА - Help, Help, Help - 2005-04-16 04:00:40   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
прикольно да?
там ещё есть
кусок книги по теме
Post #: 7
ЗАДАЧА - Help, Help, Help - 2005-04-20 04:18:08   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
В общем так. Меня эта тема заинтересовала, я полез копать глубже и мне подсказали посмотреть это. Не знаю поможет тебе это или нет, но всё равно интересно.
Post #: 8
ЗАДАЧА - Help, Help, Help - 2005-04-27 09:38:22   
Fei

Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
Слыш, а чё по пиколу!!!!!!!!
http://khpi-iip.mipk.kharkiv.edu/library/ai/index.html
PS. н работает но медленно[sm=mad.gif]
Post #: 9
ЗАДАЧА - Help, Help, Help - 2005-04-28 07:51:14   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Завтра, наверное, отлажу-таки прогу, которая реализует &quot;Linguistic Relations Using Lexical Attraction&quot;. Это не совсем то что надо, но я думаю адаптировать методу под эту задачу. Да и вообще меня потянуло на более общую задачу – выяснение грамматики языка путём статистического анализа текста[sm=9.gif].
Post #: 10
ЗАДАЧА - Help, Help, Help - 2005-05-04 11:10:32   
Fei

Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
Функциональная структура использования СИИ.



Эта структура состоит из трех комплексов вычислительных средств (см. рисунок). Первый комплекс представляет собой совокупность средств, выполняющих программы (исполнительную систему), спроектированных с позиций эффективного решения задач, имеет в ряде случаев проблемную ориентацию. Второй комплекс - совокупность средств интеллектуального интерфейса, имеющих гибкую структуру, которая обеспечивает возможность адаптации в широком спектре интересов конечных пользователей. Третьим комплексом средств, с помощью которых организуется взаимодействие первых двух, является база знаний, обеспечивающая использование вычислительными средствами первых двух комплексов целостной и независимой от обрабатывающих программ системы знаний о проблемной среде. Исполнительная система (ИС) объединяет всю совокупность средств, обеспечивающих выполнение сформированной программы. Интеллектуальный интерфейс - система программных и аппаратных средств, обеспечивающих для конечного пользователя использование компьютера для решения задач, которые возникают в среде его профессиональной деятельности либо без посредников либо с незначительной их помощью. База знаний (БЗ) - занимает центральное положение по отношению к остальным компонентам вычислительной системы в целом, через БЗ осуществляется интеграция средств ВС, участвующих в решении задач.
Post #: 11
ЗАДАЧА - Help, Help, Help - 2005-05-05 06:09:51   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Ага. Меня тоже начинает впирать ИИ. Вот сижу изучаю Ada, ибо хоца ООП-язык, C++ я не переношу, а жаба тормознутая. И как всегда склоняюсь к мысли что ничего лучше C ещё не придумали[sm=9.gif].

Я немного отвлёкся от задачи (на работе пистонов навставляли), и всё никак не могу заставить программу без SIGSEGV, обработать мегов 10 текста (но предложений 10 первых идут на ура, и SIGSEGV вылезает в районе 10K). Поэтому не выкладываю её пока. Но я успел в неё поверить. Не совсем знаю как её потом заставлять выделять различные типы связей (корень-окончание, или подлежащие-сказуемое) но верю что можно.
Post #: 12
ЗАДАЧА - Help, Help, Help - 2005-05-06 23:10:02   
ventilyator

Сообщений: 423
Оценки: 0
Присоединился: 2004-10-28 15:46:45
2 rgo
чем тебе С++ не угодил? офигенная вещь. просто надо почувствовать. я его тоже нелюбил, пока не прочитал 1-е издание Ире Пола "Объектно-ориентированое программирование с использованием С++"
с тех пор я ООП оч. уважаю и от меня тов. страуструпу, который развил идею ООП и наметил пути его дальшейшего развертывания, БОЛЬШОЙ РЕСПЕКТ !
имхо С++ мазовее других ООП-языков по той причине, что позволяет организовывать множественные наследования.
а ада… я его до этого твоего поста ваще мертвым языком щитал…

а пост ваще полезный… почитал - мну некоторые идеи оч даже прикалоли…
Post #: 13
ЗАДАЧА - Help, Help, Help - 2005-05-07 07:20:49   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Ада не мёртвый язык. Я бы сказал оживающий. есть фронт-енд к gcc, для компиляции ада-программ, и ряд никсовых библиотек уже имеет заголовочные файлы ада.
ЗЫ эта книга айры пола была первой книгой по программированию которую я себе купил… но через полгода я купил книгу по ассемблеру, а ещё через год перелез в линукс, и начал пользоваться C. Но ада круче C++: поддержка многопоточного программирования заложенная в язык например это рулит. И никакой бэквард совместимости – это ещё круче.
Post #: 14
Страниц:  [1]
Все форумы >> [Веб-программинг] >> ЗАДАЧА - Help, Help, Help







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.