Какой язык я должен использовать, чтобы написать анализатор текста и отобразить результаты в удобной для пользователя форме? - PullRequest
19 голосов
/ 26 марта 2010

Собственное программное обеспечение моей компании создает файл журнала, который намного проще использовать, если он анализируется. Анализатор журналов, который мы все используем, был написан другим сотрудником как сторонний проект, и у него ужасная производительность.

Эти файлы журнала могут очень быстро увеличиваться до 10 мегабайт, и у анализатора, который мы используем в настоящее время, возникают проблемы, если размер файла журнала превышает 1 мегабайт.

Итак, я хочу написать программу, которая сможет анализировать этот огромный объем текста в кратчайшие сроки. Мы используем исключительно Windows, поэтому работа на Windows обязательна. Наша текущая реализация работает на локальном веб-сервере, и я убежден, что запуск его как приложения должен был бы быть быстрее.

Все предложения будут полезны. Спасибо.

РЕДАКТИРОВАТЬ: Моя конечная цель состоит в том, чтобы разобрать текст и отобразить его в гораздо более удобной для пользователя форме с цветами и тому подобное. Можете ли вы сделать это с Perl и Python? Я знаю, что вы можете сделать это с Java и C ++. Таким образом, он будет работать как Блокнот, где вы открываете файл журнала, но на экране вы видите удобный для пользователя формат вместо необработанного файла.

РЕДАКТИРОВАТЬ: Итак, я не могу выбрать лучший ответ, и это должен был выбрать язык, который лучше всего отображает то, что я собираюсь, а затем написать парсер в этом. Кроме того, использование ANTLR, вероятно, значительно облегчит этот процесс. Я изменил исходный вопрос, так как, я думаю, я не спросил, что я действительно искал. Спасибо всем!

Ответы [ 12 ]

16 голосов
/ 26 марта 2010

Хммм, "иди с тем, что ты знаешь", был хороший ответ.Perl был разработан для такого рода вещей (но imo хорошо подходит для простого синтаксического анализа, но я бы лично избегал этого для сложных проектов).

Если это даже немного сложно, почему бы не использовать правильный синтаксис и грамматику?

Lex & Yacc (или Flex & Bison) приходят на ум, но лично я всегда буду стремиться к Antlr

Определить различные "слова" в терминах шаблонов (синтаксис) и правила для объединения этих слов (грамматика), и Antlr выдаст программу для анализа вашего ввода (вы можете иметь программу на Java, C, C ++ и более (вы беспокоитесь о времени разбора, поэтому выберите скомпилированный язык,конечно)).

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

Этот бит внизу определяет правило грамматики.

Если вы испортите правила грамматики, вы будете проинформированы.Это не относится к парсерам ручной работы, где вы просто царапаете свой body part и удивляетесь «странным результатам» ...

Проверьте это.Даже если вы думаете, что ваш проект тривиален сейчас, он вполне может расти.И если у вас есть какой-либо интерес к синтаксическому анализу, вы обязаны по крайней мере ознакомиться с lex / yacc, но особенно Antlr (Works)

11 голосов
/ 26 марта 2010

Вы должны использовать язык, который ВЫ знаете ... Если у вас не так много времени для завершения проекта, вы также можете потратить время на изучение нового языка.

7 голосов
/ 26 марта 2010

Я бы предложил использовать Python или Perl.Парсинг больших текстовых файлов с регулярными выражениями действительно быстрый.

4 голосов
/ 26 марта 2010

На каком бы языке ни работал ваш коллега.

(Я мог бы сказать, что любой макрос-ассемблер позволит вам писать код, который будет копировать ваши данные, но если серьезно, вы собираетесь потратить месяцы на написание ассемблера просто для экономии времени процессора? но это не практично .)

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

3 голосов
/ 26 марта 2010

Я использовал и Python, и Perl. Perl более подходит для этого, но его трудно поддерживать. Python сделает это точно так же, и его легче читать. Перейти на Python.

2 голосов
/ 26 марта 2010

Разбор этого огромного количества текста в кратчайшие сроки.

Рассмотрим проект PADS от AT & T. Это специальный язык, совместимый с C, который разработан специально для высокоскоростного анализа файлов журналов и других ad hoc форматов данных. Есть даже функция, где он может попытаться узнать ваш формат журнала на примерах, хотя я пока не знаю, ударил ли он по производству. Люди, стоящие за проектом, действительно умны, и это оказало большое влияние на телефонную компанию. PADS обеспечивает очень высокую производительность для потоков данных, которые выдают гигабайты. Джо Боб говорит, проверь это.

Если «массивный текст в кратчайшее возможное время », Perl и Python не являются ответом. Но если вам нужно что-то сделать не слишком медленно, и это займет больше времени, Perl и Python могут быть в порядке. Количество мегабайт на самом деле не такое большое.

2 голосов
/ 26 марта 2010

Может быть, готовый продукт, такой как MS LogParser ( подкаст использования здесь ), может делать то, что вам нужно, и это бесплатно.

2 голосов
/ 26 марта 2010

Я считаю, что Perl считается хорошим выбором для разбора текста.

1 голос
/ 26 марта 2010

Perl хорош для обработки текста.

Ряд очень хороших программ обработки текста написан на Perl. Ack (замена grep) равен единице.

0 голосов
/ 26 марта 2010

Я бы предложил Perl.Он был практически построен для разбора лог-файлов.Что касается вывода, я согласен с ghostdog74, HTML путь.В Perl есть десятки модулей, которые позволяют вам создавать и / или шаблонировать HTML.

Я бы проанализировал данные с помощью регулярных выражений, а затем использовал Template :: Toolkit (на CPAN) для создания красивых страниц с использованием HTML иCSS шаблоны.

...