Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15

Работа с текстом и диаграммами

06.07.2011, 13:24. Показов 4040. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Стоит задача написания алгоритма и выбор среды его реализации.
Хочется услышать любые советы и комментарии - каким инструментом воспользоваться, может кто-то знает примеры подобных алгоритмов и т.п. (сама - не нашла). Время ограничено, а потратить его и узнать, что колесо давно изобрели, будет обидно.

Итак.

Постановка задачи.
  • Есть диаграмма (организационная или блок-схема... - со словесным содержимым элементов), построенная по тексту вручную. Т.е. части текста разнесены по тем или иным элементам диаграммы;
  • Текст подвергается редактированию - удалению/добавлению некоторых фрагментов, или даже добавлению.

Цель. Диаграмма должна автоматически "изменяться за текстом". Если не полностью, то хотя бы должны отмечаться элементы диаграммы к удалению/добавлению.
Абстрагируемся, и предположим, что начальная постановка задачи не накладывает ограничение на используемое ПО, среды, методы...

Работа, затрагивающая выявление изменений в тексте, в данном случае, по моему мнению, сводится к применению аппарата строкового анализа. А вот к чему сводится добрая половина работы, касающаяся диаграмм?

Вопросы. Какими средствами можно с меньшими усилиями реализовать данную задачу (а еще у'же - организовать "связь между диаграммой и текстом, по которому она построена"? Стоит ли использовать офисное программирование? Например, выполнять диаграмму в MS Visio (MS Word-таки убогий в этом плане) или OO.o и дописывать функционал в VBA/StarBasic?
Или, может, имеет смысл решат задачу отдельно в "полноценной" среде программирования? - Но как тогда распознавать отдельные части диаграммы во входном файле для дальнейшей манипуляции с ними? Или, может, организовать подгрузку того же Visio/OO.o средствами среды... Есть или нет такая возможность?

Нужны рекомендации. Я в начале "пути" и не знаю, с какой стороны взяться за решение.

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.07.2011, 13:24
Ответы с готовыми решениями:

Работа с диаграммами
Необходимо большой массив числовых значений представить в виде диаграммы (графика). Затем необходимо работать с этой диаграммой: ...

Chart, работа с диаграммами в Delphi
Есть проблема с созданием диаграммы через Chart. Смотрел на различных сайтах, но толком ничего не понял вот код(versob и verotk это...

Работа с диаграммами - обновление вместо добавления
Добрый день, у меня возник вопрос при работе с диаграммами на vba, если кто может помочь-буду благодарен. создал небольшую диаграммку,как...

16
 Аватар для videolord
49 / 15 / 2
Регистрация: 20.02.2011
Сообщений: 152
06.07.2011, 18:22
не знаю какую диаграмму можно построить по тексту,
но предлагаю след алгоритм расстояние Левенштейна (динамическое программирование)
Дана текстовая строка. С ней можно выполнять следующие операции:
1. Заменить один символ строки на другой символ.
2. Удалить один произвольный символ.
3. Вставить произвольный символ в произвольное место строки.
Например, при помощи первой операции из строки "СОК" можно получить строку "СУК", при помощи второй операции - строку "ОК", при помощи третьей операции - строку "СТОК.

Минимальное количество таких операций, при помощи которых можно из одной строки получить другую, называется стоимостью редактирования или расстоянием Левенштейна.

например для 2 строк ABCDEFGH , ACDEXGIH расст Левенш будет 3

код на java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.Scanner;
 
 
public class editDistance {
 
      private static int minimum(int a, int b, int c) {
       return Math.min(Math.min(a, b), c);
      }
 
  public static int getLevenshteinDistance(String str1,String str2) {
  int[][] distance = new int[str1.length() + 1][str2.length() + 1];
  for (int i = 0; i <= str1.length(); i++)
   distance[i][0] = i;
  for (int j = 0; j <= str2.length(); j++)
   distance[0][j] = j;
 
  for (int i = 1; i <= str1.length(); i++)
    for (int j = 1; j <= str2.length(); j++)
     distance[i][j] = minimum(
     distance[i - 1][j] + 1,
     distance[i][j - 1] + 1,
     distance[i - 1][j - 1]+((str1.charAt(i-1)==str2.charAt(j-1))?0: 1));
  return distance[str1.length()][str2.length()];
        }
 
 
    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String str1=sc.nextLine();
    String str2=sc.nextLine();
    int ans=getLevenshteinDistance(str1,str2);
    System.out.println(ans);
    }
 
 
 
}
0
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
07.07.2011, 09:29  [ТС]
videolord, спасибо за ответ, но с расстоянием Левенштейна я знакома, и не только с ним, а еще с косым десятком способов определения расстрояний. Вопрос не в функциях для работы с текстом как со строкой - ясно, как найти, что изменилось в тексте. Вопрос в том, какой аппарат (алгоритмический, программный, языковой) лучше использовать для работы с диаграммами (?):

- организовать программную вставку/удаление определенных элементов диаграмм (можно ли работать с подгруженной диаграммой, выполненной, например, в Visio; как распознавать различные примитивы в Visio - или другом ПО),
- организовать вставку текста в эти элементы диагрмм (примитивы),
- организовать возможность определения точек соединения на диаграмме и пр.

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

В каком формате, проще и удобнее представлять эти диаграммы?.. - вот о чем тема
0
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
27.07.2011, 07:15  [ТС]
Тема все еще актуальна. Буду признательна за любые советы.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.07.2011, 08:48
Что-то похожее на редактор блок-схем по коду программы, типа FCEditor, DiamFm, Blokshema и др.
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
27.07.2011, 09:13  [ТС]
Puporev, да, похоже.
Только текст здесь - обычный повествовательный на естественном языке. А диаграммы - не блок-схемы в привычной нотации, а скорее организационные карты, м.б. диаграммы деятельности, потоков работ - не суть, надо понять принцип - на чем и на базе чего писать, что с чем взаимодействовать будет и т.п.

За список редакторов спс - м.б. найду описания к принципам их работы и что-то выужу из этого.
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
27.07.2011, 17:44
Есть диаграмма (организационная или блок-схема... - со словесным содержимым элементов), построенная по тексту вручную. Т.е. части текста разнесены по тем или иным элементам диаграммы;
Как собираетесь привязывать отдельные части текста и диаграму ? Это уже должно быть распознавание текста (и на основе распозных частей по какому-то алгоритму нужно строить диаграму). Эта задача похожа на нерешаемую в нынешних условиях.
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
28.07.2011, 04:59  [ТС]
Airhand, тема и создана для того, чтобы узнать, как лучше.

Вообще планировалось следующее.

Первый проход по тексту: "вручную" пользователь отмечает слова/словосочетания, которые принадлежат к разным "блокам" диаграммы. Делать это придется в любом случае, т.к. первой диаграммы вначале работы пользователь не имеет и строит ее (на данный момент) - также вручную, читая текст и выуживая "суть". Т.е. этап останется точно таким же, только с пользователя будут стребоваться "отметки" в тексте - какой кусок текста в какой блок был включен.

Дальнейшие проходы: решено обойтись "механическим" анализом строк - меньшей кровью, по сравнению с лингвистическим анализом;
Текст уже на этот момент изменился.
Измененный и первоначальный текст приближенно сравниваются. Возможно, не полностью, а только на предмет "целевых" слов/словосочетаний. Определяется, изменились ли формулировки:
- если формулировка удалилась, надо отождествлять ее с блоком на диаграмме и блок удалять;
- если формулировка добавилась, она вырезается из текста и демонстрируется пользователю - чтобы он сам определил, что с ней делать (в т.ч. пометил ее новую принадлежность к какому-то блоку диаграммы);
- если формулировка изменилась - ... - меняется содержимое соответствующего блока. Конечно, все должно делаться не "раз и навсегда", а перед этим демонстрироваться пользователю и интересоваться его согласием.

Добавлено через 5 минут
Цитата Сообщение от Airhand Посмотреть сообщение
Эта задача похожа на нерешаемую в нынешних условиях.
Можно поинтересоваться, почему? Хотя бы вкратце.

Основная проблема в том, что имеются горы текста, и по ним пользователи строят внеавтоматизированном режиме тучу диаграмм. А содержание гор текста изменяется с завидной периодичностью. И нужно в автоматизированном режиме отследить, где же произошло изменение в тексте и хотя бы полуавтоматически внести это изменение в диаграмму (хотя бы добавить на диаграмму соответствующий блок с текстом, связи пользователь установит сам).

В чем чертить диаграммы - пользователям не важно. Поэтому интересуюсь всем, с самого начала - на базе чего лучше начинать делать, какого редактора? - склоняюсь к Visio.
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
28.07.2011, 11:47
Цитата Сообщение от Zjaka Посмотреть сообщение
- если формулировка изменилась - ... - меняется содержимое соответствующего блока. Конечно, все должно делаться не "раз и навсегда", а перед этим демонстрироваться пользователю и интересоваться его согласием.
Как это планируется делать ? Только пользователь может решить, должна быть такая диаграмма, а не другая. Когда автоматический строят диаграму, не связывают никак диаграму и текст.

Основная проблема в том, что имеются горы текста, и по ним пользователи строят внеавтоматизированном режиме тучу диаграмм. А содержание гор текста изменяется с завидной периодичностью. И нужно в автоматизированном режиме отследить, где же произошло изменение в тексте и хотя бы полуавтоматически внести это изменение в диаграмму (хотя бы добавить на диаграмму соответствующий блок с текстом, связи пользователь установит сам).
В том то и проблема, что нужно как-то связывать диаграму и текст, а на данном этапе развития технологий - это нереально (может я ошибаюсь ?). Иначе по одному и тому же тексту, будет построено куча разных диаграм. Тут нужно соответствие один к одному.
0
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
28.07.2011, 12:08  [ТС]
Цитата Сообщение от Zjaka Посмотреть сообщение
Первый проход по тексту: "вручную" пользователь отмечает слова/словосочетания, которые принадлежат к разным "блокам" диаграммы.
Упрощенный пример того, что нужно реализовать.

1. Есть текст: "Мама мыла раму".
Пользователь должен построить по нему диаграмму. Первый раз он это делает самостоятельно - и как верно было замечено, никто за него это не сделает.

1.1. Пользователь использует определенную нотацию для создания диаграммы.
Нотация известна. Все элементы этой нотации перечислены (например, прямоугольный блок, овальный блок, стрелка и т.п.). В соответствие элементам нотации поставлен, например, цвет (красный - прямоугольный блок, синий - стрелка... и т.п.). Можно не использовать цвета, а создать таблицу и наполнять ее: в зависимости от того, куда в таблице пользователь отнесет фрагмент текста, ему присвоятся соответствующие свойства.

1.2. Пользователь просматривает текст и отмечает (как ему надо, в соответствие с определенной нотацией) только те элементы, которые будут принимать участие в диаграммах.
Пример: "маму" отмечает красным, "мыла" - синим, "раму" - красным.

1.3. Происходит автоматическая генерация диаграммы. Блоки в нужном количестве и качестве добавляются на лист (2 прямоугольных и 1 стрелка в нашем примере). Блоки наполнены содержимым - текстом.

1.4. Пользователь вручную соединяет блоки между собой. Как это необходимо.

2. Происходит изменение текста.
Новый текст: "Мама и Вася моют раму".

2.1. Старая строка текста сравнивается с новой.
Выясняется, что добавилось: "и Вася", "моют" вместо "мыла".

2.2. Пользователю демонстрируются изменения в тексте (извлекаются, а лучше даже подсвечиваются внутри остального текста).

2.3. Пользователю предлагается принять решение - что делать с изменениями в тексте? - пометить их как новые части диаграмм или проигнорировать.

2.4 Вместо "мама" пользователь отмечает красным "мама и вася".... Вместо "мыла" - "моют".

2.5. Генерируется новая диаграмма.

2.6. Пользователь вручную повторяет действия из п. 1.4.
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
28.07.2011, 12:22
Цитата Сообщение от Zjaka Посмотреть сообщение
Упрощенный пример того, что нужно реализовать.

Есть текст: "Мама мыла раму".

1. Пользователь должен построить по нему диаграмму. Первый раз он это делает самостоятельно - и как верно было замечено, никто за него это не сделает.
Надо хранить где-то, построеннуя диаграмму к этому тексту. Иначе как ещё связать текст с диаграммой ?

1.3. Происходит автоматическая генерация диаграммы. Блоки в нужном количестве и качестве добавляются на лист (2 прямоугольных и 1 стрелка в нашем примере). Блоки наполнены содержимым - текстом.
То то и оно, что без привязки текста к диаграмме, можно построить бесчисленное множество разных диаграмм по одному и тому же тексту.
0
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
28.07.2011, 12:27  [ТС]
Цитата Сообщение от Airhand Посмотреть сообщение
Надо хранить где-то, построеннуя диаграмму к этому тексту.
Даже и спорить не собираюсь Это очевидно.

Цитата Сообщение от Airhand Посмотреть сообщение
То то и оно, что без привязки текста к диаграмме, можно построить бесчисленное множество разных диаграмм по одному и тому же тексту.
О каком бесчисленном множестве идет речь? Не поняла.

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

Меня интересует, реализуемо ли в принципе то, что я описала в посте с "мамой". И на базе чего луше реализовывать. Какой редактор лучше использовать для сохранения и последующего открытия для редактирования диаграмм, в какой среде писать...
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
28.07.2011, 12:38
Цитата Сообщение от Zjaka Посмотреть сообщение
О каком бесчисленном множестве идет речь? Не поняла.
По одному тексту можно построить множество диаграм. Тут нет соответствия 1 к 1.

Меня интересует, реализуемо ли в принципе то, что я описала в посте с "мамой". И на базе чего луше реализовывать. Какой редактор лучше использовать для сохранения и последующего открытия для редактирования диаграмм, в какой среде писать...
Может в данном, частном случае и может быть соотношение 1 к 1. Но это частный случай. А возмём длинное предложени - там уже нельзя построить однозначное соответствие. Что если пользователь один раз построит так, а другой раз эдак ?
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
28.07.2011, 15:57  [ТС]
Цитата Сообщение от Airhand Посмотреть сообщение
Что если пользователь один раз построит так, а другой раз эдак ?
Пусть строит, как душе его угодно.
Передо мной не стоит задача контроля целостности диаграммы и ее синтаксической правильности (относительно какой-л. нотации).

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

0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
28.07.2011, 16:09
Цитата Сообщение от Zjaka Посмотреть сообщение
Пусть строит, как душе его угодно.
Передо мной не стоит задача контроля целостности диаграммы и ее синтаксической правильности (относительно какой-л. нотации).
Дело не в "правильности". Просто пользаватель может один раз построить так, а дргой раз - эдак. Куча вариантов получается.

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

Это совершенно другая задача. Тут не нужно запоминать все виды диаграмм. Здесь нужно лишь "набросать" вариант и пусть пользователь с ним делает, что хочет.
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 15
28.07.2011, 16:25  [ТС]
Цитата Сообщение от Airhand Посмотреть сообщение
Дело не в "правильности". Просто пользаватель может один раз построить так, а дргой раз - эдак. Куча вариантов получается.
При обнаружении изменений (необходимость удаления, добавления, изменения блоков в диаграмме) пользователю должна открываться предыдущая диаграмма для редактирования, на базе нее и будет осуществляться правка. А не построение диаграммы заново с нуля.

А "как" именно пользователь "выберет" поправить диаграмму в очередной раз, информационной системы не должно касаться: сохранила результат, закрыла окно и усё :cofee2:

И почему получается "куча"? Если диаграмма открывается и редактируется 1 раз. Чего-то я недопонимаю.

Но это все нюансы того "как". А на чем? На базе какого редактора делать? - Visio / OO.o.

Печалька.
0
 Аватар для Airhand
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
28.07.2011, 18:10
Не знаю на чём делать. Можно хоть на С.

Добавлено через 1 час 40 минут
Цитата Сообщение от Zjaka Посмотреть сообщение
И почему получается "куча"? Если диаграмма открывается и редактируется 1 раз. Чего-то я недопонимаю.
Потаму, что с точки зрения, программирования синий и красный (например) - это абсолютно разные варианты обозначения одного слова, а т. к. цветов - бесконечно много, то и варинтов - столько же.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2011, 18:10
Помогаю со студенческими работами здесь

Работа с диаграммами: при создании графика непроизвольно появляются ряды данных
Здравствуйте. Возникла следующая проблема: при создании графика непроизвольно появляются ряды данных, при чем при i=1 их 2, при i=2 -...

Работа с текстом
Доброго времени суток. Есть документ, в котором хранится информация. Пример: Size bd 36 _____________________________ sosafsdvxc ...

Вывести слова, стоящие до и после взятого слова
Здравствуйте! Вот такое задание: есть текст, с текста взяли слово (любое). Нужно вывести слово что стоит после и до взятого слова. ...

Заданный текст распечатать по строкам
Помогите пожалуйста очень прошу!!! Заданный текст распечатайте по строкам, понимая под строкой либо очередные 20 литер, если среди них...

Работа с текстом
Здравствуйте, подскажите какое текстовое поле лучше выбрать, чтобы можно была реализовать следующую задачу: пользователь вводит в текстовое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru