全て
単純な ARFF ファイルを解析するコードを見つけたので、データが次のようなスパース ARFF に合うように変更したい:
@data
{0 12,4 37,8 First,20 'Some Thing'}
{0 12,13 First,28 'Some Thing'}
コードは次のとおりです。
def ParseFromSimpleARFF(data):
arffFormat = Forward()
E = CaselessLiteral("E")
comment = '%' + restOfLine
relationToken = Keyword('@RELATION', caseless=True)
dataToken = Keyword('@DATA', caseless=True)
attribToken = Keyword('@ATTRIBUTE', caseless=True)
ident = Word( alphas, alphanums + '_-' ).setName('identifier')
relation = Suppress(relationToken) \
+ ident.setResultsName('relation')
classDomain = Suppress('{') \
+ Group(delimitedList(ident.setResultsName('domain'))).setResultsName('domains') + Suppress('}')
attribute = Group(Suppress(attribToken)
+ Word(alphas).setResultsName('attrname')+(Word(alphas)|classDomain).setResultsName('type')).setResultsName('attribute')
arithSign = Word("+-",exact=1)
realNum = Combine( Optional(arithSign)
+ (Word( nums ) + "." + Optional( Word(nums) )|( "." + Word(nums) ))
+ Optional( E + Optional(arithSign) + Word(nums) ))
**#dataList = Group(delimitedList(realNum|ident)).setResultsName('record')
dataList = Suppress('{') + Group( delimitedList(realNum|ident)).setResultsName('record') + Suppress('}')**
arffFormat << ( relation
+ OneOrMore(attribute).setResultsName('attributes')
+ dataToken
+ OneOrMore(dataList).setResultsName('records')).setResultsName('arffdata')
simpleARFF = arffFormat
simpleARFF.ignore(comment)
tokens = simpleARFF.parseString(data)
return tokens
しかし、それは機能しません
空白を識別するようにプログラムに指示する必要があると思いますが、方法がわかりません
本当にありがとう