Re: Тема работы. | |
---|---|
JS Сообщений: 12264 Откуда: Эстония Дата регистрации: 04.09.2000 |
Можно так: алгоритм разбора на лету
В фоксе есть "волшебные" функции - GetWordCount, GetWordNum. Пересылаем файл в строку FileToStr Сначала запятые переводятся в пробелы, затем уничтожаются лишние пробелы, затем предлоги, затем спецсиволы, получаем текст с массой ненужных слов: "порядок, порядке, порядка, порядку, порядочный" и так далее далее парсим строку, число слов в строке (содержащей содержимое файла) получаем через GetWordCount, далее по индексу в GetWordNum заносим во временную таблицу все слова в тексте. Делаем select всего в другую временную таблицу, в которую добавляем поля pwfreq,- частоту использования слова в файле, и логическое modified, для котроля записанного слова. Далее сканируем курсор с пословной выборкой и проверкой условия modified. Сначала проверяем наличие слова в уже имеющемся словаре, если есть, удаляем записи в первичной временной таблице, предварительно сделав select по слову. _Tally даст частоту слова в файле если нет, заносим в словарь, и удаляем слово из первичной таблцицы, опять-таки предварительно сделав select по слову. _Tally даст частоту слова в файле Удаляем из контрольной таблицы проверенное слово и добавляем в нее новую запись, в которую вносим проверенное слово, modified как .T. и в pwfreq - значение _Tally и так далее В результате имеем таблицу с частотным содержанием, имя которой можно внести в какую-то другую справочную таблицу увязав ее с именем файла. Как не плодить такие таблицы - решайте сами. ------------------ Knowledge is better than ignorance! Website: juri.foxhelp.eu |
Re: Тема работы. | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Ух ты! Попробую обдумать этот алгоритм.
Спасибо большое! |
Re: Тема работы. | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Не помню упоминалась ли в постах версия VFP и предвидя вопросы по поводу отсутствия GetWordCount, GetWordNum в версиях меньше седьмой, разъяснение, до VFP7 аналоги этих функций находились в Foxtools.fll и назывались WordCount и WordNum, а вот с какой версии они появились в FLL точно не скажу, но в шестой уже были.
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Тема работы. | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
У меня восьмерка стоит (хотя вот нашел русский хэлп и там этих функций нет
vfp.narod.ru ------------------ |
Re: Тема работы. | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Русский Help может быть не полным, а чтобы убедиться набей пару строчек:
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Тема работы. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, rusl!
Русского хелпа к VFP8 не существует - скорее всего ты нашёл хелп к 3-й версии В VFP8 это штатные функции. P.S. Существенной частью решения твоей задачи IMHO должен быть синтаксический анализатор - чтобы всякие падежи/числа/склонения/спряжения не раздували "словарь" до неимоверных размеров. А если ещё и вспомнить про возможные опечатки, омонимы/омографы и иже с ними... ------------------ WBR, Igor |
Re: Тема работы. | |
---|---|
rusl Автор Сообщений: 200 Откуда: СПб Дата регистрации: 01.02.2005 |
Цитата: Да, это так. Но работу для меня облегчает тот факт, что анализировать я буду только англоязычные сайты (хотя времена там тоже никто не отменял). Но к этой части я еще не приступил. Для начала хочу сделать таблицы с частотами. |
Re: Тема работы. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, rusl!
Цитата:Да, существенно облегчает. Цитата:Ну там словоформы не так разнообразны (неправильных глаголов немного, правильные все строго формализовано изменяются, с существительными тоже гораздо проще...) Цитата:Да, для английского наверняка проще синтаксический анализ "на потом" отнести - там не 10-15 форм одного и того-же слова будет А структура явно проглядывает простейшая: Слово (СловоID I, Слово C(20)) Сайт (СайтID I, БазовыйURL M, Название M) ЧастотаСлов (СловоID I, СайтID I, Частота B) Все страницы одного сайта сворачиваются в одно целое (т.е. нету смысла считать частоты по отдельным страницам IMHO). Разбор одной страницы на слова можно сделать массой способов, от итеративного по GetWordNum()/GetWordCount() до массиво-ориентированного через ALINES() - в VFP8 можно указать любые разделители - в т.ч. и пробелы (к сожалению размер массива в VFP8 ограничен 65000 элементов - так что если сильно много слов, то надо по частям "разбирать" одну страницу)... За "частоту" на первом этапе можно взять просто число нахождений слова (т.е. банально их суммировать) - и лишь потом можно по всей таблице частот посчитать сумму, и перейти от абсолютных значений к относительным (а можно и не переходить - ибо как я понимаю важно не само значение частоты, а относительное распределение слов - от наиболее часто употребимых к наименее) P.S. Пара простых "упрощений" - можно предварительно обрабатывать текст статьи на предмет удаления не только пунктуации, но и "нейтральных" слов (для которых можно завести отдельную таблицу) - т.е. слов который никак не определяют тематику текста - предлоги, частицы, артикли, местоимения и т.п. Обычно таких слов очень много в текстах, и можно существенно облегчить последующий анализ, если их сразу выкинуть. Можно сразу избавиться от регистра слов - например UPPER() всему тексту сделать... ------------------ WBR, Igor |
© 2000-2024 Fox Club  |