regex - 基于本体的字符串分类

标签 regex string classification ontology protege

我最近开始使用本体,我正在使用 Protege 构建一个本体,我也想用它来自动分类字符串。下面说明了一个非常基本的类层次结构:

String
|_ AlphabeticString
   |_ CountryName
   |_ CityName
|_ AlphaNumericString
   |_ PrefixedNumericString
|_ NumericString

最终像 Spain 这样的字符串应该被归类为 CountryName 或者 UE4564 将是一个 PrefixedNumericString

但是,我不确定如何对这些知识进行建模。我是否必须首先定义一个字符是字母、数字等,然后从现有字符构造一个单词还是有办法使用正则表达式?到目前为止,我只能根据 String and hasString value "UE4565" 之类的确切短语对字符串进行分类。

或者最好为本体中的每个类保护一个正则表达式,然后使用这些正则表达式对 Java 中的字符串进行分类?

最佳答案

一种可能适合这里的方法,特别是如果本体很大/复杂或将来可能会发生变化,并且假设某些错误是可以接受的,则是 机器学习 .

使用这种方法的流程概要可能是:

  • 定义一个可以从每个字符串中提取的与本体相关的特征集(下面的一些示例)。
  • 收集字符串及其真正匹配类别的“训练集”。
  • 从每个字符串中提取特征,并在此数据上训练一些机器学习算法。
  • 使用经过训练的模型对新字符串进行分类。
  • 根据需要重新训练或更新您的模型(例如,当添加新类别时)。

  • 为了更具体地说明,这里有一些基于您的本体示例的建议。

    一些可能适用的 bool 特性:字符串是否匹配正则表达式(例如 Qtax 建议);该字符串是否存在于预先构建的已知城市名称列表中;它是否存在于已知的国家/地区名称列表中;存在大写字母;字符串长度(不是 bool 值)等。

    因此,例如,如果您共有 8 个特征: 匹配上述 4 个正则表达式;和这里建议的另外 4 个,那么“西类牙”将表示为 (1,1,0,0,1,0,1,5)(匹配前 2 个正则表达式而不是后两个,是一个城市名称,但不是国家名称,有一个大写字母,长度为 5)。

    这组特征将代表任何给定的字符串。

    要训​​练和测试机器学习算法,您可以使用 WEKA .我将从基于规则或树的算法开始,例如PART、RIDOR、JRIP 或 J48。

    然后可以通过 Weka 从 Java 内部或作为外部命令行使用经过训练的模型。

    显然,我建议的功能与您的本体几乎 1:1 匹配,但假设您的分类更大、更复杂,这种方法可能是成本效益方面最好的方法之一。

    关于regex - 基于本体的字符串分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583906/

    相关文章:

    javascript - 使用 javascript 在正则表达式中使用语言环境字符

    c - 将用户输入的 char 存储为变量时出错

    python - 正则表达式匹配到以 `- [` 开头的最后一行

    matlab - 朴素贝叶斯 : the within-class variance in each feature of TRAINING must be positive

    python - Tensorflow 2 坐标分类器

    regex - Powershell 'where'语句-notcontains

    java - 测试是否存在命名捕获组

    javascript - 如何在搜索时仅使用星号通配符?

    java - 字符串翻转不起作用,不明白为什么?导致越界异常

    python - 如何为自己的数据实现tensorflow的next_batch