in src/ct/studies/study.go [55:111]
func (s *Study) Parse() *Study {
interpreter := parser.Get()
inclusions, exclusions := s.Criteria()
s.criteriaCnt = len(inclusions) + len(exclusions)
// Parse inclusion criteria:
inclusionCriteria := criteria.NewCriteria()
for _, inclusion := range inclusions {
lowercase := strings.ToLower(inclusion)
orRelations, andRelations := interpreter.Interpret(lowercase)
orRelations.Process()
andRelations.Process()
if !orRelations.Empty() {
criterion := criteria.NewCriterion(inclusion, orRelations.MinScore(), orRelations)
inclusionCriteria = append(inclusionCriteria, criterion)
}
if !andRelations.Empty() {
for _, r := range andRelations {
rs := relation.Relations{r}
criterion := criteria.NewCriterion(inclusion, rs.MinScore(), rs)
inclusionCriteria = append(inclusionCriteria, criterion)
}
}
}
s.inclusionCriteria = inclusionCriteria
// Parse exclusion criteria:
exclusionCriteria := criteria.NewCriteria()
for _, exclusion := range exclusions {
lowercase := strings.ToLower(exclusion)
orRelations, andRelations := interpreter.Interpret(lowercase)
orRelations.Process()
andRelations.Process()
orRelations.Negate()
andRelations.Negate()
if !andRelations.Empty() {
criterion := criteria.NewCriterion(exclusion, andRelations.MinScore(), andRelations)
exclusionCriteria = append(exclusionCriteria, criterion)
}
if !orRelations.Empty() {
for _, r := range orRelations {
rs := relation.Relations{r}
criterion := criteria.NewCriterion(exclusion, rs.MinScore(), rs)
exclusionCriteria = append(exclusionCriteria, criterion)
}
}
}
s.exclusionCriteria = exclusionCriteria
s.Transform()
return s
}