将文本解析为数据模型

时间:2018-05-02 20:02:41

标签: algorithm parsing machine-learning text-mining

我试图将文本解析为我创建的数据模型,特别是来自RPG书籍的怪物。我从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 :(得分:2)

这看起来像一个古老的正则表达式要解决的案例。 我按照以下方式处理:

  • 从您迄今为止能够抓取的任何内容中过滤掉无用的记录(不包含相关字段的记录)。
  • 将每个相关记录展平成一行,这样很容易 用正则表达式查询解析。
  • 尝试使用正则表达式查询构建器,例如 this提取字段并将其放入模型中。