Java源码示例:dk.brics.automaton.Automaton

示例1
@Override
protected Pair<Double, Double> computeMeasureValue() {
	System.out.println();
	System.out.println("===================Calculating precision and recall=============================");
	System.out.println();
	
	if ((relevantTraces instanceof Automaton) && (retrievedTraces instanceof Automaton)) {
		Pair<Double, Double> values = MetricsCalculator.calculate((Automaton)relevantTraces, "REL", (Automaton)retrievedTraces, "RET", false, false, skipsRel, skipsRet);
		return values;
	}
	return new Pair<Double, Double>(0.0, 0.0);
}
 
示例2
@Override
protected Pair<Double, Double> computeMeasureValue() {
	
	if ((relevantTraces instanceof Automaton) && (retrievedTraces instanceof Automaton)) {
		Pair<Double, Double> values = MetricsCalculator.calculate((Automaton)relevantTraces, "REL", (Automaton)retrievedTraces, "RET", true, true, 0, 0);
		return values;
	}
	return new Pair<Double, Double>(0.0, 0.0);
}
 
示例3
@Override
protected Pair<Double, Double> computeMeasureValue() {
	
	if ((relevantTraces instanceof Automaton) && (retrievedTraces instanceof Automaton)) {
		Pair<Double, Double> values = MetricsCalculator.calculate((Automaton)relevantTraces, "REL", (Automaton)retrievedTraces, "RET", true, false, 0, 0);
		return values;
	}
	return new Pair<Double, Double>(0.0, 0.0);
}
 
示例4
@Override
protected double computeMeasureValue() {
	System.out.println();
	System.out.println("===================Calculating entropy=============================");
	System.out.println();
	
	if (model instanceof Automaton) {
		double value = MetricsCalculator.calculateEntropy((Automaton)model, "model", false, false, numberOfSkips);
		return value;
	}
	return 0.0;
}
 
示例5
/**
 * Compute value of this measure.
 * 
 * @return Value of entropy for the given model. 
 * @throws Exception if limitations of this measure are not satisfied by the given models.
 */
public double computeMeasure() throws Exception {
        
	if (limitationsHold==null) this.checkLimitations();
	if (limitationsHold==null || !limitationsHold.booleanValue()) {
		throw new Exception(String.format("Limitation(s): %s of %s measure are not fulfilled", violetedLimitations, this.getClass().getName()));
	}

	HashingStrategy<String> strategy = new HashingStrategy<String>() {

		public int computeHashCode(String object) {
			return object.hashCode();
		}

		public boolean equals(String o1, String o2) {
			return o1.equals(o2);
		}
	};
	TObjectShortMap<String> activity2short = new TObjectShortCustomHashMap<String>(strategy, 10, 0.5f, (short) -1);
    
	System.out.println(String.format("Constructing automaton for retrieved model"));
	long start = System.currentTimeMillis();
	if (model instanceof NetSystem) {
		model = Utils.constructAutomatonFromNetSystem((NetSystem) model, activity2short);
	} else if (model instanceof XLog){
		model = Utils.constructAutomatonFromLog((XLog) model, activity2short);
	}
    long finish = System.currentTimeMillis();
    System.out.println(String.format("The automaton for model constructed in                       %s ms.", (finish-start)));
    System.out.println(String.format("The number of states:                                        %s", ((Automaton)model).getNumberOfStates()));
    System.out.println(String.format("The number of transitions:                                   %s", Utils.numberOfTransitions((Automaton)model)));
    	    
    start = System.nanoTime();
	this.measureValue = this.computeMeasureValue();
	this.measureComputationTime = System.nanoTime()-start;

	return this.measureValue;
}
 
示例6
@Override
protected double computeMeasureValue() {
	System.out.println();
	System.out.println("===================Calculating partial entropy=============================");
	System.out.println();
	
	if (model instanceof Automaton) {
		double value = MetricsCalculator.calculateEntropy((Automaton)model, "model", true, false, 0);
		return value;
	}
	return 0.0;
}
 
示例7
@Override
protected double computeMeasureValue() {
	System.out.println();
	System.out.println("===================Calculating partial entropy efficiently=============================");
	System.out.println();
	
	if (model instanceof Automaton) {
		double value = MetricsCalculator.calculateEntropy((Automaton)model, "model", true, true, 0);
		return value;
	}
	return 0.0;
}
 
示例8
public static ThreadSafeBitSet cacheRegex(final String field, final String regex, final FlamdexReader reader) {
    final Automaton automaton = new RegExp(regex).toAutomaton();
    final ThreadSafeBitSet ret = new ThreadSafeBitSet(reader.getNumDocs());
    if (reader.getIntFields().contains(field)) {
        cacheIntFieldRegex(field, reader, automaton, ret);
    } else if (reader.getStringFields().contains(field)) {
        cacheStringFieldRegex(field, reader, automaton, ret);
    } else {
        // No exception on unknown field because fields can be added and queries can legitimately cross boundaries
        // where the field isn't defined. Instead, just return an empty bitset.
    }
    return ret;
}
 
示例9
private static void cacheIntFieldRegex(String field, FlamdexReader reader, Automaton automaton, ThreadSafeBitSet ret) {
    try (final IntTermIterator iter = reader.getIntTermIterator(field);
         final DocIdStream dis = reader.getDocIdStream()) {
        while (iter.next()) {
            if (automaton.run(String.valueOf(iter.term()))) {
                dis.reset(iter);
                fillBitSet(dis, ret);
            }
        }
    }
}
 
示例10
private static void cacheStringFieldRegex(String field, FlamdexReader reader, Automaton automaton, ThreadSafeBitSet ret) {
    try (final StringTermIterator iter = reader.getStringTermIterator(field);
         final DocIdStream dis = reader.getDocIdStream()) {
        while (iter.next()) {
            if (automaton.run(iter.term())) {
                dis.reset(iter);
                fillBitSet(dis, ret);
            }
        }
    }
}
 
示例11
public MultiPatternAutomaton makeAutomatonWithPrefix(String prefix) {
    final List<Automaton> automata = new ArrayList<>();
    for (final String ptn: this.patterns) {
        final String prefixedPattern = prefix + ptn;
        final Automaton automaton = new RegExp(prefixedPattern).toAutomaton();
        automaton.minimize();
        automata.add(automaton);
    }
    return MultiPatternAutomaton.make(automata);
}
 
示例12
/**
 * Equivalent of Pattern.compile, but the result is only valid for pattern search.
 * The searcher will return the first occurrence of a pattern.
 *
 * This operation is costly, make sure to cache its result when performing
 * search with the same patterns against the different strings.
 *
 * @return A searcher object
 */
public MultiPatternSearcher searcher() {
    final MultiPatternAutomaton searcherAutomaton = makeAutomatonWithPrefix(".*");
    final List<Automaton> indidivualAutomatons = new ArrayList<>();
    for (final String pattern: this.patterns) {
        final Automaton automaton = new RegExp(pattern).toAutomaton();
        automaton.minimize();
        automaton.determinize();
        indidivualAutomatons.add(automaton);
    }
    return new MultiPatternSearcher(searcherAutomaton, indidivualAutomatons);
}
 
示例13
static MultiState initialState(List<Automaton> automata) {
    final State[] initialStates = new State[automata.size()];
    int c = 0;
    for (final Automaton automaton: automata) {
        initialStates[c] = automaton.getInitialState();
        c += 1;
    }
    return new MultiState(initialStates);
}
 
示例14
@Test
public void testAutomatonWithUnicode() {
    final RegExp regexp = new RegExp("([0-9]{2,4}年)?[0-9]{1,2}月[0-9]{1,2}日");
    final Automaton forwardAutomaton = regexp.toAutomaton();
    {
        final RunAutomaton runAutomaton = new RunAutomaton(forwardAutomaton);
        Assert.assertTrue(runAutomaton.run("1982年9月17日"));
        Assert.assertFalse(runAutomaton.run("1982年9月127日"));
    }
}
 
示例15
@Nonnull
public StringPattern matchesBrics(@NonNls @Nonnull final String s) {
  final String escaped = StringUtil.escapeToRegexp(s);
  if (escaped.equals(s)) {
    return equalTo(s);
  }

  StringBuilder sb = new StringBuilder(s.length()*5);
  for (int i = 0; i < s.length(); i++) {
    final char c = s.charAt(i);
    if(c == ' ') {
      sb.append("<whitespace>");
    }
    else
    //This is really stupid and inconvenient builder - it breaks any normal pattern with uppercase
    if(Character.isUpperCase(c)) {
      sb.append('[').append(Character.toUpperCase(c)).append(Character.toLowerCase(c)).append(']');
    }
    else
    {
      sb.append(c);
    }
  }
  final RegExp regExp = new RegExp(sb.toString());
  final Automaton automaton = regExp.toAutomaton(new DatatypesAutomatonProvider());
  final RunAutomaton runAutomaton = new RunAutomaton(automaton, true);

  return with(new ValuePatternCondition<String>("matchesBrics") {
    @Override
    public boolean accepts(@Nonnull String str, final ProcessingContext context) {
      if (!str.isEmpty() && (str.charAt(0) == '"' || str.charAt(0) == '\'')) str = str.substring(1);
      return runAutomaton.run(str);
    }

    @Override
    public Collection<String> getValues() {
      return Collections.singleton(s);
    }
  });
}
 
示例16
/**
 * Compute value of this measure.
 * 
 * @return Value of this measure for the given models of relevant and retrieved traces. 
 * @throws Exception if limitations of this measure are not satisfied by the given models.
 */
public Pair<Double, Double> computeMeasure() throws Exception {
        
	if (limitationsHold==null) this.checkLimitations();
	if (limitationsHold==null || !limitationsHold.booleanValue()) {
		throw new Exception(String.format("Limitation(s): %s of %s measure are not fulfilled", violetedLimitations, this.getClass().getName()));
	}

	HashingStrategy<String> strategy = new HashingStrategy<String>() {

		public int computeHashCode(String object) {
			return object.hashCode();
		}

		public boolean equals(String o1, String o2) {
			return o1.equals(o2);
		}
	};
	TObjectShortMap<String> activity2short = new TObjectShortCustomHashMap<String>(strategy, 10, 0.5f, (short) -1);
    
	System.out.println(String.format("Constructing automaton RET that encodes the retrieved model."));
	long start = System.currentTimeMillis();
	if (retrievedTraces instanceof NetSystem) {
		retrievedTraces = Utils.constructAutomatonFromNetSystem((NetSystem) retrievedTraces, activity2short);
	} else if (retrievedTraces instanceof XLog){
		retrievedTraces = Utils.constructAutomatonFromLog((XLog) retrievedTraces, activity2short);
	}
    long finish = System.currentTimeMillis();
    System.out.println(String.format("Automaton RET constructed in                                %s ms.", (finish-start)));
    System.out.println(String.format("Automaton RET has %s states and %s transitions.", ((Automaton)retrievedTraces).getNumberOfStates(), Utils.numberOfTransitions((Automaton)retrievedTraces)));
    
	System.out.println(String.format("Constructing automaton REL that encodes the relevant model."));
	start = System.currentTimeMillis();
	if (relevantTraces instanceof NetSystem) {
		relevantTraces = Utils.constructAutomatonFromNetSystem((NetSystem) relevantTraces, activity2short);
	} else if (relevantTraces instanceof XLog){
		relevantTraces = Utils.constructAutomatonFromLog((XLog) relevantTraces, activity2short);
	}
    finish = System.currentTimeMillis();
    System.out.println(String.format("Automaton REL constructed in                                %s ms.", (finish-start)));
    System.out.println(String.format("Automaton REL has %s states and %s transitions.", ((Automaton)relevantTraces).getNumberOfStates(), Utils.numberOfTransitions((Automaton)relevantTraces)));
    
    start = System.nanoTime();
	this.measureValue = this.computeMeasureValue();
	this.measureComputationTime = System.nanoTime()-start;

	return this.measureValue;
}
 
示例17
@Override
public void regexRegroup(String field, String regex, int targetGroup, int negativeGroup, int positiveGroup) throws ImhotepOutOfMemoryException {
    if (getNumGroups() > 2) {
        throw new IllegalStateException("regexRegroup should be applied as a filter when you have only one group");
    }
    if (targetGroup == 0) {
        clearZeroDocBitsets();
    }
    docIdToGroup =
            GroupLookupFactory.resize(docIdToGroup,
                    Math.max(negativeGroup, positiveGroup),
                    memory);

    final FastBitSetPooler bitSetPooler = new ImhotepBitSetPooler(memory);
    final FastBitSet docRemapped;
    try {
        docRemapped = bitSetPooler.create(numDocs);
    } catch (FlamdexOutOfMemoryException e) {
        throw new ImhotepOutOfMemoryException(e);
    }
    try {
        try (
            final StringTermIterator iter = flamdexReader.getStringTermIterator(field);
            final DocIdStream docIdStream = flamdexReader.getDocIdStream()
        ) {
            final Automaton automaton = new RegExp(regex).toAutomaton();

            while (iter.next()) {
                final String term = iter.term();

                if (automaton.run(term)) {
                    docIdStream.reset(iter);
                    remapPositiveDocs(docIdStream, docRemapped, targetGroup, positiveGroup);
                }
            }
        }
        remapNegativeDocs(docRemapped, targetGroup, negativeGroup);
    } finally {
        bitSetPooler.release(docRemapped.memoryUsage());
    }

    finalizeRegroup();
}
 
示例18
public CompiledAutomaton( String rhsPattern ) {
    RegExp regexpr = new dk.brics.automaton.RegExp(rhsPattern, RegExp.NONE);
    Automaton auto = regexpr.toAutomaton();
    this.runauto = new RunAutomaton(auto, true);
}
 
示例19
static MultiPatternAutomaton make(final List<Automaton> automata) {
    for (final Automaton automaton: automata) {
        automaton.determinize();
    }

    final char[] points = DkBricsAutomatonHelper.pointsUnion(automata);

    // states that are still to be visited
    final Queue<MultiState> statesToVisits = new LinkedList<>();
    final MultiState initialState = initialState(automata);
    statesToVisits.add(initialState);

    final List<int[]> transitionList = new ArrayList<>();

    final Map<MultiState, Integer> multiStateIndex = new HashMap<>();
    multiStateIndex.put(initialState, 0);

    while (!statesToVisits.isEmpty()) {
        final MultiState visitingState = statesToVisits.remove();
        assert multiStateIndex.containsKey(visitingState);
        final int[] curTransitions = new int[points.length];
        for (int c=0; c<points.length; c++) {
            final char point = points[c];
            final MultiState destState = visitingState.step(point);
            if (destState.isNull()) {
                curTransitions[c] = -1;
            }
            else {
                final int destStateId;
                if (!multiStateIndex.containsKey(destState)) {
                    statesToVisits.add(destState);
                    destStateId = multiStateIndex.size();
                    multiStateIndex.put(destState, destStateId);
                }
                else {
                    destStateId = multiStateIndex.get(destState);
                }
                curTransitions[c] = destStateId;
            }
        }
        transitionList.add(curTransitions);
    }

    assert transitionList.size() == multiStateIndex.size();
    final int nbStates = multiStateIndex.size();

    final int[] transitions = new int[nbStates * points.length];
    for (int stateId=0; stateId<nbStates; stateId++) {
        for (int pointId = 0; pointId<points.length; pointId++) {
            transitions[stateId * points.length + pointId] = transitionList.get(stateId)[pointId];
        }
    }

    final int[][] acceptValues = new int[nbStates][];
    for (final Map.Entry<MultiState, Integer> entry: multiStateIndex.entrySet()) {
        final Integer stateId = entry.getValue();
        final MultiState multiState = entry.getKey();
        acceptValues[stateId] = multiState.toAcceptValues();
    }

    return new MultiPatternAutomaton(acceptValues, transitions, points, automata.size());
}