2016-07-31 3 views
0

지정된 정규 표현식과 일치하는 각 속성을 인스턴스 집합에서 제거해야하는 속성 필터가 있습니다.이름으로 특성 제거. 필터가 고장 났습니까?

RegEx에 문제가 있습니다.

나는 (regexr에서 테스트 한) 모든 것이 유효한 몇 가지 간단한 것을 시도했다. 하지만 필터가 필터를 허용하지 않는 것 같습니다.

관련 코드를 따르십시오.

Instances dataset1_x=new Instances(dataset1); 

RemoveByName filterX=new RemoveByName(); 
filterX.setInputFormat(dataset1_x); 
filterX.setInvertSelection(true); 
filterX.setExpression(Pattern.quote("^.*i$")); 
//filterX.setExpression("^.*i$"); also don't work 
Instances dataset1_=Filter.useFilter(dataset1_x,filterX); 

"i"로 끝나는 모든 이름과 일치해야합니다.

이 얻어진 데이터 세트

라는

"셋 - weka.filters.unsupervised.attribute.StringToNominal-Rlast-weka.filters.unsupervised.attribute.Remove-weka.filters.unsupervised.attribute.RemoveByName- E ^. * id $ "

기본 표현식은 ^.*id$입니다. 그것은 변하지 않았습니다.

filterX.getExpression();은 전에 올바른 정규 표현식을 제공합니다. 또한이 필터의 사용법은 여러 가지 코드 예제에 해당합니다. 정규식을 사용하면 같음 Filter.setOptions(); 이것은 버전 3.9.0 dev 및 3.8 stable의 문제입니다.

WEKA-GUI를 사용하면 필터가 올바르게 작동합니다.

따라서 다른 가정 프로그램 입력 한 경우이 입력을 설정하기 전에 표현과 InvertSelection 플래그를 설정해야합니다 ..

+1

정확히 어떻게 받아들이지 않습니까? 또한,'i $'는 위의 정규 표현식의 적합한 (그리고 더 빠른) 버전일까요? – RamenChef

+0

감사하지만 정규식은 접미사 'i'와만 일치합니까? 나는 그것을 시험 할 것이다. 이름이 정규 표현식과 일치하더라도 모든 속성을 필터링하지 않기 때문입니다. – Jan

답변

1

을 정규식 .. 특별한 형식이 있어야합니다 불행히도 API는 예제를 제공하지 않는다는 것입니다 체재.

더 일반적으로는 inputFormat을 설정하기 전에 모든 옵션을 설정해야한다고 가정합니다.

다음은 작동 중입니다.

Instances dataset1_x=new Instances(dataset1); 
RemoveByName filterX=new RemoveByName(); 
filterX.setInvertSelection(true); 
filterX.setExpression(Pattern.quote("^.*i$")); 
filterX.setInputFormat(dataset1_x); 
Instances dataset1_=Filter.useFilter(dataset1_x,filterX); 
관련 문제