Ped*_*dro 8 regex string classification ontology protege
我最近开始使用本体,我正在使用Protege构建一个本体,我也想用它来自动分类字符串.以下说明了一个非常基本的类层次结构:
String
|_ AlphabeticString
|_ CountryName
|_ CityName
|_ AlphaNumericString
|_ PrefixedNumericString
|_ NumericString
Run Code Online (Sandbox Code Playgroud)
最终字符串Spain应该被归类为CountryName或UE4564将是a PrefixedNumericString.
但是我不确定如何建模这些知识.我是否必须先定义一个字符是字母,数字等,然后从现有字符构造一个单词,还是有办法使用正则表达式?到目前为止,我只设法根据一个确切的短语对字符串进行分类String and hasString value "UE4565".
或者,为本体中的每个类保护正则表达式然后使用这些正则表达式在Java中对字符串进行分类会更好吗?
这里可能适合的方法,特别是如果本体很大/很复杂或将来可能会改变,并假设某些错误是可接受的,那就是机器学习.
利用这种方法的过程概述可能是:
为了更具体地说明,这里有一些基于您的本体示例的建议.
一些可能适用的布尔特征:字符串是否与正则表达式匹配(例如Qtax建议的那些); 该字符串是否存在于预先构建的已知城市名称列表中; 它是否存在于已知的国名列表中; 存在大写字母; 字符串长度(不是布尔值)等
例如,如果你总共有8个特征:匹配上面提到的4个正则表达式; 这里建议的附加4,然后"西班牙"将表示为(1,1,0,0,1,0,1,5)(匹配前2个正则表达式但不是最后两个,是城市名称,但不是国名,大写字母和长度是5).
这组功能将代表任何给定的字符串.
要训练和测试机器学习算法,你可以使用WEKA.我将从基于规则或树的算法开始,例如PART,RIDOR,JRIP或J48.
然后,可以通过Weka从Java内部或作为外部命令行使用经过训练的模型.
显然,我建议的功能几乎与您的Ontology 1:1相匹配,但假设您的分类法更大更复杂,这种方法可能是成本效益最好的方法之一.
我对 Protege 一无所知,但您可以使用正则表达式来匹配大多数情况。唯一的问题是区分国家和城市名称,如果没有其中任何一个的完整列表,我不知道如何做到这一点。
以下是您可以使用的一些表达方式:
字母字符串:
^[A-Za-z]+\z(ASCII) 或^\p{Alpha}+\z(Unicode)
字母数字字符串:
^[A-Za-z0-9]+\z(ASCII) 或^\p{Alnum}+\z(Unicode)
前缀数字字符串:
^[A-Za-z]+[0-9]+\z(ASCII) 或^\p{Alpha}+\p{N}+\z(Unicode)
数字字符串:
^[0-9]+\z(ASCII) 或^\p{N}+\z(Unicode)