public bool Satisfy(VerbBasedSentence verbBasedSentence, VerbInSentence verbInSentence) { bool satisfy = false; if (HasPrepositionalObject1) { satisfy = false; foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if ((dependencyBasedToken.CPOSTag == "P" || dependencyBasedToken.CPOSTag == "POSTP") && dependencyBasedToken.DependencyRelation != "VPRT") { if (dependencyBasedToken.WordForm == PrepositionalObjectPreposition1) { satisfy = true; break; } } } if (!satisfy) return false; } if (HasPrepositionalObject2) { satisfy = false; foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if ((dependencyBasedToken.CPOSTag == "P" || dependencyBasedToken.CPOSTag == "POSTP") && dependencyBasedToken.DependencyRelation != "VPRT") { if (dependencyBasedToken.WordForm == PrepositionalObjectPreposition2) { satisfy = true; break; } } } if (!satisfy) return false; } if (HasObject && HasRa) { satisfy = false; foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if (dependencyBasedToken.WordForm == "را" && dependencyBasedToken.Position < verbInSentence.LightVerbIndex) { satisfy = true; break; } } if (!satisfy) return false; } if (HasBandMotammemi) { satisfy = false; foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if (dependencyBasedToken.CPOSTag == "V" && dependencyBasedToken.Position > verbInSentence.LightVerbIndex) { if (HasBandMotemmemiAgreement) { if (dependencyBasedToken.MorphoSyntacticFeats.Person == verbBasedSentence.SentenceTokens[verbInSentence.LightVerbIndex].MorphoSyntacticFeats. Person) { if (HasBandMotemmemiEltezami) { if (dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.HAAL_ELTEZAMI || dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.GOZASHTEH_ESTEMRAARI) { satisfy = true; break; } } } } else { if (HasBandMotemmemiEltezami) { if (dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.HAAL_ELTEZAMI || dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.GOZASHTEH_ESTEMRAARI) { satisfy = true; break; } } else { satisfy = true; break; } } } } if (!satisfy) return false; } return true; }
private static Article generateNewArticle(Article currentArticle, string verbDicPath) { Article newArticle = new Article(); Sentence currentSentence = null; Sentence newSentence = null; String[] currentLexemes = null; String[] currentPOSTags = null; String[] currentLemmas = null; MorphoSyntacticFeatures[] currentFeatures = null; //generating new Sentence for (int sentence_index = 0; sentence_index < currentArticle.getSentences().Length; sentence_index++) //for each sentence in this article. { //initialize the new sentence newSentence = new Sentence(); //load the current sentence currentSentence = currentArticle.getSentence(sentence_index); //load info about that sentence currentLexemes = currentSentence.getLexemes(); currentPOSTags = currentSentence.getPOSTags(); currentLemmas = currentSentence.getLemmas(); currentFeatures = currentSentence.getFeatures(); VerbBasedSentence currentSentenceVBS = SentenceAnalyzer.MakeVerbBasedSentence(currentLexemes, currentPOSTags, currentLemmas, currentFeatures, verbDicPath); List <DependencyBasedToken> list = currentSentenceVBS.SentenceTokens; Random randomNumberGenerator = new Random(); Dictionary <VerbInSentence, BaseStructure> pickedBasedStructures = new Dictionary <VerbInSentence, BaseStructure>(); //for each verb in sentence foreach (var currentVerbInSentence in currentSentenceVBS.VerbsInSentence) { bool noSatisfiedBaseStructureExists = false; List <BaseStructure> satisfiedBaseStructuresOfCurrentVerb = new List <BaseStructure>(); //special string representation of the verb String currentVerbString = ValencyDicManager.GetVerbString(ref currentSentenceVBS, currentVerbInSentence); if (ValencyDicManager.BaseStrucDic.ContainsKey(currentVerbString)) { List <BaseStructure> baseStructuresForTheCurrentVerb = ValencyDicManager.BaseStrucDic[currentVerbString]; foreach (var currentBaseStructure in baseStructuresForTheCurrentVerb) { if (currentBaseStructure.Satisfy(currentSentenceVBS, currentVerbInSentence)) { satisfiedBaseStructuresOfCurrentVerb.Add(currentBaseStructure); } } } if (satisfiedBaseStructuresOfCurrentVerb.Count == 0) { noSatisfiedBaseStructureExists = true; } List <BaseStructure> candidateBaseStructuresOfCurrentVerb; #region select one base structure of this verb bool finishedChoosingPickedBaseStructure = false; //no need to choose because nothing is there if (noSatisfiedBaseStructureExists) { finishedChoosingPickedBaseStructure = true; } #region HasPrepositionalObject2 candidateBaseStructuresOfCurrentVerb = new List <BaseStructure>(); if (!finishedChoosingPickedBaseStructure) { foreach (var currentSatisfiedBaseStructure in satisfiedBaseStructuresOfCurrentVerb) { if (currentSatisfiedBaseStructure.HasPrepositionalObject2) { candidateBaseStructuresOfCurrentVerb.Add(currentSatisfiedBaseStructure); } } if (candidateBaseStructuresOfCurrentVerb.Count > 1) { int randomIndex = randomNumberGenerator.Next(0, candidateBaseStructuresOfCurrentVerb.Count); pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[randomIndex]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 1) { pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[0]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 0) { finishedChoosingPickedBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region HasPrepositionalObject1 candidateBaseStructuresOfCurrentVerb = new List <BaseStructure>(); if (!finishedChoosingPickedBaseStructure) { foreach (var currentSatisfiedBaseStructure in satisfiedBaseStructuresOfCurrentVerb) { if (currentSatisfiedBaseStructure.HasPrepositionalObject1) { candidateBaseStructuresOfCurrentVerb.Add(currentSatisfiedBaseStructure); } } if (candidateBaseStructuresOfCurrentVerb.Count > 1) { int randomIndex = randomNumberGenerator.Next(0, candidateBaseStructuresOfCurrentVerb.Count); pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[randomIndex]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 1) { pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[0]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 0) { finishedChoosingPickedBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region HasRa candidateBaseStructuresOfCurrentVerb = new List <BaseStructure>(); if (!finishedChoosingPickedBaseStructure) { foreach (var currentSatisfiedBaseStructure in satisfiedBaseStructuresOfCurrentVerb) { if (currentSatisfiedBaseStructure.HasRa) { candidateBaseStructuresOfCurrentVerb.Add(currentSatisfiedBaseStructure); } } if (candidateBaseStructuresOfCurrentVerb.Count > 1) { int randomIndex = randomNumberGenerator.Next(0, candidateBaseStructuresOfCurrentVerb.Count); pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[randomIndex]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 1) { pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[0]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 0) { finishedChoosingPickedBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region HasBandMotammemi candidateBaseStructuresOfCurrentVerb = new List <BaseStructure>(); if (!finishedChoosingPickedBaseStructure) { foreach (var currentSatisfiedBaseStructure in satisfiedBaseStructuresOfCurrentVerb) { if (currentSatisfiedBaseStructure.HasBandMotammemi || currentSatisfiedBaseStructure.HasBandMotemmemiAgreement || currentSatisfiedBaseStructure.HasBandMotemmemiEltezami) { candidateBaseStructuresOfCurrentVerb.Add(currentSatisfiedBaseStructure); } } if (candidateBaseStructuresOfCurrentVerb.Count > 1) { int randomIndex = randomNumberGenerator.Next(0, candidateBaseStructuresOfCurrentVerb.Count); pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[randomIndex]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 1) { pickedBasedStructures.Add(currentVerbInSentence, candidateBaseStructuresOfCurrentVerb[0]); finishedChoosingPickedBaseStructure = true; } else if (candidateBaseStructuresOfCurrentVerb.Count == 0) { finishedChoosingPickedBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region Choose Randomly if (!finishedChoosingPickedBaseStructure) { int randomNumberIndex = randomNumberGenerator.Next(0, satisfiedBaseStructuresOfCurrentVerb.Count); pickedBasedStructures.Add(currentVerbInSentence, satisfiedBaseStructuresOfCurrentVerb[randomNumberIndex]); finishedChoosingPickedBaseStructure = true; } #endregion #endregion } #region select one base structure for the whole sentence from pickedBaseStructures bool finishedChoosingBaseStructure = false; bool nothingPicked = false; //don't choose base structure. if (pickedBasedStructures.Count == 0) { finishedChoosingBaseStructure = true; nothingPicked = true; } List <KeyValuePair <VerbInSentence, BaseStructure> > candidatesOfCurrentSentence; KeyValuePair <VerbInSentence, BaseStructure> SelectedKVP = new KeyValuePair <VerbInSentence, BaseStructure>(); #region choose HasPrepositionalObject2 if (!finishedChoosingBaseStructure) { candidatesOfCurrentSentence = new List <KeyValuePair <VerbInSentence, BaseStructure> >(); foreach (var currentKeyValuePair in pickedBasedStructures) { if (currentKeyValuePair.Value.HasPrepositionalObject2) { candidatesOfCurrentSentence.Add(currentKeyValuePair); } } if (candidatesOfCurrentSentence.Count > 1) { //select the one which is at the end of the sentence int maxLightVerbIndex = 0; foreach (var currentKeyValuePair in candidatesOfCurrentSentence) { if (currentKeyValuePair.Key.LightVerbIndex >= maxLightVerbIndex) { maxLightVerbIndex = currentKeyValuePair.Key.LightVerbIndex; SelectedKVP = currentKeyValuePair; } } finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 1) { SelectedKVP = candidatesOfCurrentSentence[0]; finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 0) { finishedChoosingBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region choose HasPrepositionalObject1 if (!finishedChoosingBaseStructure) { candidatesOfCurrentSentence = new List <KeyValuePair <VerbInSentence, BaseStructure> >(); foreach (var currentKeyValuePair in pickedBasedStructures) { if (currentKeyValuePair.Value.HasPrepositionalObject1) { candidatesOfCurrentSentence.Add(currentKeyValuePair); } } if (candidatesOfCurrentSentence.Count > 1) { //select the one which is at the end of the sentence int maxLightVerbIndex = 0; foreach (var currentKeyValuePair in candidatesOfCurrentSentence) { if (currentKeyValuePair.Key.LightVerbIndex >= maxLightVerbIndex) { maxLightVerbIndex = currentKeyValuePair.Key.LightVerbIndex; SelectedKVP = currentKeyValuePair; } } finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 1) { SelectedKVP = candidatesOfCurrentSentence[0]; finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 0) { finishedChoosingBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region choose HasRa if (!finishedChoosingBaseStructure) { candidatesOfCurrentSentence = new List <KeyValuePair <VerbInSentence, BaseStructure> >(); foreach (var currentKeyValuePair in pickedBasedStructures) { if (currentKeyValuePair.Value.HasRa) { candidatesOfCurrentSentence.Add(currentKeyValuePair); } } if (candidatesOfCurrentSentence.Count > 1) { //select the one which is at the end of the sentence int maxLightVerbIndex = 0; foreach (var currentKeyValuePair in candidatesOfCurrentSentence) { if (currentKeyValuePair.Key.LightVerbIndex >= maxLightVerbIndex) { maxLightVerbIndex = currentKeyValuePair.Key.LightVerbIndex; SelectedKVP = currentKeyValuePair; } } finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 1) { SelectedKVP = candidatesOfCurrentSentence[0]; finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 0) { finishedChoosingBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region choose HasBandMotammemi if (!finishedChoosingBaseStructure) { candidatesOfCurrentSentence = new List <KeyValuePair <VerbInSentence, BaseStructure> >(); foreach (var currentKeyValuePair in pickedBasedStructures) { if (currentKeyValuePair.Value.HasBandMotammemi || currentKeyValuePair.Value.HasBandMotemmemiAgreement || currentKeyValuePair.Value.HasBandMotemmemiEltezami) { candidatesOfCurrentSentence.Add(currentKeyValuePair); } } if (candidatesOfCurrentSentence.Count > 1) { //select the one which is at the end of the sentence int maxLightVerbIndex = 0; foreach (var currentKeyValuePair in candidatesOfCurrentSentence) { if (currentKeyValuePair.Key.LightVerbIndex >= maxLightVerbIndex) { maxLightVerbIndex = currentKeyValuePair.Key.LightVerbIndex; SelectedKVP = currentKeyValuePair; } } finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 1) { SelectedKVP = candidatesOfCurrentSentence[0]; finishedChoosingBaseStructure = true; } else if (candidatesOfCurrentSentence.Count == 0) { finishedChoosingBaseStructure = false; } else { throw new Exception("Error in picking BaseStructures for Verbs"); } } #endregion #region choose the last verb if (!finishedChoosingBaseStructure) { int maxLightVerbIndex = 0; foreach (var currentKeyValuePair in pickedBasedStructures) { if (currentKeyValuePair.Key.LightVerbIndex >= maxLightVerbIndex) { SelectedKVP = currentKeyValuePair; maxLightVerbIndex = currentKeyValuePair.Key.LightVerbIndex; } } finishedChoosingBaseStructure = true; } #endregion #endregion //fitting one base structure if (nothingPicked) { //nothing really picked. if (currentSentenceVBS.VerbsInSentence.Count == 0) { //no verb exists in the sentense //do nothing } else { VerbInSentence lastVerbInTheSentence = currentSentenceVBS.VerbsInSentence.Last(); BaseStructure emptyBaseStructure = new BaseStructure(); SelectedKVP = new KeyValuePair <VerbInSentence, BaseStructure>(lastVerbInTheSentence, emptyBaseStructure); nothingPicked = false; } } if (!nothingPicked) { SelectedKVP.Value.FitIntoBaseStructure(ref currentSentenceVBS, SelectedKVP.Key); } //word index pointer in the current sentence int wordIndexInCurrentSentence = 0; Word currentWord = null; Word newWord = null; DependencyBasedToken currentDBT; #region upgrading the current sentence to a new sentence. for (int word_index = 0; word_index < list.Count(); word_index++) { currentDBT = list[word_index]; newWord = new Word(); newWord.num = currentDBT.Position; newWord.lexeme = currentDBT.WordForm; if (currentDBT.Lemma != "_") { //if lemma is changed newWord.lemma = currentDBT.Lemma; newWord.cpos = currentDBT.CPOSTag; newWord.fpos = currentDBT.FPOSTag; if (currentDBT.MorphoSyntacticFeats.Person != ShakhsType.Shakhs_NONE) { newWord.person = currentDBT.MorphoSyntacticFeats.Person.ToString(); } else { newWord.person = "_"; } if (currentDBT.MorphoSyntacticFeats.Number != NumberType.INVALID) { newWord.number = currentDBT.MorphoSyntacticFeats.Number.ToString(); } else { newWord.number = "_"; } if (currentDBT.MorphoSyntacticFeats.TenseMoodAspect != TenseFormationType.TenseFormationType_NONE) { newWord.tma = currentDBT.MorphoSyntacticFeats.TenseMoodAspect.ToString(); } else { newWord.tma = "_"; } } else { //lemma is unchanged currentWord = currentSentence.getWord(wordIndexInCurrentSentence); newWord.lemma = currentWord.lemma; newWord.cpos = currentWord.cpos; newWord.fpos = currentWord.fpos; newWord.person = currentWord.person; newWord.number = currentWord.number; newWord.tma = "_"; } //are changed any way newWord.parentId = currentDBT.HeadNumber; newWord.parentRelation = currentDBT.DependencyRelation; newSentence.addWord(newWord); wordIndexInCurrentSentence += currentDBT.TokenCount; } //sentence is now upgraded and more filled with information #endregion //adding the fitted base structure to the database as the main verb //add the selectedKVP's Verb to database //mongoSaveMainVerb(); //////////////////////// //// Counting the Verbs //// ----------- List <VerbInSentence> verbsInSentence = currentSentenceVBS.VerbsInSentence; for (int verb_index = 0; verb_index < verbsInSentence.Count; verb_index++) { string verbStringRepresentation = getVerbStringRepresentation(verbsInSentence[verb_index], newSentence); long article = currentArticle.getArticleNumber(); //sentence_index is already set //verb_index is already set if (verbStringRepresentation.Equals("شوند~_~_")) { mongoCountVerb(verbStringRepresentation, article, sentence_index, verb_index); } mongoCountVerb(verbStringRepresentation, article, sentence_index, verb_index); } //// //////////////////////// newArticle.addSentence(newSentence); } return(newArticle); }
public void FitIntoBaseStructure(ref VerbBasedSentence verbBasedSentence, VerbInSentence verbInSentence) { if (HasPrepositionalObject1) { foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if ((dependencyBasedToken.CPOSTag == "P" || dependencyBasedToken.CPOSTag == "POSTP") && dependencyBasedToken.DependencyRelation != "VPRT") { if (dependencyBasedToken.WordForm == PrepositionalObjectPreposition1) { if (verbInSentence.NonVerbalElementIndex != -1 && verbInSentence.VerbalPrepositionIndex == -1) { dependencyBasedToken.HeadNumber = verbInSentence.NonVerbalElementIndex; dependencyBasedToken.DependencyRelation = "VPP"; } else { dependencyBasedToken.HeadNumber = verbInSentence.LightVerbIndex; dependencyBasedToken.DependencyRelation = "VPP"; } if (dependencyBasedToken.CPOSTag == "P") { for (int i = dependencyBasedToken.Position; i < verbBasedSentence.SentenceTokens.Count; i++) { if (verbBasedSentence.SentenceTokens[i].CPOSTag == "PR" || verbBasedSentence.SentenceTokens[i].CPOSTag == "N") { verbBasedSentence.SentenceTokens[i].DependencyRelation = "POSDEP"; verbBasedSentence.SentenceTokens[i].HeadNumber = dependencyBasedToken.Position; break; } } } else { for (int i = dependencyBasedToken.Position - 2; i >= 0; i--) { if ((verbBasedSentence.SentenceTokens[i].CPOSTag == "PR" || verbBasedSentence.SentenceTokens[i].CPOSTag == "N") && (i == 0 || verbBasedSentence.SentenceTokens[i - 1].CPOSTag != "N")) { verbBasedSentence.SentenceTokens[i].DependencyRelation = "PREDEP"; verbBasedSentence.SentenceTokens[i].HeadNumber = dependencyBasedToken.Position; break; } } } break; } } } } if (HasPrepositionalObject2) { foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if ((dependencyBasedToken.CPOSTag == "P" || dependencyBasedToken.CPOSTag == "POSTP") && dependencyBasedToken.DependencyRelation != "VPRT") { if (dependencyBasedToken.WordForm == PrepositionalObjectPreposition2) { if (verbInSentence.NonVerbalElementIndex != -1 && verbInSentence.VerbalPrepositionIndex == -1) { dependencyBasedToken.HeadNumber = verbInSentence.NonVerbalElementIndex; dependencyBasedToken.DependencyRelation = "VPP"; } else { dependencyBasedToken.HeadNumber = verbInSentence.LightVerbIndex; dependencyBasedToken.DependencyRelation = "VPP"; } if (dependencyBasedToken.CPOSTag == "P") { for (int i = dependencyBasedToken.Position; i < verbBasedSentence.SentenceTokens.Count; i++) { if (verbBasedSentence.SentenceTokens[i].CPOSTag == "PR" || verbBasedSentence.SentenceTokens[i].CPOSTag == "N") { verbBasedSentence.SentenceTokens[i].DependencyRelation = "POSDEP"; verbBasedSentence.SentenceTokens[i].HeadNumber = dependencyBasedToken.Position; break; } } } else { for (int i = dependencyBasedToken.Position - 2; i >= 0; i--) { if ((verbBasedSentence.SentenceTokens[i].CPOSTag == "PR" || verbBasedSentence.SentenceTokens[i].CPOSTag == "N") && (i == 0 || verbBasedSentence.SentenceTokens[i - 1].CPOSTag != "N")) { verbBasedSentence.SentenceTokens[i].DependencyRelation = "PREDEP"; verbBasedSentence.SentenceTokens[i].HeadNumber = dependencyBasedToken.Position; break; } } } break; } } } } if (HasObject && HasRa) { foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if (dependencyBasedToken.WordForm == "را" && dependencyBasedToken.Position < verbInSentence.LightVerbIndex) { dependencyBasedToken.HeadNumber = verbInSentence.LightVerbIndex; dependencyBasedToken.DependencyRelation = "OBJ"; for (int i = dependencyBasedToken.Position - 2; i >= 0; i--) { if ((verbBasedSentence.SentenceTokens[i].CPOSTag == "PR" || verbBasedSentence.SentenceTokens[i].CPOSTag == "N") && (i == 0 || verbBasedSentence.SentenceTokens[i - 1].CPOSTag != "N")) { verbBasedSentence.SentenceTokens[i].DependencyRelation = "PREDEP"; verbBasedSentence.SentenceTokens[i].HeadNumber = dependencyBasedToken.Position; break; } } break; } } } if (HasBandMotammemi) { foreach (var dependencyBasedToken in verbBasedSentence.SentenceTokens) { if (dependencyBasedToken.CPOSTag == "V" && dependencyBasedToken.Position > verbInSentence.LightVerbIndex) { bool hasConnector = false; if (HasBandMotemmemiAgreement) { if (dependencyBasedToken.MorphoSyntacticFeats.Person == verbBasedSentence.SentenceTokens[verbInSentence.LightVerbIndex].MorphoSyntacticFeats. Person) { if (HasBandMotemmemiEltezami) { if (dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.HAAL_ELTEZAMI || dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.GOZASHTEH_ESTEMRAARI) { for (int i = verbInSentence.LightVerbIndex - 1; i < dependencyBasedToken.Position && i > 0; i++) { if (verbBasedSentence.SentenceTokens[i].WordForm == "که" || verbBasedSentence.SentenceTokens[i].WordForm == "تا") { hasConnector = true; dependencyBasedToken.HeadNumber = verbBasedSentence.SentenceTokens[i].Position; dependencyBasedToken.DependencyRelation = "PRD"; verbBasedSentence.SentenceTokens[i].HeadNumber = verbInSentence.LightVerbIndex; verbBasedSentence.SentenceTokens[i].DependencyRelation = "VCL"; break; } if (!hasConnector) { dependencyBasedToken.HeadNumber = verbInSentence.LightVerbIndex; dependencyBasedToken.DependencyRelation = "VCL"; } } break; } } } } else { if (HasBandMotemmemiEltezami) { if (dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.HAAL_ELTEZAMI || dependencyBasedToken.MorphoSyntacticFeats.TenseMoodAspect == TenseFormationType.GOZASHTEH_ESTEMRAARI) { for (int i = verbInSentence.LightVerbIndex - 1; i < dependencyBasedToken.Position && i > 0; i++) { if (verbBasedSentence.SentenceTokens[i].WordForm == "که" || verbBasedSentence.SentenceTokens[i].WordForm == "تا") { hasConnector = true; dependencyBasedToken.HeadNumber = verbBasedSentence.SentenceTokens[i].Position; dependencyBasedToken.DependencyRelation = "PRD"; verbBasedSentence.SentenceTokens[i].HeadNumber = verbInSentence.LightVerbIndex; verbBasedSentence.SentenceTokens[i].DependencyRelation = "VCL"; break; } if (!hasConnector) { dependencyBasedToken.HeadNumber = verbInSentence.LightVerbIndex; dependencyBasedToken.DependencyRelation = "VCL"; } } break; } } else { for (int i = verbInSentence.LightVerbIndex - 1; i < dependencyBasedToken.Position && i > 0; i++) { if (verbBasedSentence.SentenceTokens[i].WordForm == "که" || verbBasedSentence.SentenceTokens[i].WordForm == "تا") { hasConnector = true; dependencyBasedToken.HeadNumber = verbBasedSentence.SentenceTokens[i].Position; dependencyBasedToken.DependencyRelation = "PRD"; verbBasedSentence.SentenceTokens[i].HeadNumber = verbInSentence.LightVerbIndex; verbBasedSentence.SentenceTokens[i].DependencyRelation = "VCL"; break; } if (!hasConnector) { dependencyBasedToken.HeadNumber = verbInSentence.LightVerbIndex; dependencyBasedToken.DependencyRelation = "VCL"; } } break; } } } } } }