Как обнаружить табличные данные из различных источников

Asked
Viewd131

1

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

Моя первая мысль заключалась в том, чтобы написать длинный оператор switch / case, который проверял бы данные, разделенные табуляциями, а затем еще один случай для данных, разделенных вертикальными символами, а затем еще один случай для данных, разделенных другим способом и т.д. и т. д. Теперь, конечноЯ понимаю, что мне нужно было бы составить список различных вещей, которые нужно было бы обнаружить, но мне было интересно, есть ли более разумный способ обнаружения этих особенностей, чем относительно медленный поиск каждого типа.

Я понимаю, что этот вопрос не особенно красноречиво сформулирован, поэтому надеюсь, что он имеет смысл!

Есть идеи?

(не знаю, как это пометить - так что помощь приветствуется!)

  • Самый первый шаг - очень четко и точно определить, что вы подразумеваете под «табличными данными».Похоже, вы этого не сделали.

    Matt Ball13 ноября 2009, 20:40

3 ответов

1

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

  • Какие векторы признаков [которые будут изучены]?Я не уверен, что обучение сможет найти неправильно отформатированные строки.

    monksy13 ноября 2009, 21:22
1

Предполагается, что у вас еще нет определенных типов, хранящихся в TSV.

Файл TSV обычно [Значение1] \ t [Значение..N] \ n

Я предлагаю:

  1. Подсчитайте все вкладки
  2. Подсчитайте все новые строки
  3. Подсчитайте общее количество вкладок в первой строке
  4. Разделите общее количество вкладок на количество вкладок в первой строке.

Если результат 4, если остаток равен 0, значит, у вас есть кандидат файлов TSV.Оттуда вы можете сделать следующее:

  1. Вы можете продолжить чтение данных и игнорировать ошибку строк с меньшим или большим количеством вкладок на строку, чем предполагалось.
  2. Вы можете сканировать каждую строку перед чтением, чтобы убедиться, что все они согласованы.
  3. Вы можете прочитать строку, которая не соответствует формату, а затем выдать ошибку.

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

1

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