Я пытаюсь найти более или менее надежный способ решения следующей проблемы, и был бы признателен, если кто-либо из вас может предложить лучший способ сделать следующее.
Мое приложение обрабатывает текст, который приходит из файла и может иметь неограниченную длину (в моем текущем примере у меня есть 8000 слов в текстовом файле).Для нового проекта текст (String
) загружается, токенизируется (слова), токены записываются в модель графа и отображаются в JTable
(где они могут быть помечены).График может быть сохранен в XML (и должен быть, если проект будет загружен).
Таблица состоит из 3 строк (индекс токена, текст токена, тег).
Проблема в том, что процесс записи каждого токена в модель графа занимает много времени (~ 7 минут для 8000 wds.).Поэтому мне нужно отобразить JTable
до завершения этого процесса записи и сделать его доступным для тегирования.Не большая проблема: поскольку фактическая токенизация (clean & split String
) быстрая, я могу отображать таблицу на основе String, а не заполнять ее из графовой модели (для токенов и tags).
Проблема заключается скорее в том, что а) процесс записи в график должен быть завершен до того, как модель может быть сохранена, и б) что мне нужно написать теги длятокены, которые могут еще не существовать (когда пользователь быстрее, чем приложение / процесс записи токенов, например, когда он выбирает тег для последнего из большого числа слов, в то время как процесс записи только начинается).Поэтому я хочу иметь возможность проверить таблицу для вновь установленных тегов как можно скорее после действия тегирования, проверить график , существует ли токен для тега, напишите тег , если это произойдет, и проверьте позже , если этого не произойдет.
Вот примерный план того, как я думал, что это можно сделать, и я быбудьте благодарны, если вы взглянули на это и дайте мне знать, видите ли вы возможность для оптимизации и / или скрытых ошибок.Позволит мне сэкономить много времени и перефакторинг позже.
Большое спасибо!
Подготовка
- Загрузка текста из файла
- Очисткаи разбить текст на токены
- Показать таблицу на основе очищенного и разбитого текста
- Начать процесс записи токенов в график (
Thread
) + обновить int
(например, int lastWritten
) с помощьюиндекс последнего записанного токена
Действие тегирования пользователем
- Проверьте, существует ли токен на теге на графике (через
lastWritten
) - Да : записать тег в график, отобразить тег в таблице
- Нет : сохранить индекс токена в списке (например,
taggedTokenNotWritten
), отобразить тег в таблице - Начните новый
Thread
, который проверяет, были ли токены в taggedTokenNotWritten
записаны.Если это так - напишите тег в токен + удалите из списка;если нет - держать в списке.Периодически запускайте Thread
(например, всякий раз, когда установлен тег *? *).
Сохранить действие пользователя
- Проверить, завершен ли процесс токенизации + проверить, пусто ли
taggedTokenNotWritten
. - Если да - сохранить;если нет - отобразить сообщение и сохранить только после того, как указано выше.