поиск шаблонов в шестнадцатеричном файле

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

Пример данных, содержащихся в файле, может быть: b0 82 91 a2 c3 89 b0 82 4a e3....(больше байтов)... Хотя здесь я взял очень мало байтов, но мы можем найти шаблон "b0 82 дюйма дважды выше. Таким образом, вывод должен показать шаблон и количество раз, когда он придет. Точно так же мы можем иметь 3-байтовый шаблон или даже более байтовый шаблон.

Еще одним примером может быть: aa 00 a7 2f 7b 4c ....(больше байтов).....aa 01 a7........(больше байтов)......aa 05 a7 ..... Я думаю, даже это можно считать шаблоном из 3 байтов, где два байта (aa и a7) фиксированы, а средний варьируется от 00 до 05.

Это два примера, которые я мог бы придумать, хотя шаблонов может быть больше. Даже могут быть какие-то скрытые паттерны, которые нельзя сразу визуализировать. Вся идея заключается в том, что подойдет любой шаблон, если он помогает различать два потока на более позднем этапе. Я думаю, что теперь я более ясно определил свою проблему. Пожалуйста, дайте мне знать следующие вещи:

  1. Как мы можем сделать этот тип поиска закономерностей?

  2. Есть ли какие-либо инструменты или библиотеки, которые могут помочь для этой цели?

  3. Также какой язык или инструмент использовать для эффективной и быстрой разработки?

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


comment
Можете ли вы уточнить, что вы подразумеваете под шаблоном?   -  person templatetypedef    schedule 15.02.2012
comment
шаблон может быть чем угодно, что можно отличить от остальных данных. Например, это может быть любой байт, скажем, 0x4a или 0x56, или любой другой байт. или даже их комбинация, например 0x4a56. Кроме того, если, скажем, есть некоторые байты, у которых 5 старших битов одинаковы, а младшие 3 бита варьируются от 000 до 111, то это также формирует шаблон, поскольку 5 битов одинаковы в нескольких местах. Это то, что я могу думать о возможных закономерностях. Тем не менее, вы можете придумать больше таких шаблонов, единственное, что я хочу, это то, что они должны быть легко различимы.   -  person mezda    schedule 15.02.2012
comment
В общем случае это невозможно, так как практически все может быть шаблоном. Для чего вы хотите это использовать? Может есть более конкретная проблема?   -  person templatetypedef    schedule 15.02.2012
comment
Почему шестнадцатеричный? Вы ищете шаблоны, выровненные по 4-битным границам?   -  person Has QUIT--Anony-Mousse    schedule 15.02.2012
comment
@templatetypedef это называется машинным обучением. Ты слышал об этом?   -  person Neil McGuigan    schedule 16.02.2012
comment
@templatetypedef...anony-mousse...el Chief: я подробно объяснил свою проблему выше. пожалуйста, дайте мне знать, если я ясно сейчас, а также, возможно, ответы на мои вопросы выше. Благодарность   -  person mezda    schedule 16.02.2012
comment
@user1182722 user1182722 Вам следует заняться анализом текста. Это по сути то же самое. Вам нужно будет разделить документ/поток на слова   -  person Neil McGuigan    schedule 16.02.2012
comment
@elchief: спасибо за ответ ... поскольку я новичок в этой области, не могли бы вы сообщить мне какие-либо книги или ссылки и необходимые инструменты для анализа текста ... и какой язык лучше всего подходит для продолжения этот тип проблемы ... будет ли C хорошим? Существуют ли доступные библиотеки для интеллектуального анализа текста? пожалуйста, дайте мне знать. Благодарность   -  person mezda    schedule 17.02.2012
comment
Лучшими инструментами для интеллектуального анализа текста являются Rapidminer и Gate. Gate мощнее, но Rapidminer гораздо проще в использовании.   -  person Neil McGuigan    schedule 18.02.2012


Ответы (4)


Это похоже на довольно типичную проблему поиска ngram. Вот ссылка на некоторые решения ngram.

более быстрый способ обнаружения n-грамм в строке?

Вы должны относиться к своему гексу так же, как к любой другой строке.

person hockey_dave    schedule 20.05.2013

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

Может быть, начать с чтения книги. Я предлагаю Распознавание образов с помощью К. Бишоп.

person ziggystar    schedule 07.03.2012
comment
не могли бы вы сообщить мне доступные библиотеки. я использую c вместо linux. или вы можете сказать мне библиотеки, доступные для других платформ. благодаря. - person mezda; 13.03.2012

Вот еще одна идея. Работает ли это для вас, зависит от того, сколько данных вы обрабатываете, сколько памяти вы можете использовать, и от того, будут ли типы обнаруживаемых шаблонов полезными для ваших целей.

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

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

Для подробного ознакомления с этими структурами данных, если у вас есть доступ к университетской библиотеке или деньги, Dan Gusfield введение в алгоритмы строк, деревьев и последовательностей будет очень полезным. Но на SO тоже есть ряд вопросов и ответов, связанных с этим.

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

person jogojapan    schedule 07.03.2012
comment
Спасибо @jogojapan за ответ. я свяжусь с вами по этому поводу. перед этим мне нужно немного почитать об этом. - person mezda; 13.03.2012

Ваш вопрос не полностью определен, но я попытаюсь дать вам несколько советов:

  1. Ваши шаблоны, вероятно, можно выразить в виде регулярных выражений. Если вы не знаете, что это такое - я бы попробовал поискать конкретный пример на вашем любимом языке программирования. Python — хороший вариант (модуль re включен в основной язык). Для C++ используйте boost::regex, а для других языков используйте google :)

  2. Теперь - для использования регулярных выражений для поиска двоичных файлов (шестнадцатеричных) вместо текста попробуйте посмотреть что-то вроде это.

Удачи :)

person Guy Adini    schedule 15.02.2012
comment
я объяснил мою проблему в некоторых деталях выше. пожалуйста, дайте мне знать, если я ясно сейчас, а также, возможно, ответы на мои вопросы выше. Благодарность - person mezda; 16.02.2012