Разбор текста в модель данных - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь разобрать текст в созданную мной модель данных, в частности, монстров из и RPG book. Я извлекаю текст из PDF, это выглядит так:

Dire Rat
From age to age, dire rats vary in size. In this age, they're only half
as big as they sometimes get, but they're also twice as vicious.
1
st
 level mook [beast ]
Initiative: +2
Infected bite +5 vs. AC-4 ongoing damage
AC 15
PD 15  HP 6 (mook)
MD 10
Mook: Kill one dire rat mook for every 6 damage you deal to the mob.

А вот моя желаемая модель данных, случайно написанная на C #:

public interface IMonsterData
    {
        string Name { get; }
        int Level { get; set; }
        string Role { get; set; }
        string Type { get; set; }
        int Initiative { get; set; }
        int ArmorClass { get; set; }
        int PhysicalDefense { get; set; }
        int MentalDefense { get; set; }
        int HealthPoints { get; set; }
    }

Желаемый результат будет выглядеть так:

Name = Dire Rat
Level = 1
Role = mook
Type = beast
Initiative = 2
ArmourClass = 15
PhysicalDefense = 15
MentalDefense = 10
HealthPoints = 6

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

Я подошел к этой проблеме с помощью ручного синтаксического анализа с использованием C # и .Net, путем нахождения строк, которые имеют только "st, nd, rd, th" и нахождения AC, PD между такими строками, но у меня есть ощущение, что Это хороший случай, чтобы решить его с помощью Text Mining или какой-либо другой формы машинного обучения.

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

Какую библиотеку, алгоритм или подобное мне следует использовать для достижения моей цели?

1 Ответ

0 голосов
/ 02 мая 2018

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

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