internal override IEnumerable <string> GenerateFeatures(BeamNode node) { var targetActivationEvent = BeamGenerator.GetInstanceActivationRequest(PropertySet.Subject, node); var sourceActivationEvent = BeamGenerator.GetInstanceActivationRequest(PropertySet.Value, node); if (targetActivationEvent == null || sourceActivationEvent == null) { yield break; } var ngramLimitCount = 2; var targetSufixes = new InputPhraseEvent[0];//BeamGenerator.GetSufixPhrases(targetActivationEvent.ActivationPhrase, ngramLimitCount, node); var targetPrefixes = BeamGenerator.GetPrefixPhrases(targetActivationEvent.ActivationPhrases.FirstOrDefault(), ngramLimitCount, node); var featureId = "* --" + PropertySet.Property.Name + "--> $1"; var targetId = "$1"; for (var i = 0; i < ngramLimitCount; ++i) { if (targetSufixes.Length > i) { yield return(targetId + " " + ngramFeature(targetSufixes, i) + " | " + featureId); } if (targetPrefixes.Length > i) { yield return(ngramFeature(targetPrefixes, i) + " " + targetId + " | " + featureId); } } }