ЗАДАЧА - Help, Help, Help
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
ЗАДАЧА - Help, Help, Help - 2005-04-12 11:34:38
|
|
|
Fei
Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
|
Дан естественно-языковый текст (например, первые N страниц романа Толстого "Анна Каренина")
Задача: Программа должна самостоятельно, без дополнительного обучения сгенерировать понятие "слово" и выделить все слова в исходном тексте.
Запрещается: - В явном или неявном виде задавать понятие "слово" (например, предполагать до обработки, что слово - это последовательность символов между пробелами или идти на другие "ухищрения" - программа не должна иметь представления о том, что "пробел" и "запятая" - это служебные символы, один разделяет слова, другой предназначен для пунктуации..) - Иметь в "базе знаний" какие-то частные правила выделения объектов, получать информацию в систему, кроме исходного текста (диалог с оператором, толковый словарь и т.п.).
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-04-12 11:51:32
|
|
|
Lex_Voodoo
Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
|
Интересный вопрос. Я бы стал отталкиваться от частоты встречаемости символов в тексте. Самый повторяющийся символ, с большой вероятностью, разделяет в тексте слова (конечно, если текст не зашифрован). Это необходимо взять за основу для первичной обработки текста.
Итак, слова друг от друга мы отделили. Далее встает проблема отделить слова от знаков препинания. Попробуй отталкиваться от того, что знаки препинания не могут встречаться в середине слова, а только в конце.
Скорее всего, твоя программа будет "пробегать" по тексту, занося каждый символ в БД. Наряду с частотой встречаемости, один из параметров должен показывать, был ли данный символ встречен в середине слова. Если был - присваиваем параметру единичку. После обработки достаточного количества текста символы, оставшиеся "с ноликом" можно причислять к знакам препинания. Само собой, подобный анализ следует проводить только после нахождения символа, отделяющего одно слово от другого.
Удачи!
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-04-13 10:29:57
|
|
|
Fei
Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
|
Спасибо за идею, попробую!!!!!
|
|
|
ЗАДАЧА - 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;quot;Анна Каренина&amp;quot;)<BR><BR>…<BR>- Иметь в &amp;quot;базе знаний&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 ' как отдельную последовательность (после него частота резко падает).
Но это не способ, а лишь намётки… Надо всё сводить к статистическим вероятностям появления последовательностей, и может быть дисперсиям этих появлений.
А вообще, было бы очень полезно разобраться как работают алгоритмы сжатия, точнее на каких принципах (я в этом не рублю не капли поэтому точнее сказать какие именно алгоритмы не могу). Если по тексту попробовать составить словарь содержащий набор последовательностей символов таким образом чтобы весь тект можно записать этими последовательностями, и размер словаря был минимален, то не будет ли этот словарь содержать все слова (слова в человеческом понимании) из текста?
|
|
|
ЗАДАЧА - 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.
Смысл: она показывает сколько раз повторяется один и тот зе символ. Можно попробовать создать первый алфавит (до слорарей рано)
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-04-15 02:47:31
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Блин я же говорю ковыряй алгоритмы сжатия, вот например здесь, мне кажется LZW это почти то что надо, останется только подсчитать в выходном потоке частоты появления разных чисел. а рядом просто то что тебе необходимо знать. да и вообще лезь сюда
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-04-20 04:18:08
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
В общем так. Меня эта тема заинтересовала, я полез копать глубже и мне подсказали посмотреть это. Не знаю поможет тебе это или нет, но всё равно интересно.
|
|
|
ЗАДАЧА - 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]
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-04-28 07:51:14
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Завтра, наверное, отлажу-таки прогу, которая реализует "Linguistic Relations Using Lexical Attraction". Это не совсем то что надо, но я думаю адаптировать методу под эту задачу. Да и вообще меня потянуло на более общую задачу – выяснение грамматики языка путём статистического анализа текста[sm=9.gif].
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-05-04 11:10:32
|
|
|
Fei
Сообщений: 5
Оценки: 0
Присоединился: 2005-04-12 11:25:27
|
Функциональная структура использования СИИ.
Эта структура состоит из трех комплексов вычислительных средств (см. рисунок). Первый комплекс представляет собой совокупность средств, выполняющих программы (исполнительную систему), спроектированных с позиций эффективного решения задач, имеет в ряде случаев проблемную ориентацию. Второй комплекс - совокупность средств интеллектуального интерфейса, имеющих гибкую структуру, которая обеспечивает возможность адаптации в широком спектре интересов конечных пользователей. Третьим комплексом средств, с помощью которых организуется взаимодействие первых двух, является база знаний, обеспечивающая использование вычислительными средствами первых двух комплексов целостной и независимой от обрабатывающих программ системы знаний о проблемной среде. Исполнительная система (ИС) объединяет всю совокупность средств, обеспечивающих выполнение сформированной программы. Интеллектуальный интерфейс - система программных и аппаратных средств, обеспечивающих для конечного пользователя использование компьютера для решения задач, которые возникают в среде его профессиональной деятельности либо без посредников либо с незначительной их помощью. База знаний (БЗ) - занимает центральное положение по отношению к остальным компонентам вычислительной системы в целом, через БЗ осуществляется интеграция средств ВС, участвующих в решении задач.
|
|
|
ЗАДАЧА - 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). Поэтому не выкладываю её пока. Но я успел в неё поверить. Не совсем знаю как её потом заставлять выделять различные типы связей (корень-окончание, или подлежащие-сказуемое) но верю что можно.
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-05-06 23:10:02
|
|
|
ventilyator
Сообщений: 423
Оценки: 0
Присоединился: 2004-10-28 15:46:45
|
2 rgo чем тебе С++ не угодил? офигенная вещь. просто надо почувствовать. я его тоже нелюбил, пока не прочитал 1-е издание Ире Пола "Объектно-ориентированое программирование с использованием С++" с тех пор я ООП оч. уважаю и от меня тов. страуструпу, который развил идею ООП и наметил пути его дальшейшего развертывания, БОЛЬШОЙ РЕСПЕКТ ! имхо С++ мазовее других ООП-языков по той причине, что позволяет организовывать множественные наследования. а ада… я его до этого твоего поста ваще мертвым языком щитал…
а пост ваще полезный… почитал - мну некоторые идеи оч даже прикалоли…
|
|
|
ЗАДАЧА - Help, Help, Help - 2005-05-07 07:20:49
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Ада не мёртвый язык. Я бы сказал оживающий. есть фронт-енд к gcc, для компиляции ада-программ, и ряд никсовых библиотек уже имеет заголовочные файлы ада. ЗЫ эта книга айры пола была первой книгой по программированию которую я себе купил… но через полгода я купил книгу по ассемблеру, а ещё через год перелез в линукс, и начал пользоваться C. Но ада круче C++: поддержка многопоточного программирования заложенная в язык например это рулит. И никакой бэквард совместимости – это ещё круче.
|
|
|
|
|