public static Phrase Parse(IFuzzyState state, Phrase phrase) { Match regexMatch = TimeVariableTemporalPrimitiveToken.RegexMatch.Match(phrase.Text); if (regexMatch.Success == true) { int? hours = regexMatch.Groups["hours"].Value.Length > 0 ? int.Parse(regexMatch.Groups["hours"].Value) : 0; int? minutes = regexMatch.Groups["minutes"].Value.Length > 0 ? int.Parse(regexMatch.Groups["minutes"].Value) : 0; int? seconds = regexMatch.Groups["seconds"].Value.Length > 0 ? int.Parse(regexMatch.Groups["seconds"].Value) : 0; if (String.Compare(regexMatch.Groups["meridiem"].Value, "pm", StringComparison.OrdinalIgnoreCase) == 0 && hours < 12) { hours += 12; } else if (String.Compare(regexMatch.Groups["meridiem"].Value, "am", StringComparison.OrdinalIgnoreCase) == 0) { if (hours == 12) { hours = 0; } } hours %= 24; phrase.Add(new TimeVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Definitive, Hour = (regexMatch.Groups["hours"].Value.Length > 0 ? hours : null), Minute = (regexMatch.Groups["minutes"].Value.Length > 0 ? minutes : null), Second = (regexMatch.Groups["seconds"].Value.Length > 0 ? seconds : null) }, Text = phrase.Text, Similarity = 100.0F }); } return phrase; }
public static Phrase ReduceDividendForwardSlashDivisor(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken dividend = (FloatNumericPrimitiveToken) parameters["dividend"]; ForwardSlashPunctuationSyntaxToken forwardSlash = (ForwardSlashPunctuationSyntaxToken) parameters["forwardSlash"]; FloatNumericPrimitiveToken divisor = (FloatNumericPrimitiveToken) parameters["divisor"]; Phrase phrase = null; if (divisor.ToFloat() != 0.0F) { phrase = new Phrase() { new FloatNumericPrimitiveToken() { Value = dividend.ToFloat() / divisor.ToFloat(), Text = String.Format("{0} {1} {2}", dividend.Text, forwardSlash.Text, divisor.Text), Similarity = (dividend.Similarity + forwardSlash.Similarity + divisor.Similarity) / 3.0F } }; } else { // TODO: Create new token for exceptions phrase = new Phrase() { new FloatNumericPrimitiveToken() { Value = 0.0F, Text = String.Format("{0} {1} {2}", dividend.Text, forwardSlash.Text, divisor.Text), Similarity = (dividend.Similarity + forwardSlash.Similarity + divisor.Similarity) / 3.0F } }; } return phrase; }
public static Phrase Parse(IFuzzyState state, Phrase phrase) { if (phrase.Text.Length > 0 && phrase.Text.First() == '"' && phrase.Text.Last() == '"' && phrase.Refactoring == false) { phrase.Add(new StringPrimitiveToken() { Text = phrase.Text.Trim('"'), Similarity = 80, Value = phrase.Text.Trim('"') }); } return phrase; }
public static Phrase ReduceDateDate(IFuzzyState state, Dictionary<String, Token> parameters) { DateVariableTemporalPrimitiveToken dateA = (DateVariableTemporalPrimitiveToken) parameters["dateA"]; DateVariableTemporalPrimitiveToken dateB = (DateVariableTemporalPrimitiveToken) parameters["dateB"]; return new Phrase() { new DateVariableTemporalPrimitiveToken() { Pattern = dateA.Pattern + dateB.Pattern, Text = String.Format("{0} {1}", dateA.Text, dateB.Text), Similarity = (dateA.Similarity + dateB.Similarity) / 2.0F } }; }
public static Phrase ReduceNumberNumber(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken addend1 = (FloatNumericPrimitiveToken) parameters["addend1"]; FloatNumericPrimitiveToken addend2 = (FloatNumericPrimitiveToken) parameters["addend2"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = addend1.ToFloat() + addend2.ToFloat(), Text = String.Format("{0} {1}", addend1.Text, addend2.Text), Similarity = (addend1.Similarity + addend2.Similarity) / 2.0F } }; }
public static Phrase CombineThingThing(IFuzzyState state, Dictionary<String, Token> parameters) { ThingObjectToken thing1 = (ThingObjectToken)parameters["thing1"]; ThingObjectToken thing2 = (ThingObjectToken)parameters["thing2"]; return new Phrase() { new ThingObjectToken() { Reference = thing1.Reference.Union(thing2.Reference), Text = String.Format("{0} {1}", thing1.Text, thing2.Text), Similarity = (thing1.Similarity + thing2.Similarity) / 2.0F } }; }
public new static Phrase Parse(IFuzzyState state, Phrase phrase) { List<SelfReflectionThingObjectToken> createdTokens = null; TokenReflection.CreateDescendants(state, phrase, out createdTokens); if (createdTokens != null && createdTokens.Count > 0) { foreach (SelfReflectionThingObjectToken self in createdTokens) { state.ParseSelfReflectionThing(state, self); } } return phrase; }
public static Phrase ReduceMultiplierMultiplicand(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken multiplier = (FloatNumericPrimitiveToken) parameters["multiplier"]; MultiplicandCardinalNumericPrimitiveToken multiplicand = (MultiplicandCardinalNumericPrimitiveToken) parameters["multiplicand"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = multiplier.ToFloat() * multiplicand.ToFloat(), Text = String.Format("{0} {1}", multiplier.Text, multiplicand.Text), Similarity = (multiplier.Similarity + multiplicand.Similarity) / 2.0F } }; }
public static Phrase ReduceTimeTime(IFuzzyState state, Dictionary<String, Token> parameters) { TimeVariableTemporalPrimitiveToken timeA = (TimeVariableTemporalPrimitiveToken) parameters["timeA"]; TimeVariableTemporalPrimitiveToken timeB = (TimeVariableTemporalPrimitiveToken) parameters["timeB"]; return new Phrase() { new TimeVariableTemporalPrimitiveToken() { Pattern = timeA.Pattern + timeB.Pattern, Text = String.Format("{0} {1}", timeA.Text, timeB.Text), Similarity = (timeA.Similarity + timeB.Similarity) / 2.0F } }; }
public static Phrase ReduceNumberPlusNumber(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken addend1 = (FloatNumericPrimitiveToken) parameters["addend1"]; PlusTypographySyntaxToken plus = (PlusTypographySyntaxToken) parameters["plus"]; FloatNumericPrimitiveToken addend2 = (FloatNumericPrimitiveToken) parameters["addend2"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = addend1.ToFloat() + addend2.ToFloat(), Text = String.Format("{0} {1} {2}", addend1.Text, plus.Text, addend2.Text), Similarity = (addend1.Similarity + plus.Similarity + addend2.Similarity) / 3.0F } }; }
public static Phrase ReduceOpenParenthesesNumberClosedParentheses(IFuzzyState state, Dictionary<String, Token> parameters) { OpenParenthesesPunctuationSyntaxToken open = (OpenParenthesesPunctuationSyntaxToken) parameters["open"]; FloatNumericPrimitiveToken number = (FloatNumericPrimitiveToken) parameters["number"]; ClosedParenthesesPunctuationSyntaxToken closed = (ClosedParenthesesPunctuationSyntaxToken) parameters["closed"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = number.ToFloat(), Text = String.Format("{0} {1} {2}", open.Text, number.Text, closed.Text), Similarity = (open.Similarity + number.Similarity + closed.Similarity) / 3.0F } }; }
public static Phrase ReduceMultiplierAsteriskMultiplicand(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken multiplier = (FloatNumericPrimitiveToken) parameters["multiplier"]; AsteriskTypographySyntaxToken asterisk = (AsteriskTypographySyntaxToken) parameters["asterisk"]; FloatNumericPrimitiveToken multiplicand = (FloatNumericPrimitiveToken) parameters["multiplicand"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = multiplier.ToFloat() * multiplicand.ToFloat(), Text = String.Format("{0} {1} {2}", multiplier.Text, asterisk.Text, multiplicand.Text), Similarity = (multiplier.Similarity + asterisk.Similarity + multiplicand.Similarity) / 3.0F } }; }
public static Phrase CombineThingAndThing(IFuzzyState state, Dictionary<String, Token> parameters) { ThingObjectToken thing1 = (ThingObjectToken)parameters["thing1"]; AndLogicalOperatorToken and = (AndLogicalOperatorToken)parameters["and"]; ThingObjectToken thing2 = (ThingObjectToken)parameters["thing2"]; return new Phrase() { new ThingObjectToken() { Reference = thing1.Reference.Union(thing2.Reference), Text = String.Format("{0} {1} {2}", thing1.Text, and.Text, thing2.Text), Similarity = (thing1.Similarity + and.Similarity + thing2.Similarity) / 3.0F } }; }
public static Phrase ReduceMultiplierCaretMultiplicand(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken multiplier = (FloatNumericPrimitiveToken) parameters["multiplier"]; CaretTypographySyntaxToken caret = (CaretTypographySyntaxToken) parameters["caret"]; FloatNumericPrimitiveToken multiplicand = (FloatNumericPrimitiveToken) parameters["multiplicand"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = (float) Math.Pow(multiplier.ToFloat(), multiplicand.ToFloat()), Text = String.Format("{0} {1} {2}", multiplier.Text, caret.Text, multiplicand.Text), Similarity = (multiplier.Similarity + caret.Similarity + multiplicand.Similarity) / 3.0F } }; }
public static Phrase ReduceNumberHyphenNumber(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken minuend = (FloatNumericPrimitiveToken) parameters["minuend"]; HyphenPunctuationSyntaxToken hyphen = (HyphenPunctuationSyntaxToken) parameters["hyphen"]; FloatNumericPrimitiveToken subtrahend = (FloatNumericPrimitiveToken) parameters["subtrahend"]; return new Phrase() { new FloatNumericPrimitiveToken() { Value = minuend.ToFloat() - subtrahend.ToFloat(), Text = String.Format("{0} {1} {2}", minuend.Text, hyphen.Text, subtrahend.Text), Similarity = (minuend.Similarity + hyphen.Similarity + subtrahend.Similarity) / 3.0F } }; }
public static Phrase ReduceOnDate(IFuzzyState state, Dictionary<String, Token> parameters) { OnPrepositionsSyntaxToken on = (OnPrepositionsSyntaxToken) parameters["on"]; DateVariableTemporalPrimitiveToken date = (DateVariableTemporalPrimitiveToken) parameters["date"]; FuzzyDateTimePattern pattern = date.Pattern; pattern.Modifier = TimeModifier.Delay; return new Phrase() { new DateVariableTemporalPrimitiveToken() { Pattern = pattern, Text = String.Format("{0} {1}", on.Text, date.Text), Similarity = (on.Similarity + date.Similarity) / 2.0F } }; }
public static Phrase ReduceOrdinalMonths(IFuzzyState state, Dictionary<String, Token> parameters) { OrdinalNumericPrimitiveToken ordinal = (OrdinalNumericPrimitiveToken) parameters["ordinal"]; MonthMonthsVariableTemporalPrimitiveToken months = (MonthMonthsVariableTemporalPrimitiveToken) parameters["months"]; FuzzyDateTimePattern pattern = months.Pattern; pattern.Day = (int) ordinal.ToFloat().ConvertTo(typeof (int)); return new Phrase() { new MonthVariableTemporalPrimitiveToken() { Pattern = pattern, Text = String.Format("{0} {1}", ordinal.Text, months.Text), Similarity = (months.Similarity + ordinal.Similarity) / 2.0F } }; }
public static Phrase ReduceNextMonths(IFuzzyState state, Dictionary<String, Token> parameters) { NextAdjectiveSyntaxToken next = (NextAdjectiveSyntaxToken) parameters["next"]; MonthsUnitTemporalPrimitiveToken months = (MonthsUnitTemporalPrimitiveToken) parameters["months"]; return new Phrase() { new MonthVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, Month = 1 }, Text = String.Format("{0} {1}", next.Text, months.Text), Similarity = (months.Similarity + next.Similarity) / 2.0F } }; }
public static Phrase ReduceNumberHours(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken number = (FloatNumericPrimitiveToken) parameters["number"]; HoursUnitTemporalPrimitiveToken hours = (HoursUnitTemporalPrimitiveToken) parameters["hours"]; return new Phrase() { new HourVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, Hour = (int) number.ToFloat().ConvertTo(typeof (int)) }, Text = String.Format("{0} {1}", number.Text, hours.Text), Similarity = (hours.Similarity + number.Similarity) / 2.0F } }; }
public static Phrase ReduceArticleHours(IFuzzyState state, Dictionary<String, Token> parameters) { IndefiniteArticlesSyntaxToken article = (IndefiniteArticlesSyntaxToken) parameters["article"]; HoursUnitTemporalPrimitiveToken hours = (HoursUnitTemporalPrimitiveToken) parameters["hours"]; return new Phrase() { new HourVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, Hour = 1 }, Text = String.Format("{0} {1}", article.Text, hours.Text), Similarity = (hours.Similarity + article.Similarity) / 2.0F } }; }
public static Phrase ReduceNumberMonths(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken number = (FloatNumericPrimitiveToken) parameters["number"]; MonthsUnitTemporalPrimitiveToken months = (MonthsUnitTemporalPrimitiveToken) parameters["months"]; return new Phrase() { new MonthVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, // Rule = TimeType.Definitive, Month = (int) number.ToFloat().ConvertTo(typeof (int)) }, Text = String.Format("{0} {1}", number.Text, months.Text), Similarity = (months.Similarity + number.Similarity) / 2.0F } }; }
public static Phrase ReduceArticleWeeks(IFuzzyState state, Dictionary<String, Token> parameters) { IndefiniteArticlesSyntaxToken article = (IndefiniteArticlesSyntaxToken) parameters["article"]; WeeksUnitTemporalPrimitiveToken weeks = (WeeksUnitTemporalPrimitiveToken) parameters["weeks"]; return new Phrase() { new DayVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, Day = 7 }, Text = String.Format("{0} {1}", article.Text, weeks.Text), Similarity = (weeks.Similarity + article.Similarity) / 2.0F } }; }
public static Phrase ReduceEveryHours(IFuzzyState state, Dictionary<String, Token> parameters) { EveryAdjectiveSyntaxToken every = (EveryAdjectiveSyntaxToken) parameters["every"]; HoursUnitTemporalPrimitiveToken hours = (HoursUnitTemporalPrimitiveToken) parameters["hours"]; return new Phrase() { new HourVariableTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, Modifier = TimeModifier.Interval, Hour = 1 }, Text = String.Format("{0} {1}", every.Text, hours.Text), Similarity = (hours.Similarity + every.Similarity) / 2.0F } }; }
public static Phrase ReduceEverySeconds(IFuzzyState state, Dictionary<String, Token> parameters) { EveryAdjectiveSyntaxToken every = (EveryAdjectiveSyntaxToken) parameters["every"]; SecondsUnitTemporalPrimitiveToken seconds = (SecondsUnitTemporalPrimitiveToken) parameters["seconds"]; return new Phrase() { new SecondsUnitTemporalPrimitiveToken() { Pattern = new FuzzyDateTimePattern() { Rule = TimeType.Relative, Modifier = TimeModifier.Interval, Second = 1 }, Text = String.Format("{0} {1}", every.Text, seconds.Text), Similarity = (seconds.Similarity + every.Similarity) / 2.0F } }; }
public static Phrase ReduceDateTimeAdditionDateTime(IFuzzyState state, Dictionary<String, Token> parameters) { DateTimeTemporalPrimitiveToken dateTimeA = (DateTimeTemporalPrimitiveToken) parameters["dateTimeA"]; AdditionThirdOrderArithmeticOperatorToken addition = (AdditionThirdOrderArithmeticOperatorToken) parameters["addition"]; DateTimeTemporalPrimitiveToken dateTimeB = (DateTimeTemporalPrimitiveToken) parameters["dateTimeB"]; AndLogicalOperatorToken and = new AndLogicalOperatorToken() { Text = addition.Text, Similarity = addition.Similarity }; return DateTimeTemporalPrimitiveToken.ReduceDateTimeAndDateTime(state, new Dictionary<String, Token>() { {"dateTimeA", dateTimeA}, {"and", and}, {"dateTimeB", dateTimeB} }); }
public static Phrase CombineThingPropertyEqualityNumber(IFuzzyState state, Dictionary<String, Token> parameters) { ThingObjectToken thing = (ThingObjectToken)parameters["thing"]; NumericPropertyObjectToken property = (NumericPropertyObjectToken)parameters["property"]; EqualityLogicalOperatorToken equality = (EqualityLogicalOperatorToken)parameters["equality"]; FloatNumericPrimitiveToken number = (FloatNumericPrimitiveToken)parameters["number"]; property.Reference.RemoveAll(thing.Reference, equality, number); return new Phrase() { new ThingObjectToken() { Reference = thing.Reference, Text = String.Format("{0} {1} {2} {3}", thing.Text, property.Text, equality.Text, number.Text), Similarity = (thing.Similarity + property.Similarity + equality.Similarity + number.Similarity) / 4.0F } }; }
public static Phrase ReduceMultiplierMultiplyMultiplicand(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken multiplier = (FloatNumericPrimitiveToken) parameters["multiplier"]; MultiplicationSecondOrderArithmeticToken multiply = (MultiplicationSecondOrderArithmeticToken) parameters["multiply"]; FloatNumericPrimitiveToken multiplicand = (FloatNumericPrimitiveToken) parameters["multiplicand"]; AsteriskTypographySyntaxToken asterisk = new AsteriskTypographySyntaxToken() { Text = multiply.Text, Similarity = multiply.Similarity }; return MultiplicationSecondOrderArithmeticToken.ReduceMultiplierAsteriskMultiplicand(state, new Dictionary<String, Token>() { {"multiplier", multiplier}, {"asterisk", asterisk}, {"multiplicand", multiplicand} }); }
public static Phrase ReduceDividendDivideDivisor(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken dividend = (FloatNumericPrimitiveToken) parameters["dividend"]; DivisionSecondOrderArithmeticToken divide = (DivisionSecondOrderArithmeticToken) parameters["divide"]; FloatNumericPrimitiveToken divisor = (FloatNumericPrimitiveToken) parameters["divisor"]; ForwardSlashPunctuationSyntaxToken forwardSlash = new ForwardSlashPunctuationSyntaxToken() { Text = divide.Text, Similarity = divide.Similarity }; return DivisionSecondOrderArithmeticToken.ReduceDividendForwardSlashDivisor(state, new Dictionary<String, Token>() { {"dividend", dividend}, {"forwardSlash", forwardSlash}, {"divisor", divisor} }); }
public static Phrase ReduceNumberSubtractionNumber(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken minuend = (FloatNumericPrimitiveToken) parameters["minuend"]; SubtractionThirdOrderArithmeticOperatorToken subtraction = (SubtractionThirdOrderArithmeticOperatorToken) parameters["subtraction"]; FloatNumericPrimitiveToken subtrahend = (FloatNumericPrimitiveToken) parameters["subtrahend"]; HyphenPunctuationSyntaxToken hyphen = new HyphenPunctuationSyntaxToken() { Text = subtraction.Text, Similarity = subtraction.Similarity }; return SubtractionThirdOrderArithmeticOperatorToken.ReduceNumberHyphenNumber(state, new Dictionary<String, Token>() { {"minuend", minuend}, {"hyphen", hyphen}, {"subtrahend", subtrahend} }); }
public static Phrase ReduceNumberAdditionNumber(IFuzzyState state, Dictionary<String, Token> parameters) { FloatNumericPrimitiveToken addend1 = (FloatNumericPrimitiveToken) parameters["addend1"]; AdditionThirdOrderArithmeticOperatorToken addition = (AdditionThirdOrderArithmeticOperatorToken) parameters["addition"]; FloatNumericPrimitiveToken addend2 = (FloatNumericPrimitiveToken) parameters["addend2"]; PlusTypographySyntaxToken plus = new PlusTypographySyntaxToken() { Text = addition.Text, Similarity = addition.Similarity }; return AdditionThirdOrderArithmeticOperatorToken.ReduceNumberPlusNumber(state, new Dictionary<String, Token>() { {"addend1", addend1}, {"plus", plus}, {"addend2", addend2} }); }