diff --git a/CSharpCode/ExtractFactsFromParsing/.vs/ExtractFactsFromParsing/v14/.suo b/CSharpCode/ExtractFactsFromParsing/.vs/ExtractFactsFromParsing/v14/.suo deleted file mode 100644 index 6453ddf..0000000 Binary files a/CSharpCode/ExtractFactsFromParsing/.vs/ExtractFactsFromParsing/v14/.suo and /dev/null differ diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing.sln b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing.sln deleted file mode 100644 index 4fd5287..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtractFactsFromParsing", "ExtractFactsFromParsing\ExtractFactsFromParsing.csproj", "{AB108A5C-BE45-4701-831C-FC80F1E706AE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AB108A5C-BE45-4701-831C-FC80F1E706AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB108A5C-BE45-4701-831C-FC80F1E706AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB108A5C-BE45-4701-831C-FC80F1E706AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB108A5C-BE45-4701-831C-FC80F1E706AE}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/AdverbCategory.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/AdverbCategory.cs deleted file mode 100644 index 27d41db..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/AdverbCategory.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public static class AdverbCategory -{ - static HashSet adv_group1 = null;// влево - static HashSet adv_group2 = null; // внутри - static HashSet adv_group3 = null; // быстро - static HashSet adv_group4 = null; // всегда - static HashSet adv_group5 = null; // много - - public static string GetQuestionWordForAdverb(string a0) - { - string a = a0.ToLower(); - - if (adv_group1 == null) - { - adv_group1 = new HashSet(); - adv_group2 = new HashSet(); - adv_group3 = new HashSet(); - adv_group4 = new HashSet(); - adv_group5 = new HashSet(); // счетные наречия - foreach (string w in "влево вправо вверх вниз домой наружу внутрь".Split()) - { - adv_group1.Add(w); - } - - foreach (string w in "внутри снаружи везде всюду сзади спереди сбоку сверху снизу там тут здесь повсюду повсеместно рядом неподалеку вдали".Split()) - { - adv_group2.Add(w); - } - - // КАК - string how_list = "быстро медленно плохо хорошо шустро понарошку агрессивно " + - "активно отдельно постоянно отлично индивидуально покорно удовлетворенно мрачно тяжело охотно весело " + - "одобрительно удивленно презрительно небрежно коротко испуганно нерешительно неловко кокетливо " + - "нехотя невесело осторожно угрюмо молча следом дипломатично моментально тихо звонко цинично учащенно лениво " + - "сочувственно оживленно робко обиженно загадочно пьяно понуро беспомощно громко автоматически " + - "отрывисто лукаво судорожно неумолимо робко звучно затравленно немедленно оскорбленно намертво насовсем " + - "поспешно постепенно тихо смело постепенно мощно сиротливо устало неслышно наскоком недвижно монолитно монотонно " + - "очумело пугливо сытно тоскливо сумрачно растерянно круто звонко резко успешно гулко невольно внимательно " + - "отважно тяжело яростно задумчиво долго основательно прочно злобно вопрошающе пристально недоуменно неустанно " + - "внакладе впритык нармонично туго красиво тайно навсегда победно сообща внезапно идеально нарасхват " + - "виртуозно экстренно остро достойно неизменно наизнанку радушно единогласно честно порядочно неправильно " + - "незначительно щедро изумленно обессилено непринужденно легко бесшумно неуклонно врасплох хмуро мягко " + - "вежливо буквально укоризненно предупредительно больно обидно сердито скептически демонстративно незатейливо отчаянно " + - "хладнокровно охотнее медленнее шустрее агрессивнее активнее "; - foreach (string w in how_list.Split()) - { - adv_group3.Add(w); - } - - foreach (string w in "всегда сегодня вчера позавчера послезавтра ежедневно еженочно ежемесячно наутро поутру накануне".Split()) - { - adv_group3.Add(w); - } - - - foreach (string w in "сколько много немного мало несколько".Split()) - { - adv_group5.Add(w); - } - - } - - if (adv_group1.Contains(a)) return "куда"; - if (adv_group2.Contains(a)) return "где"; - if (adv_group3.Contains(a)) return "как"; - if (adv_group4.Contains(a)) return "когда"; - if (adv_group5.Contains(a)) return "counter"; - - return null; - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/App.config b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/App.config deleted file mode 100644 index 88fa402..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/ExtractFactsFromParsing.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/ExtractFactsFromParsing.cs deleted file mode 100644 index de052b5..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/ExtractFactsFromParsing.cs +++ /dev/null @@ -1,519 +0,0 @@ -/* Вспомогательная утилита для подготовки датасета, используемого при обучении - * чат-бота https://github.com/Koziev/chatbot - * - * На входе утилита берет результаты синтаксического и морфологического разбора, - * выполненного утилитой Parser http://solarix.ru/parser.shtml - * - * Результат работы - текстовый файл, в каждой строке которого содержится - * одно предложение, по возможности содержащее полный предикат с подлежащим-существительным. - */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; - -class ExtractFactsFromParsing -{ - private static Preprocessor preprocessor; - private static SyntaxChecker syntax_checker = new SyntaxChecker(); - - private static int nb_skip = 0; - private static int sample_count = 0; - - private static string last_contituents = ""; - - static System.IO.StreamWriter wrt_samples, wrt_skipped; - - static HashSet stop_words3; - - static ExtractFactsFromParsing() - { - string stop_words_str = "сам сама само сами саму самого самих самим самой самими все " + - "это эта эти этими этот эту этим этой этих этого ее ей им её его их наш ваш твой мой я ты мы вы меня " + - "тебя вас нас мной тобой вами ими нами мне тебе нам вам им ней нем нём них ними тобою мною него нее неё" + - "себя себе собой все весь всеми всем всю всей всего всех"; - stop_words3 = new HashSet(stop_words_str.Split()); - } - - - static string Preprocess(string phrase, SolarixGrammarEngineNET.GrammarEngine2 gren) - { - return preprocessor.Preprocess(phrase, gren); - } - - static bool IsSuitableNode(SNode n) - { - return !IsPunkt(n.word.word) && !char.IsDigit(n.word.word[0]); - } - - static void CollectChildren(SNode node, List children) - { - foreach (SNode c in node.children) - { - if (IsSuitableNode(c)) - { - children.Add(c); - } - - CollectChildren(c, children); - } - } - - static bool IsPunkt(string word) - { - return word.Length > 0 && char.IsPunctuation(word[0]); - } - - static void ProcessNode(Sentence sent, SNode node, int max_len) - { - // 1. Соберем все подчиненные токены, включая сам node - List nx = new List(); - if (IsSuitableNode(node)) - { - nx.Add(node); - } - - CollectChildren(node, nx); - - if (nx.Count > 1 && nx.Count <= max_len) - { - // Сформируем предложение из этих токенов - string sample = NormalizeSample(string.Join(" ", nx.OrderBy(z => z.word.index).Select(z => z.word.word).ToArray())); - if (IsUniqueSample(sample) && sample != last_contituents) - { - wrt_samples.WriteLine("{0}", sample); - sample_count++; - last_contituents = sample; - } - } - - // Для глагольного сказуемого можем отдельно выделить пары с актантами - if (node.IsPartOfSpeech("ГЛАГОЛ") || node.IsPartOfSpeech("ИНФИНИТИВ") || node.IsPartOfSpeech("БЕЗЛИЧ_ГЛАГОЛ")) - { - foreach (SNode c in node.children) - { - if (IsSuitableNode(c)) - { - nx.Clear(); - nx.Add(node); - nx.Add(c); - CollectChildren(c, nx); - - // Сформируем предложение из этих токенов - string sample = NormalizeSample(string.Join(" ", nx.OrderBy(z => z.word.index).Select(z => z.word.word).ToArray())); - if (IsUniqueSample(sample) && last_contituents != sample) - { - wrt_samples.WriteLine("{0}", sample); - sample_count++; - last_contituents = sample; - } - } - } - } - - // Рекурсивно делаем фрагменты из каждого подчиненного узла. - foreach (var c in node.children) - { - ProcessNode(sent, c, max_len); - } - - return; - } - - static int nb_stored = 0; - static void WriteSample(string sample) - { - if (IsUniqueSample(sample)) - { - wrt_samples.WriteLine(sample); - nb_stored++; - } - return; - } - - static void SkippedSample(string sample) - { - wrt_skipped.WriteLine(sample); - wrt_skipped.Flush(); - return; - } - - - static void ProcessSentence(SolarixGrammarEngineNET.GrammarEngine2 gren, Sentence sent, int max_len, string filter_verb, string filter_sent) - { - if (filter_sent == "q" && sent.GetText().Last() != '?') - { - // Нам нужны только вопросы - return; - } - - - if (filter_sent == "a" && sent.GetText().Last() == '?') - { - // Вопросы нам не нужны. - return; - } - - if( string.IsNullOrEmpty(filter_verb)) - { - // Подходят любые предложения, включая безличные структуры типа "Кому тяжело?" - ProcessSentence2(sent.GetText(), gren, max_len); - } - else if (sent.root.IsPartOfSpeech("ГЛАГОЛ") || sent.root.IsPartOfSpeech("БЕЗЛИЧ_ГЛАГОЛ")) - { - if (filter_verb == "3") - { - // Пропускаем предложения с подлежащим в 3м лице - List sbj = sent.root.FindEdge("SUBJECT"); - - if (sent.ContainsWord(z => stop_words3.Contains(z.ToLower()))) - return; - - if (sbj.Count == 1 && sbj[0].IsPartOfSpeech("СУЩЕСТВИТЕЛЬНОЕ")) - { - //WriteSample(sent.GetText()); - ProcessSentence2(sent.GetText(), gren, max_len); - } - } - else if (filter_verb == "1s") - { - // Есть явное подлежащее в первом лице единственном числе - List sbj = sent.root.FindEdge("SUBJECT"); - - if (sbj.Count == 1 && sbj[0].IsPartOfSpeech("МЕСТОИМЕНИЕ") && sbj[0].word.word.Equals("я", StringComparison.OrdinalIgnoreCase)) - { - //WriteSample(sent.GetText()); - ProcessSentence2(sent.GetText(), gren, max_len); - } - } - else if (filter_verb == "2s") - { - // Есть явное подлежащее во втором лице единственном числе - List sbj = sent.root.FindEdge("SUBJECT"); - - if (sbj.Count == 1 && sbj[0].IsPartOfSpeech("МЕСТОИМЕНИЕ") && sbj[0].word.word.Equals("ты", StringComparison.OrdinalIgnoreCase)) - { - //WriteSample(sent.GetText()); - ProcessSentence2(sent.GetText(), gren, max_len); - } - } - } - - wrt_samples.Flush(); - return; - } - - - private static List GetTerms(SolarixGrammarEngineNET.SyntaxTreeNode n) - { - List res = new List(); - res.Add(n); - - foreach (var child in n.leafs) - { - res.AddRange(GetTerms(child)); - } - - return res; - } - - - private static string TermToString(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode term) - { - int id_entry = term.GetEntryID(); - - if (gren.GetEntryName(id_entry) == "???") - { - return term.GetWord(); - } - - string res_word = gren.RestoreCasing(id_entry, term.GetWord()); - - return res_word; - } - - - private static string TermsToString(SolarixGrammarEngineNET.GrammarEngine2 gren, IEnumerable terms) - { - return string.Join(" ", terms.Select(z => TermToString(gren, z))); - } - - private static string TermsToString(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode term) - { - return TermToString(gren, term); - } - - - static bool IsSentenceTerminator(char c) - { - return ".!?;…".Contains(c); - } - - static int nb_processed = 0; - static HashSet processed_phrases = new HashSet(); - static void ProcessSentence2(string phrase, SolarixGrammarEngineNET.GrammarEngine2 gren, int max_len) - { - nb_processed += 1; - - if (nb_skip != 0 && nb_processed < nb_skip) - { - return; - } - - if (phrase.Length > 2) - { - bool used = false; - string terminator = ""; - - if (IsSentenceTerminator(phrase.Last())) - { - terminator = new string(phrase.Last(), 1); - - // Удалим финальные символы типа . или ! - int finalizers = 1; - for (int i = phrase.Length - 2; i > 0; --i) - { - if (IsSentenceTerminator(phrase[i])) - { - finalizers++; - } - } - - phrase = phrase.Substring(0, phrase.Length - finalizers); - } - - if (!processed_phrases.Contains(phrase)) - { - processed_phrases.Add(phrase); - - string phrase2 = Preprocess(phrase, gren); - - // Выполним оценку синтаксического качества предложения, чтобы отсеять мусор. - int id_language = SolarixGrammarEngineNET.GrammarEngineAPI.RUSSIAN_LANGUAGE; - SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags morph_flags = SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_COMPLETE_ONLY | SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_MODEL; - SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags syntax_flags = SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags.DEFAULT; - int MaxAlt = 40; - int constraints = 600000 | (MaxAlt << 22); - - using (SolarixGrammarEngineNET.AnalysisResults linkages = gren.AnalyzeSyntax(phrase2, id_language, morph_flags, syntax_flags, constraints)) - { - if (linkages.Count == 3) - { - SolarixGrammarEngineNET.SyntaxTreeNode root = linkages[1]; - List terms = GetTerms(root).OrderBy(z => z.GetWordPosition()).ToList(); - - int score = linkages.Score; - - bool good = false; - if (score >= -4) - { - good = true; - - if (!syntax_checker.IsEmpty()) - { - FootPrint footprint = new FootPrint(gren, terms); - - // Проверим синтаксическую структуру фразы, чтобы отсеять разговорную некондицию. - good = syntax_checker.IsGoodSyntax(footprint); - } - } - - if (good) - { - used = true; - WriteSample(phrase+terminator); - wrt_samples.Flush(); - } - else - { - SkippedSample(phrase); - } - } - } - } - } - - Console.Write("{0} processed, {1} stored\r", nb_processed, nb_stored); - - return; - } - - - - - - static HashSet sample_hashes = new HashSet(); - static MD5 md5 = MD5.Create(); - - static string NormalizeSample(string str) - { - return str.ToLower(); - } - - static bool IsUniqueSample(string str) - { - byte[] hash = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str.ToLower())); - Int64 ihash1 = BitConverter.ToInt64(hash, 0); - Int64 ihash2 = BitConverter.ToInt64(hash, 8); - Int64 ihash = ihash1 ^ ihash2; - - if (!sample_hashes.Contains(ihash)) - { - sample_hashes.Add(ihash); - return true; - } - else - { - return false; - } - } - - - static void Main(string[] args) - { - string result_folder = @"f:\tmp"; - List parsed_sentences = new List(); - - int MAX_SAMPLE = int.MaxValue; - int MAX_LEN = int.MaxValue; - string dictionary_path = ""; - string syntax_templates = ""; - string[] filters = { "3" }; - - #region Command_Line_Options - for (int i = 0; i < args.Length; ++i) - { - if (args[i] == "-parsing") - { - parsed_sentences.Add(args[i + 1]); - i++; - } - else if (args[i] == "-dict") - { - dictionary_path = args[i + 1]; - i++; - } - else if (args[i] == "-templates") - { - syntax_templates = args[i + 1]; - i++; - } - else if (args[i] == "-output") - { - result_folder = args[i + 1]; - i++; - } - else if (args[i] == "-max_samples") - { - MAX_SAMPLE = int.Parse(args[i + 1]); - i++; - } - else if (args[i] == "-skip") - { - nb_skip = int.Parse(args[i + 1]); - i++; - } - else if (args[i] == "-max_len") - { - MAX_LEN = int.Parse(args[i + 1]); - i++; - } - else if (args[i] == "-filter") - { - filters = args[i + 1].Split(','); - i++; - } - else - { - throw new ApplicationException(string.Format("Unknown option {0}", args[i])); - } - } - #endregion Command_Line_Options - - preprocessor = new Preprocessor(); - if (!string.IsNullOrEmpty(syntax_templates)) - { - syntax_checker.LoadTemplates(syntax_templates); - } - - Console.WriteLine("Loading dictionary {0}", dictionary_path); - SolarixGrammarEngineNET.GrammarEngine2 gren = new SolarixGrammarEngineNET.GrammarEngine2(); - gren.Load(dictionary_path, true); - - // Файл для сохранения отобранных предложений-фактов. - wrt_samples = new System.IO.StreamWriter(System.IO.Path.Combine(result_folder, "facts.txt")); - - // Предложения, которые не прошли детальную проверку синтаксической структуры - wrt_skipped = new System.IO.StreamWriter(System.IO.Path.Combine(result_folder, "skipped.txt")); - - // Фильтр для предиката, с возможными значениями "3", "2s" и "1s" - string filter_verb = filters.Where(z => "3 1s 2s".Split(' ').Contains(z)).FirstOrDefault(); - - // Фильтр типа предложения. Допустимые значение - пустое или "q" - string filter_sent = (filters.Where(z => "q".Split(' ').Contains(z)).FirstOrDefault()) ?? ""; - - - DateTime start_time = DateTime.Now; - - #region Processing_All_Files - foreach (string mask in parsed_sentences) - { - string[] files = null; - if (System.IO.Directory.Exists(mask)) - { - files = System.IO.Directory.GetFiles(mask, "*.parsing.txt"); - } - else if (mask.IndexOfAny("*?".ToCharArray()) != -1) - { - files = System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(mask), System.IO.Path.GetFileName(mask)); - } - else - { - files = new string[1] { mask }; - } - - Console.WriteLine("Number of parsing files={0}", files.Length); - - foreach (string file in files) - { - if (sample_count >= MAX_SAMPLE) - break; - - Console.WriteLine("Processing {0}...", file); - - using (Sentences src = new Sentences(file)) - { - while (src.Next() && sample_count < MAX_SAMPLE) - { - Sentence sent = src.GetFetched(); - sample_count++; - - if (sent.root == null) - continue; - - if (sample_count > 0 && (sample_count % 10000) == 0) - { - Console.Write("{0} samples extracted\r", sample_count); - } - - if (sample_count >= nb_skip) - { - //Console.WriteLine("DEBUG [{0}] {1}", sample_count, sent.GetText()); - ProcessSentence(gren, sent, MAX_LEN, filter_verb, filter_sent); - } - } - } - } - } - #endregion Processing_All_Files - - - wrt_samples.Close(); - wrt_skipped.Close(); - - return; - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/ExtractFactsFromParsing.csproj b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/ExtractFactsFromParsing.csproj deleted file mode 100644 index 09836e9..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/ExtractFactsFromParsing.csproj +++ /dev/null @@ -1,88 +0,0 @@ - - - - - Debug - AnyCPU - {AB108A5C-BE45-4701-831C-FC80F1E706AE} - Exe - Properties - ExtractFactsFromParsing - ExtractFactsFromParsing - v4.6 - 512 - true - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\..\..\..\MVoice\lem\lib64\gren_consts.dll - - - ..\..\..\..\..\MVoice\lem\lib64\gren_fx.dll - - - ..\..\..\..\..\MVoice\lem\lib64\gren_fx2.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - copy e:\MVoice\lem\lib64\solarix_grammar_engine.dll $(TargetDir) -copy e:\MVoice\lem\lib64\sqlite.dll $(TargetDir) - - - \ No newline at end of file diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrint.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrint.cs deleted file mode 100644 index 73cb4e6..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrint.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; - - -public class FootPrint -{ - private List tokens; - - public FootPrint(SolarixGrammarEngineNET.GrammarEngine2 gren, List terms) - { - tokens = new List(); - foreach (var term in terms) - { - tokens.Add(new FootPrintToken(gren, term)); - } - - tokens.Add(new FootPrintToken(FootPrintTrieNode.END_TOKEN)); - } - - public bool Match(string tags) - { - string[] groups = tags.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - if (groups.Length != tokens.Count) - { - return false; - } - - for (int i = 0; i < groups.Length; ++i) - { - if (!tokens[i].Match(groups[i])) - { - return false; - } - } - - return true; - } - - - public bool Match(FootPrintTrie trie) - { - return trie.Verify(tokens); - } - - public FootPrintToken this[int index] { get { return tokens[index]; } } - - public override string ToString() - { - return string.Join(" ", tokens.Select(z => z.ToString())); - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintToken.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintToken.cs deleted file mode 100644 index 4b426a2..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintToken.cs +++ /dev/null @@ -1,221 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; -using System.Diagnostics.Contracts; - -public class FootPrintToken -{ - private string word; - private List tags; - private SolarixGrammarEngineNET.SyntaxTreeNode node; - - private static List copula_verbs = "быть стать считаться оказаться получиться бывать становиться".Split().ToList(); - - public FootPrintToken(string word) - { - this.word = word; - tags = new List(); - tags.Add(word); - } - - public FootPrintToken(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode root) - { - Contract.Ensures(!string.IsNullOrEmpty(this.word)); - Contract.Ensures(this.node != null); - Contract.Ensures(this.tags != null); - - this.word = root.GetWord(); - this.tags = new List(); - this.node = root; - - this.tags.Add(root.GetWord().ToLower()); - - if (root.GetWord().Equals("не", StringComparison.OrdinalIgnoreCase)) - { - this.tags.Add("neg"); - } - - - int part_of_speech = gren.GetEntryClass(root.GetEntryID()); - switch (part_of_speech) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.NUM_WORD_CLASS: this.tags.Add("num"); break; // числительное цифрами - case SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_CLASS_ru: this.tags.Add("num"); break; // числительное словом - - case SolarixGrammarEngineNET.GrammarEngineAPI.CONJ_ru: this.tags.Add("conj"); break; // союз - - case SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru: this.tags.Add("pr"); break; // местоимение Я - - case SolarixGrammarEngineNET.GrammarEngineAPI.NOUN_ru: this.tags.Add("n"); break; - - case SolarixGrammarEngineNET.GrammarEngineAPI.ADJ_ru: this.tags.Add("adj"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.VERB_ru: this.tags.Add("v"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.INFINITIVE_ru: this.tags.Add("v"); this.tags.Add("inf"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.GERUND_2_ru: this.tags.AddRange("adv adv_v".Split(' ')); break; - - case SolarixGrammarEngineNET.GrammarEngineAPI.ADVERB_ru: - { - this.tags.Add("adv"); - if (StringExtender.InCI(word, "очень крайне наиболее наименее чрезвычайно почти".Split())) // модификаторы наречий и прилагательных - { - this.tags.Add("a_modif"); - } - - string adv_cat = AdverbCategory.GetQuestionWordForAdverb(word); - if (!string.IsNullOrEmpty(adv_cat)) - { - this.tags.Add("adv_" + adv_cat); - } - - break; - } - - case SolarixGrammarEngineNET.GrammarEngineAPI.PREPOS_ru: this.tags.Add("p"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN2_ru: this.tags.Add("pr"); break; - default: this.tags.Add("x"); break; - } - - foreach (var p in root.GetPairs()) - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.NOMINATIVE_CASE_ru: this.tags.Add("nom"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.GENITIVE_CASE_ru: this.tags.Add("gen"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.ACCUSATIVE_CASE_ru: this.tags.Add("acc"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.DATIVE_CASE_ru: this.tags.Add("dat"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PREPOSITIVE_CASE_ru: this.tags.Add("prep"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PARTITIVE_CASE_ru: this.tags.Add("part"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.LOCATIVE_CASE_ru: this.tags.Add("loc"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.INSTRUMENTAL_CASE_ru: this.tags.Add("instr"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru: this.tags.Add("sing"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PLURAL_NUMBER_ru: this.tags.Add("pl"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru: this.tags.Add("past"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PRESENT_ru: this.tags.Add("pres"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.FUTURE_ru: this.tags.Add("future"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.FORM_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.ANIMATIVE_FORM_ru: this.tags.Add("anim"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.INANIMATIVE_FORM_ru: this.tags.Add("inanim"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.GENDER_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.MASCULINE_GENDER_ru: this.tags.Add("masc"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.FEMININE_GENDER_ru: this.tags.Add("fem"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.NEUTRAL_GENDER_ru: this.tags.Add("neut"); break; - } - } - - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru: this.tags.Add("1"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru: this.tags.Add("2"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_3_ru: this.tags.Add("3"); break; - } - } - - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.VB_INF_ru: this.tags.Add("vf1"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.VB_ORDER_ru: this.tags.Add("imper"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.MODAL_ru) - { - switch (p.StateID) - { - case 1: this.tags.Add("mod"); break; - } - } - - - } - - // Пометим связочные глаголы - string lemma = gren.GetEntryName(root.GetEntryID()); - if (copula_verbs.Contains(lemma)) - { - this.tags.Add("copula"); - } - - } - - public bool Match(string tags) - { - string[] tag_list = tags.Split(",.".ToCharArray()); - foreach (string t in tag_list) - { - if (t.StartsWith("~")) - { - if (this.tags.Contains(t.Substring(1, t.Length - 1))) - { - return false; - } - } - else if (t.Contains("|")) - { - string[] tx = t.Split('|'); - foreach (var ti in tx) - { - if (this.tags.Contains(ti)) - { - return true; - } - } - - return false; - } - else - { - if (!this.tags.Contains(t)) - { - return false; - } - } - } - - return true; - } - - public override string ToString() - { - return word + " (" + string.Join(",", tags) + ")"; - } - - public string GetWord() { return word; } -} - diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintTrie.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintTrie.cs deleted file mode 100644 index 25f3900..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintTrie.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public class FootPrintTrie -{ - private FootPrintTrieNode root; - - public FootPrintTrie() - { - root = new FootPrintTrieNode(string.Empty); - } - - // В дерево добавляется очередной пример валидной конструкции - public void AddSequence(IReadOnlyList tokens) - { - root.Build(tokens, 0); - } - - // Проверяем, является ли цепочка токенов предложения синтаксически валидной. - public bool Verify(IReadOnlyList tokens) - { - return root.FindMatching(tokens, -1); - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintTrieNode.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintTrieNode.cs deleted file mode 100644 index 788929a..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/FootPrintTrieNode.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public class FootPrintTrieNode -{ - public static string END_TOKEN = ""; - public string token; - public List next_nodes = new List(); - - public FootPrintTrieNode(string token) { this.token = token; } - - - public override string ToString() - { - return token; - } - - public void Build(IReadOnlyList tokens, int cur_index) - { - string next_token = tokens[cur_index]; - - bool found = false; - foreach (var next_node in next_nodes) - { - if (next_node.token == next_token) - { - if (cur_index < tokens.Count - 1) - { - next_node.Build(tokens, cur_index + 1); - } - found = true; - } - } - - if (!found) - { - FootPrintTrieNode new_next_node = new FootPrintTrieNode(next_token); - next_nodes.Add(new_next_node); - if (cur_index < tokens.Count - 1) - { - new_next_node.Build(tokens, cur_index + 1); - } - } - } - - public bool FindMatching(IReadOnlyList tokens, int cur_index) - { - if (cur_index == -1 || tokens[cur_index].Match(token)) - { - if (tokens.Count == cur_index + 1) - { - return token==END_TOKEN; - } - - foreach (var next_node in next_nodes) - { - if (next_node.FindMatching(tokens, cur_index + 1)) - { - return true; - } - } - } - - return false; - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Preprocessor.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Preprocessor.cs deleted file mode 100644 index c9381aa..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Preprocessor.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public class Preprocessor -{ - List prefixes; - List infixes; - - public Preprocessor() - { - string[] sx = - { - "и|", // И я читал. - "ну|и|", // Ну и жара нынче стоит! - "к счастью|,", // К счастью, подавляющее большинство спасают. - "в|итоге|,", // В итоге, кошка пропала. - "а|вот", // А вот риф немного разочаровал. - "вот|", // Вот так началась наша поездка! - "ну|", // Ну ювелир принимает заказ. - "а|", // А божественное право давало Слово. - "конечно|", // Конечно, Мейми слегка растерялась. - "но|", // Но куда же делись деньги ? - "наконец|,", // Наконец, вверху помещается детектор. - "иными|словами|,", // Иными словами, институт перестраховался. - "короче|,", // Короче, предстоит переговорный процесс. - "увы|,", // Увы, поезд стоял в... - "во-вторых|,", // Во-вторых, удар смягчила вода. - "по крайней мере|,", // По крайней мере, есть обнадеживающие факты. - "в|общем|,", // В общем, набрали 4000 гривен. - "да|и", // Да и обязанностями родители не отягощали. - "хотя", // Хотя судьба Феликса сложилась трагически. - "то есть", // То есть морская капуста попросту пропадала. - "как|всегда|,", // Как всегда, не сходились цифры. - "а|ведь", // А ведь поэты не шутят. - "мол|", // Мол, суд потом разберется. - "возможно|", // Возможно, правительство экономит деньги? - "разумеется|", // Разумеется, поначалу храм блистал. - "похоже|,|что|", - "похоже|,|", // Похоже, разговор шел по-немецки. - "однако|" // Однако я заблуждался - }; - - prefixes = sx.Select(z => z.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)).OrderByDescending(z => z.Length).Select(z => string.Join("|", z) + "|").ToList(); - - infixes = "же ли бы б ль ж аж ведь вот".Split(' ').ToList(); - - } - - - - public string Preprocess(string phrase0, SolarixGrammarEngineNET.GrammarEngine2 gren) - { - string phrase = phrase0; - - if (phrase.EndsWith("..")) - { - phrase = phrase.Substring(0, phrase.Length - 2); - } - - if (phrase.EndsWith("!")) - { - phrase = phrase.Substring(0, phrase.Length - 1); - } - - - string[] tokens = gren.Tokenize(phrase, SolarixGrammarEngineNET.GrammarEngineAPI.RUSSIAN_LANGUAGE); - List res_tokens = tokens.ToList(); - bool changed = false; - - string s = string.Join("|", tokens).ToLower(); - - foreach (string prefix in prefixes) - { - if (s.StartsWith(prefix)) - { - // Ну и жара нынче стоит! - res_tokens = res_tokens.Skip(prefix.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length).ToList(); - changed = true; - break; - } - } - - foreach (string infix in infixes) - { - if (res_tokens.Contains(infix)) - { - res_tokens.Remove(infix); - changed = true; - } - } - - - if (changed) - { - return string.Join(" ", res_tokens); - } - else - { - return phrase; - } - } - -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Properties/AssemblyInfo.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Properties/AssemblyInfo.cs deleted file mode 100644 index b21d87d..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ExtractFactsFromParsing")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ExtractFactsFromParsing")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ab108a5c-be45-4701-831c-fc80f1e706ae")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SNode.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SNode.cs deleted file mode 100644 index 915e88e..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SNode.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - - -class SNode -{ - public int index; - public SToken word; - public SNode parent; - public List edge_types = new List(); - public List children = new List(); - - public bool children_vector_ready = false; - public bool parent_vector_ready = false; - - public override string ToString() - { - return word.ToString(); - } - - public List FindEdge(string edge_type) - { - List res = new List(); - for (int i = 0; i < edge_types.Count; ++i) - if (edge_types[i].Equals(edge_type, StringComparison.CurrentCultureIgnoreCase)) - res.Add(children[i]); - - return res; - } - - public bool IsPartOfSpeech(params string[] part_of_speech) - { - foreach (var p in part_of_speech) - if (word.part_of_speech.Equals(p, StringComparison.CurrentCultureIgnoreCase)) - return true; - - return false; - } - - public bool IsPartOfSpeech(string part_of_speech) - { - if (word.part_of_speech.Equals(part_of_speech, StringComparison.CurrentCultureIgnoreCase)) - return true; - - return false; - } - - public void FindNodesByClass(List nodes, params string[] part_of_speech) - { - if (IsPartOfSpeech(part_of_speech)) - nodes.Add(this); - - foreach (SNode c in children) - c.FindNodesByClass(nodes, part_of_speech); - - return; - } - - public List FindNodesByClass(string part_of_speech) - { - List res = new List(); - - if (IsPartOfSpeech(part_of_speech)) - res.Add(this); - - foreach (SNode c in children) - res.AddRange(c.FindNodesByClass(part_of_speech)); - - return res; - } - - public bool EqualsWord(params string[] probes) - { - foreach (string probe in probes) - if (probe.Equals(word.word, StringComparison.CurrentCultureIgnoreCase)) - return true; - - return false; - } - - - public string ConvertTreeString() - { - System.Text.StringBuilder b = new StringBuilder(); - - List all = new List(); - all.Add(this); - all.AddRange(children); - - return string.Join(" ", all.OrderBy(z => z.word.index).Select(z => z.word.word).ToArray()); - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SToken.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SToken.cs deleted file mode 100644 index def600d..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SToken.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml; - -class SToken -{ - public int index; - public string word; - public string lemma; - public string part_of_speech; - public List tags; - - public SToken(int _index, XmlNode n_token) - { - index = _index; - word = n_token.SelectSingleNode("word").InnerText; - lemma = n_token.SelectSingleNode("lemma").InnerText; - - if (n_token.SelectSingleNode("part_of_speech") != null) - part_of_speech = n_token.SelectSingleNode("part_of_speech").InnerText; - - tags = new List(); - if (n_token.SelectSingleNode("tags") != null) - { - tags.AddRange(n_token.SelectSingleNode("tags").InnerText.Split('|')); - } - } - - public override string ToString() - { - return word; - } - - - public bool ContainsTag(string tag) - { - foreach (string t in tags) - if (t.Equals(tag, StringComparison.CurrentCultureIgnoreCase)) - return true; - - return false; - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Sentence.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Sentence.cs deleted file mode 100644 index 3ea66cf..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Sentence.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Xml; - - -class Sentence -{ - string text; - List tokens; - public SNode root; - List nodes; - - public Sentence(XmlNode n_sent) - { - text = n_sent.SelectSingleNode("text").InnerText; - - // токены - tokens = new List(); - int token_index = 0; - foreach (XmlNode n_token in n_sent.SelectNodes("tokens/token")) - { - SToken t = new SToken(token_index, n_token); - tokens.Add(t); - token_index++; - } - - // дерево зависимостей - List root_index = new List(); - Dictionary child2parent = new Dictionary(); - Dictionary, string> edge_type = new Dictionary, string>(); - Dictionary> parent2child = new Dictionary>(); - - foreach (XmlNode n_token in n_sent.SelectNodes("syntax_tree/node")) - { - int child_index = int.Parse(n_token["token"].InnerText); - - if (n_token.Attributes["is_root"] != null && n_token.Attributes["is_root"].Value == "true") - root_index.Add(child_index); - else - { - int parent_index = int.Parse(n_token["parent"].InnerText); - child2parent.Add(child_index, parent_index); - - edge_type.Add(new KeyValuePair(child_index, parent_index), n_token["link_type"].InnerText); - - List child_idx; - if (!parent2child.TryGetValue(parent_index, out child_idx)) - { - child_idx = new List(); - parent2child.Add(parent_index, child_idx); - } - - child_idx.Add(child_index); - } - } - - nodes = new List(); - for (int inode = 0; inode < tokens.Count; ++inode) - { - SNode n = new SNode(); - n.index = inode; - n.word = tokens[inode]; - nodes.Add(n); - } - - // проставим родителей и детей в каждом узле - for (int inode = 0; inode < nodes.Count; ++inode) - { - SNode node = nodes[inode]; - - if (!root_index.Contains(node.index)) - { - SNode parent_node = nodes[child2parent[node.index]]; - node.parent = parent_node; - - parent_node.children.Add(node); - parent_node.edge_types.Add(edge_type[new KeyValuePair(node.index, parent_node.index)]); - } - else - { - root = node; - } - } - } - - public string GetText() - { - return text; - } - - - public override string ToString() - { - return text; - } - - public SNode GetNodeByIndex(int index) - { - return nodes[index]; - } - - public List FindNodesByClass(params string[] part_of_speech) - { - List res = new List(); - root.FindNodesByClass(res, part_of_speech); - return res; - } - - public bool ContainsWord(Func predicate) - { - foreach (var token in tokens) - { - if (predicate(token.word)) - { - return true; - } - } - - return false; - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Sentences.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Sentences.cs deleted file mode 100644 index 2a8f162..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/Sentences.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Text; -using System.Xml; - -class Sentences : IDisposable -{ - System.IO.StreamReader rdr; - - public Sentences(string parsing_path) - { - rdr = new System.IO.StreamReader(parsing_path); - } - - void IDisposable.Dispose() - { - rdr.Close(); - } - - Sentence fetched; - - public bool Next() - { - fetched = null; - - while (!rdr.EndOfStream) - { - string line = rdr.ReadLine(); - if (line == null) - break; - - if (line.StartsWith(""); - xmlbuf.Append(""); - xmlbuf.Append(line); - - while (!rdr.EndOfStream) - { - line = rdr.ReadLine(); - if (line == null) - break; - - xmlbuf.Append(line); - - if (line == "") - break; - } - - xmlbuf.Append(""); - - XmlDocument xml = new XmlDocument(); - - xml.LoadXml(xmlbuf.ToString()); - - XmlNode n_sent = xml.DocumentElement.SelectSingleNode("sentence"); - - fetched = new Sentence(n_sent); - - return true; - } - } - - return false; - } - - public Sentence GetFetched() - { - return fetched; - } -} diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SolarixExtender.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SolarixExtender.cs deleted file mode 100644 index 6d3cc07..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SolarixExtender.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; - - -public static class SolarixExtender -{ - public static bool IsPartOfSpeech(this SolarixGrammarEngineNET.SyntaxTreeNode node, SolarixGrammarEngineNET.GrammarEngine2 gren, int part_of_speech) - { - int p = gren.GetEntryClass(node.GetEntryID()); - return p == part_of_speech; - } -} - diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/StringExtender.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/StringExtender.cs deleted file mode 100644 index 544b62c..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/StringExtender.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; - - -public static class StringExtender -{ - public static bool NotIn(this string x, params string[] a) - { - foreach (string y in a) - { - if (x == y) - { - return false; - } - } - - return true; - } - - public static bool EqCI(this string x, string y) - { - return x.Equals(y, StringComparison.OrdinalIgnoreCase); - } - - public static bool InCI(this string x, string[] ys) - { - foreach( string a in ys ) - { - if (EqCI(x, a)) return true; - } - - return false; - } -} - diff --git a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SyntaxChecker.cs b/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SyntaxChecker.cs deleted file mode 100644 index 8fa8317..0000000 --- a/CSharpCode/ExtractFactsFromParsing/ExtractFactsFromParsing/SyntaxChecker.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public class SyntaxChecker -{ - private FootPrintTrie trie; - - public SyntaxChecker() { } - - public void LoadTemplates(string path) - { - trie = new FootPrintTrie(); - using (System.IO.StreamReader rdr = new System.IO.StreamReader(path)) - { - while (!rdr.EndOfStream) - { - string template = rdr.ReadLine(); - if (template == null) break; - template = template.Trim(); - if (template.Length > 0) - { - string[] parts = template.Split('#'); - string sample = parts[0].Trim(); - List tokens = sample.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList(); - tokens.Add(FootPrintTrieNode.END_TOKEN); - trie.AddSequence(tokens); - } - } - } - } - - public bool IsEmpty() => trie == null; - - public bool IsGoodSyntax(FootPrint footprint) - { - /* - foreach (var good_footprint in good_footprints) - { - if (footprint.Match(good_footprint)) - { - return true; - } - } - - return false; - */ - - return footprint.Match(trie); ; - } - -} diff --git a/CSharpCode/ExtractFactsFromParsing/README.md b/CSharpCode/ExtractFactsFromParsing/README.md deleted file mode 100644 index fb0dcd3..0000000 --- a/CSharpCode/ExtractFactsFromParsing/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Утилита для сбора предложений-фактов - -Вспомогательная программка для подготовки датасета, используемого при обучении -чат-бота. - -На входе утилита берет результаты синтаксического и морфологического разбора, -выполненного утилитой [Parser](http://solarix.ru/parser.shtml). Исходники парсера -лежат в [отдельном репозитории](https://github.com/Koziev/GrammarEngine/tree/master/src/demo/ai/solarix/argon/ParseText/Parser). - -Результат работы - текстовый файл, в каждой строке которого содержится -одно предложение, по возможности содержащее полный предикат с подлежащим-существительным. -Например: - -``` -Внутри ботинка имеются мягкие анатомические вставки. -Обновлённая широкая рамка продлевает срок работы. -Предоставляются отчётные документы, кассовый чек. -Блондинка и брюнетка в качестве модели прилагаются -``` - -## Запуск - -Утилита реализована как консольное приложение для MS Windows. Для запуска -нужно указать путь к файлу с результатами частеречной разметки, папку, -где будут сохранены результаты, а также файл с синтаксическими шаблонами для -валидации предложений (см. пример такого файла [здесь](https://github.com/Koziev/chatbot/blob/master/CSharpCode/ExtractFactsFromParsing/good_templates.txt)): - -``` --parsing f:\Corpus\parsing\ru\SENT7.parsing.txt -output f:\tmp -templates good_templates.txt -``` - -## Отбор вопросов - -Если требуется отобрать только вопросительные предложения, не проверяя грамматическое -лицо глагола-сказуемого, то следует указать такие аргументы: - -``` --filter q -parsing f:\Corpus\parsing\ru\SENT7.parsing.txt -output f:\tmp -``` - -В данном случае ```-filter q``` задает отбор предложений, оканчивающихся на символ ? - diff --git a/CSharpCode/ExtractFactsFromParsing/good_templates.txt b/CSharpCode/ExtractFactsFromParsing/good_templates.txt deleted file mode 100644 index 6445950..0000000 --- a/CSharpCode/ExtractFactsFromParsing/good_templates.txt +++ /dev/null @@ -1,543 +0,0 @@ -adj,acc n,acc pr,1|2,nom,sing neg v,vf1,acc # Никакие комиссии я не беру -pr,1|2,nom,sing adv v,vf1,acc adj,acc adj,acc n,acc # Я просто выращу самого крутого хищника -p,acc n,acc pr,1|2,nom,sing adv v,vf1 # Про Зиму я вообще молчу -pr,1|2,nom,sing adv v,vf1 p,instr adj,instr n,instr # Я моментально помогу с Вашей проблемой -pr,1|2,nom,sing adv v,vf1,acc n,acc n,dat # Я прекрасно знаю цену моделям -pr,1|2,nom,sing v,vf1,acc p,prep pr,prep n,acc # Я хранила в ней вещи -pr,1|2,nom,sing neg v,vf1,instr adv n,instr # Я не ограничиваюсь лишь свадьбами -pr,1|2,nom,sing v,vf1 n,dat p,gen n,gen # Я обувала дочке для фотосессии -n,acc и n,acc pr,1|2,nom,sing v,vf1,acc # Цепь и гидронатяжитель я менял -adj,acc n,acc pr,1|2,nom,sing neg v,vf1,acc # Иные варианты я не рассматриваю -adj,gen n,gen n,gen pr,1|2,nom,sing neg v,vf1,acc # Никаких номеров карт я не даю -pr,1|2,nom,sing v,vf1,dat,acc n,acc n,gen # Я говорю вам стоимость ремонта -pr,1|2,nom,sing pr,acc v,vf1,acc p,prep n,prep # Я их приобрел в Тайланде -v,vf1 pr,1|2,nom,sing p,prep n,prep n,gen # Нахожусь я в районе Авроры -pr,1|2,nom,sing v,vf1,dat,acc pr,dat adj,acc n,acc # Я предлагаю вам взаимовыгодное сотрудничество -pr,1|2,nom,sing pr,acc p,instr n,instr v,vf1,acc # Я Вам с удовольствием помогу -pr,1|2,nom,sing p,prep n,prep neg v,vf1 # Я в Кирове не бываю -pr,1|2,nom,sing v,vf1,acc p,prep n,prep n,gen # Я носила ее во время беременности -neg v,vf1,acc pr,1|2,nom,sing adj,acc n,acc # Не выкладывал я эти игры -v,vf1,acc pr,1|2,nom,sing pr,acc adv adv # Эксплуатировал я их очень аккуратно -pr,1|2,nom,sing adv v,vf1,acc adv n,acc # Я действительно ищу именно РАБОТУ -pr,1|2,nom,sing adv v,vf1 p,gen n,gen # Я плохо слышу с детства -pr,1|2,nom,sing v,vf1 p,gen n,gen n,gen # Я стоял у ворот Москвы -pr,1|2,nom,sing v,vf1,acc,instr adj,acc n,acc adj,instr n,instr # Я дополню Ваш образ своими украшениями -v,vf1,acc pr,1|2,nom,sing pr,acc p,prep n,prep # Покупала я их в январе -pr,1|2,nom,sing pr,acc adv neg v,vf1,acc # Я тебя никогда не забуду -v,vf1,acc pr,1|2,nom,sing pr,dat adj,acc n,acc # Куплю я тебе новое платье -pr,1|2,nom,sing v,vf1,gen adv adj,gen n,gen # Я жду именно Вашего звонка -pr,1|2,nom,sing neg v,vf1 p,gen n,gen # Я не сдамся без боя -pr,1|2,nom,sing v,vf1,instr adj,instr n,instr n,dat # Я буду верным другом тебе -pr,1|2,nom,sing n,instr pr,1|2,nom,sing p,gen n,gen # Отправлю почтой я с области -pr,1|2,nom,sing v,vf1 p,acc n,acc pr,dat # Я работаю на радость Вам -adv pr,1|2,nom,sing pr,acc neg v,vf1,acc # Дешевле я их не продам -adv pr,1|2,nom,sing v,vf1,acc adj,acc n,acc # Визуально я припоминаю такие нагрузки -pr,1|2,nom,sing neg v,vf1 p,dat n,dat # Я не работаю по шаблону -pr,1|2,nom,sing adv neg v,vf1,acc pr,acc # Я вообще не замечаю его -pr,1|2,nom,sing v,vf1 p,prep n,prep n,instr # Я работал на стройке маляром -pr,1|2,nom,sing v,vf1 p,dat adj,dat n,dat # Я стремлюсь к профессиональному росту -pr,1|2,nom,sing neg v,vf1,acc adj,gen n,gen # Я не беру никаких предоплат -p,prep adj,prep n,prep v,vf1 pr,1|2,nom,sing # В соседней комнате проживаю я -pr,1|2,nom,sing pr,dat v,vf1,acc adj,acc n,acc # Я вам подбираю идеальную форму -pr,1|2,nom,sing v,vf1 p,gen adj,gen n,gen # Я работаю без выходных дней -pr,1|2,nom,sing v,vf1,acc n,acc p,prep n,prep # Я продаю участок в городе -pr,1|2,nom,sing v,vf1,acc pr,acc adv adv # Я носила ее совсем недолго -pr,1|2,nom,sing n,instr v,vf1 p,dat n,dat # Я скотчем приматывала к кроватке -pr,1|2,nom,sing pr,dat v,vf1,dat,acc adj,acc adj,acc n,acc # Я вам предлагаю рабочую оперативную память -adv pr,1|2,nom,sing v,vf1,instr adj,instr n,instr # Особенно я занимаюсь большими объемами -pr,1|2,nom,sing neg v,vf1,acc adj,gen n,gen # Я не боюсь любых дорог -pr,1|2,nom,sing p,dat adj,dat n,dat # Я продаю по старой цене -pr,1|2,nom,sing pr,dat v,vf1,acc adj,acc n,acc # Я Вам предоставлю тестовую батарею -pr,1|2,nom,sing v,vf1,instr n,instr adj,gen n,gen # Я являюсь собственником этого дома -pr,1|2,nom,sing v,vf1 p,prep adj,prep n,prep # Я учусь в парикмахерской школе -v,vf1 pr,1|2,nom,sing adv adv adv # Рисую я пока совсем немного -pr,1|2,nom,sing v,vf1,acc adj,acc n,acc adv # Я предлагаю деревянные карандаши оптом -pr,1|2,nom,sing v,vf1,acc n,acc и n,acc# Я привлекаю любовь и счастье -n,acc pr,1|2,nom,sing adv neg v,vf1,acc # Волосы я дома не держу -pr,1|2,nom,sing v,vf1,acc adv adj,acc n,acc # Я продаю практически новый стул -pr,1|2,nom,sing v,vf1,acc pr,acc p,gen n,gen # Я пойму тебя без слов -n,acc n,gen pr,1|2,nom,sing neg v,vf1,acc # Уголки страниц я не загибаю -pr,1|2,nom,sing v,vf1,acc n,acc adj,gen n,gen # Я вожу машину любой сложности -pr,1|2,nom,sing adv neg v,vf1,acc n,acc # Я больше не ношу каблуки -pr,1|2,nom,sing pr,acc adv neg v,vf1,acc # Я его даже не активировал -pr,1|2,nom,sing pr,dat adv v,vf1,acc n,acc # Я вам только создаю сайт -pr,1|2,nom,sing v,vf1,acc adv adj,acc n,acc # Я продаю уже сложившуюся пару -pr,1|2,nom,sing p,instr n,instr pr,dat v,vf1,dat # Я с удовольствием вам помогу -pr,1|2,nom,sing neg adv pr,acc v,vf1,acc # Я не всегда их вижу -adj,gen n,gen pr,1|2,nom,sing neg v,vf1,acc # Никаких возвратов я не принимаю -pr,1|2,nom,sing adv v,vf1,acc adj,acc n,acc # Я уже встречал подобные сайты -adv p,gen n,gen v,vf1,acc n,acc n,gen # Также я делаю декорирование ресничек -p,gen n,gen pr,1|2,nom,sing neg v,vf1 # Для примерок я не встречаюсь -pr,1|2,nom,sing adv v,vf1,acc adj,acc n,acc # Я лично доставлю Ваш заказ -pr,1|2,nom,sing p,acc adj,acc n,acc v,vf1 # Я на все вопросы отвечаю -pr,1|2,nom,sing adv v,vf1 p,dat n,dat # Я серьезно отношусь к работе -pr,1|2,nom,sing p,acc pr,acc neg v,vf1 # Я на них не отвечаю -pr,1|2,nom,sing adv v,vf1,acc adj,acc n,acc # Я очень жду своего хозяина -pr,1|2,nom,sing p,acc n,acc neg v,vf1 # Я В МЕТРО НЕ СПУСКАЮСЬ -pr,1|2,nom,sing v,vf1,dat adv # Я написал ему позавчера -pr,1|2,nom,sing v,vf1,acc,dat pr,dat pr,acc # Я дарю вам его -pr,1|2,nom,sing n,dat n,acc v,vf1,acc # Я куклам одёжки шью -pr,1|2,nom,sing n,instr n,acc v,vf1,acc # Я рифмами овации срывал -pr,1|2,nom,sing n,acc adv v,vf1,acc # Я поношения безропотно приму -pr,1|2,nom,sing v,vf1,acc,dat pr,acc n,dat # Я обучу тебя фехтованию -neg v,vf1,acc pr,1|2,nom,sing n,gen # Не боюсь я комара -pr,1|2,nom,sing v,vf1,acc pr,acc n,instr # Я сделаю тебя привратником -pr,1|2,nom,sing n,acc adv v,vf1,acc # Я Чехова тоже люблю -pr,1|2,nom,sing n,acc adv v,vf1,acc # Я масло иначе ел -pr,1|2,nom,sing pr,acc v,vf1 n,instr # Я ее нарезаю ломтями -pr,1|2,nom,sing v,vf1 p,prep pr,prep # Я говорю о Ней -n,acc pr,1|2,nom,sing n,instr v,vf1,acc,instr # Стены я водичкой смочил -pr,1|2,nom,sing pr,acc n,instr v,vf1,acc,instr # Я тебя мылом вымою -pr,1|2,nom,sing adj,instr n,instr v,vf1,copula # Я царской плясуньей была -pr,1|2,nom,sing v,vf1,dat adv n,dat # Я позвоню сейчас Вторнику -adv pr,1|2,nom,sing v,vf1,acc pr,acc # Завтра я осуществлю его -v,vf1 pr,1|2,nom,sing p,instr pr,instr # Побежал я за ним -v,vf1 pr,1|2,nom,sing p,instr pr,instr # Связался я с вами -pr,1|2,nom,sing pr,acc v,vf1 pr,acc # Я их дал ему -pr,1|2,nom,sing p,dat pr,dat v,vf1 # Я к вам приеду -pr,1|2,nom,sing neg v,vf1,dat pr,acc # Я не помогал ему -adv pr,1|2,nom,sing v,vf1,acc pr,acc # Теперь я разглядела ее -pr,1|2,nom,sing pr,dat pr,acc v,vf1,dat,acc # Я тебе её подарю -pr,1|2,nom,sing v,vf1 p,prep n,prep n,gen # Я носила во время беременности -pr,1|2,nom,sing p,instr n,instr v,vf1,dat pr,dat # Я с радостью помогу Вам -pr,1|2,nom,sing v,vf1 adv p,prep n,prep # Я работаю только на колесниках -pr,1|2,nom,sing v,vf1,copula adv adj,nom # Я был очень маленький -pr,1|2,nom,sing neg v,vf1,acc n,acc # Я не знаю фамилию -pr,1|2,nom,sing adv v,vf1,dat pr,dat # Я охотно верю тебе -pr,1|2,nom,sing n,gen pr,dat v,vf1,gen # Я добра тебе хочу -pr,1|2,nom,sing pr,acc v,vf1,acc n,dat # Я их прочту бабушке -pr,1|2,nom,sing v,vf1,copula adj,nom n,nom # Я был гордый человек -pr,1|2,nom,sing neg v,vf1,copula,instr adj,instr # Я не буду жалостливым -p,gen pr,gen pr,1|2,nom,sing v,vf1 # Из-за вас я влюбилась -pr,1|2,nom,sing pr,instr adv v,vf1,instr # Я тобой завтра займусь -pr,1|2,nom,sing pr,dat v,vf1,dat,acc n,acc # Я вам покажу драконбол -pr,1|2,nom,sing n,acc n,gen v,vf1,acc # Я сумку Игоря принесла -pr,1|2,nom,sing num n,gen v,vf1,acc # Я три пачки взяла -pr,1|2,nom,sing pr,dat v,vf1,dat,acc n,acc # Я вам куплю шляпку -pr,1|2,nom,sing v,vf1 p,instr num n,gen # Я знакомлюсь с двумя джентльменами -pr,1|2,nom,sing v,vf1,dat,gen pr,dat pr,gen # Я желала тебе добра -adv v,vf1,acc pr,1|2,nom,sing pr,acc # Спокойно выпил я его -pr,1|2,nom,sing v,vf1,acc adv,adv_counter n,gen # Я перелистываю несколько страничек -adv pr,1|2,nom,sing neg v,vf1 # Вниз я не смотрел -pr,1|2,nom,sing v,vf1,copula,instr adv adj,instr # Я был очень несчастным -adv v,vf1,acc pr,1|2,nom,sing pr,acc # Очень полюбил я вас -v,vf1 pr,1|2,nom,sing p,prep pr,prep # Припустился я по ней -v,vf1,dat,acc pr,1|2,nom,sing pr,dat n,acc # Дам я вам одежду -pr,1|2,nom,sing pr,dat v,vf1,dat,acc n,acc # Я тебе подам мешки -pr,1|2,nom,sing v,vf1 adj,instr n,instr # Я заснул сладким сном -pr,1|2,nom,sing n,gen neg v,vf1,acc# Я работы не боюсь -n,dat pr,1|2,nom,sing adv v,vf1 # Учителю я полностью доверяю -p,prep n,prep pr,1|2,nom,sing v,vf1 # В дверях я обернулась -v,vf1 pr,1|2,nom,sing p,dat n,dat # Погнал я к Андрею -v,vf1 pr,1|2,nom,sing neg adv # Раздумывал я не долго -p,gen n,gen pr,1|2,nom,sing v,vf1 # От ужаса я проснулся -adv pr,1|2,nom,sing v,vf1 adv # Сейчас я отправляюсь туда -pr,1|2,nom,sing n,dat adv v,vf1,dat # Я маме всегда помогаю -pr,1|2,nom,sing p,acc pr,acc v,vf1 # Я за нее отвечаю -n,acc pr,1|2,nom,sing v,vf1,acc adv # Маму я нашел быстро -pr,1|2,nom,sing adv v,vf1 adv # Я опять посмотрел вперед -n,acc pr,1|2,nom,sing adv v,vf1,acc # Галю я почему-то побаиваюсь -adv pr,1|2,nom,sing v,vf1,dat n,dat # Иначе я скажу папе -v,vf1 pr,1|2,nom,sing p,acc n,acc # Глянул я под ноги -pr,1|2,nom,sing v,vf1,acc adv n,acc # Я предупреждал заранее майора -pr,1|2,nom,sing n,acc pr,dat v,vf1,acc # Я правду тебе говорю -adv adv pr,1|2,nom,sing v,vf1 # Только теперь я понимаю -neg v,vf1,acc pr,1|2,nom,sing n,gen # Не дождался Я отца -pr,1|2,nom,sing v,vf1,acc pr,acc acc # Я научу тебя снова -v,vf1 pr,1|2,nom,sing p,acc n,acc # Упал я в воду -pr,1|2,nom,sing adv v,vf1,instr n,instr # Я долго болел тифом -pr,1|2,nom,sing p,acc pr,acc v,vf1 # Я за него порадуюсь -pr,1|2,nom,sing v,vf1,acc pr,acc adv # Я ощущал его физически -pr,1|2,nom,sing adv v,vf1 adv # Я лучше отойду назад -n,acc pr,1|2,nom,sing v,vf1,acc adv # Счастливца я найду сейчас -pr,1|2,nom,sing p,acc pr,acc v,vf1 # Я за него останусь -pr,1|2,nom,sing adv v,vf1,instr n,instyr # Я неопределённо пожал плечами -v,vf1,acc pr,1|2,nom,sing pr,acc adv # Запихну я тебя обратно -pr,1|2,nom,sing pr,dat neg v,vf1,dat # Я тебе не верю -v,vf1 pr,1|2,nom,sing p,prep n,prep # Одевался я в коридоре -n,acc pr,1|2,nom,sing adv v,vf1,acc # Билет я дома забыл -pr,1|2,nom,sing n,dat n,acc v,vf1,acc # Я товарищу очередь занял -n,acc pr,1|2,nom,sing pr,dat v,vf1,acc # Паспорт я ему отдам -pr,1|2,nom,sing neg v,vf1,acc pr,acc # Я не верил ему -pr,1|2,nom,sing v,vf1,dat n,dat n,gen # Я подчинился походке Владика -pr,1|2,nom,sing v,vf1 p,gen pr,gen # Я отпрянул от нее -pr,1|2,nom,sing adv v,vf1,acc pr,acc # Я вмиг узнала его -pr,1|2,nom,sing adv pr,acc v,vf1,acc # Я долго его лечила -pr,1|2,nom,sing pr,acc adv v,vf1,acc # Я его как-то стесняюсь -pr,1|2,nom,sing v,vf1 adv adv # Я проспал очень долго -pr,1|2,nom,sing v,vf1 neg adv # Я выздоровел не вдруг -pr,1|2,nom,sing v,vf1,acc n,acc n,instr # Я ищу работу маляром -v,vf1 pr,1|2,nom,sing p,prep n,prep # Носил я в чехле -pr,1|2,nom,sing adv pr,acc v,vf1,acc # Я тоже тебя вижу -pr,1|2,nom,sing v,vf1 adv adv # Я продаю намного дешеле -pr,1|2,nom,sing v,vf1 p,instr pr,instr # Я свяжусь с Вами -pr,1|2,nom,sing v,vf1 p,acc pr,acc # Я поручусь за тебя -pr,1|2,nom,sing v,vf1 p,dat pr,dat # Я шел к тебе -adv pr,1|2,nom,sing adv v,vf1 # Завтра я опять заеду -pr,1|2,nom,sing v,vf1,instr adj,instr n,instr # Я замахал волшебным платком -pr,1|2,nom,sing v,vf1,dat,acc n,acc n,dat # Я подарю жеребенка Джону -pr,1|2,nom,sing v,vf1,acc pr,dat n,acc # Я даю вам слово -v,vf1 pr,1|2,nom,sing p,gen n,gen # Помру я от голода -pr,1|2,nom,sing pr,dat n,gen v,vf1,gen # Я тебе малины принесу -pr,1|2,nom,sing neg adv v,vf1 # Я не особенно огорчался -pr,1|2,nom,sing v,vf1 p,acc pr,acc # Я влюбился в нее -pr,1|2,nom,sing v,vf1 p,instr n,instr # Я приду за тобой -neg v,vf1,acc pr,1|2,nom,sing n,gen # Не утратил я разума -adv pr,1|2,nom,sing pr,dat v,vf1 # Сейчас я тебе покажу -pr,1|2,nom,sing pr,dat n,acc v,vf1,acc # Я тебе уши оторву -pr,1|2,nom,sing v,vf1,acc pr,dat n,acc # Я привез тебе еду -v,vf1 pr,1|2,nom,sing p,instr n,instr # Носила я с удовольствием -pr,1|2,nom,sing v,vf1,acc adj,acc n,acc n,gen # Я предоставляю полный спектр услуг -pr,1|2,nom,sing v,vf1,dat,acc n,dat n,acc # Я дарю людям праздник -p,prep n,prep v,vf1 pr,1|2,nom,sing # В квартире проживаю я -n,acc pr,1|2,nom,sing v,vf1,dat,acc n,dat # Часть я подарил родственникам -pr,1|2,nom,sing v,vf1 p,acc adj,acc n,acc # Я высылаю в любой регион -pr,1|2,nom,sing pr,instr neg v,vf1,instr # Я им не пользовалась -pr,1|2,nom,sing v,vf1,instr n,instr n,gen # Я занимаюсь изготовлением топиариев -adv n,acc pr,1|2,nom,sing v,vf1,acc # Всюду Вселенную я объехал -pr,1|2,nom,sing v,vf1,acc adj,acc adj,acc n,acc # Я осуществляю частную компьютерную помощь -adv pr,1|2,nom,sing v,vf1,instr n,instr # Также я занимаюсь спортом -pr,1|2,nom,sing v,vf1 p,gen n,gen # Я стараюсь для Вас -pr,1|2,nom,sing neg v,vf1,acc n,gen # Я не жалею анестезии -pr,1|2,nom,sing v,vf1 p,acc n,acc # Я плачу за переоформления -pr,1|2,nom,sing neg v,vf1 adv # Я не одевала вообще -pr,1|2,nom,sing v,vf1,dat adj,dat n,dat # Я рекомендую своим пациентам -neg adv pr,1|2,nom,sing v,vf1 # Не правильно я посчитала -pr,1|2,nom,sing p,instr pr,instr v,vf1 # Я с Вами свяжусь -pr,1|2,nom,sing v,vf1,copula adj,instr n,instr # Я являюсь третьим владельцем -v,vf1,dat pr,1|2,nom,sing n,dat # Написал я Кате -v,vf1 pr,1|2,nom,sing p,gen pr,gen # Вышла я от него -p,acc n,acc pr,1|2,nom,sing v,vf1 # Про горки я знаю -pr,1|2,nom,sing v,vf1 n,instr # Я проплыл зайцем -pr,acc pr,1|2,nom,sing v,vf1,acc # Тебя я вздерну -pr,1|2,nom,sing v,vf1,instr pr,instr # Я горжусь тобой -pr,1|2,nom,sing pr,dat adv v,vf1,dat # Я вам по-хорошему завидую -v,vf1,acc pr,1|2,nom,sing adj,acc n,acc # Вывел я свой бронепоезд -pr,1|2,nom,sing adj,acc n,acc v,vf1,acc # Я свой вариант представил -adv pr,acc v,vf1,acc pr,1|2,nom,sing # Тогда их сожру я -pr,1|2,nom,sing pr,acc v,vf1,acc adv # Я ее кормлю регулярно -n,acc neg pr,1|2,nom,sing v,vf1,acc # Сердечко не я нарисовала -adj,acc n,acc pr,1|2,nom,sing v,vf1,acc # Одного вьетнамца я спросил -v,vf1,dat pr,1|2,nom,sing pr,dat # Купил я ему -pr,1|2,nom,sing v,vf1,gen n,gen n,gen # Я жду снижения цены -pr,1|2,nom,sing v,vf1,acc n,acc n,gen # Я нашла расписание автобусов -pr,1|2,nom,sing adv n,instr v,vf1,instr # Я уже слюной захлебнулась -pr,1|2,nom,sing pr,acc adv v,vf1,acc # Я Вас правильно понял -pr,1|2,nom,sing pr,acc v,vf1,acc adv # Я тебя увидел вдруг -pr,1|2,nom,sing adv n,acc v,vf1,acc # Я тоже место застолблю -pr,1|2,nom,sing v,vf1 adv # Я пофотографировала чуток -pr,1|2,nom,sing p,dat n,dat v,vf1 # Я по земле поеду -pr,1|2,nom,sing p,acc n,acc v,vf1 # Я в Дубай лечу -adv pr,1|2,nom,sing v,vf1,gen n,gen # Здесь я попил пивка -pr,1|2,nom,sing p,prep n,prep v,vf1 # Я о жилье спросил -pr,1|2,nom,sing adv v,vf1,gen n,gen # Я тоже боюсь оборотней -pr,1|2,nom,sing v,vf1,acc n,gen # Я подкупил фруктов -adj,acc n,acc pr,1|2,nom,sing v,vf1,acc # Эту красотку я целовал -pr,1|2,nom,sing adv neg v,vf1 # Я еще не подавал -pr,1|2,nom,sing p,gen pr,gen v,vf1 # Я про него говорила -pr,1|2,nom,sing pr,acc adv v,vf1,acc # Я ее так выбирала -adv v,vf1,acc pr,1|2,nom,sing n,acc # Где надыбал я билеты -v,vf1 и pr,1|2,nom,sing # Продолжу и я -pr,1|2,nom,sing и v,vf1 # Я и купил -adv pr,1|2,nom,sing и v,vf1 # Туда я и направляюсь -pr,1|2,nom,sing pr,acc n,acc v,vf1 # Я в инструктора влюбилась -v,vf1,gen pr,1|2,nom,sing n,gen # Побаиваюсь я высоты -adv pr,1|2,nom,sing pr,acc v,vf1,acc # Сейчас я вас научу -pr,1|2,nom,sing v,vf1 p,acc n,acc # Я молчу про отели -pr,1|2,nom,sing adj,nom v,vf1,copula # Я одетый был -pr,1|2,nom,sing adv adv v,vf1 # Я тоже сильно удивилась -adv pr,1|2,nom,sing v,vf1,copula,instr n,instr # Скоро я буду бабушкой -pr,1|2,nom,sing pr,instr v,vf1,instr # Я им любовался -neg v,vf1,acc pr,1|2,nom,sing pr,acc # Не люблю я его -pr,1|2,nom,sing adv v,vf1,acc n,acc # Я тоже ищу попутчика -pr,1|2,nom,sing p,gen n,gen v,vf1 # Я про кузнечиков спросил -v,vf1,acc n,acc pr,1|2,nom,sing # Цитировал Кодекс я -pr,1|2,nom,sing v,vf1 p,dat n,dat # Я смотрю по фотографиям -pr,1|2,nom,sing v,vf1,acc num n,gen # Я вижу два варианта -pr,1|2,nom,sing v,vf1 p,acc n,acc # Я голосую за Ровинь -n,gen pr,1|2,nom,sing neg v,vf1,acc # Ответа я не нашел -pr,1|2,nom,sing pr,instr v,vf1,instr # Я ей горжусь -adj,acc n,acc v,vf1,acc pr,1|2,nom,sing # Эту шкатулку сделал я -v,vf1,gen pr,1|2,nom,sing adv # Проснулся я рано-рано -n,gen pr,1|2,nom,sing v,vf1,gen # Леса я побаивался -pr,1|2,nom,sing pr,instr v,vf1,instr # Я вами клянусь -v,vf1,acc n,acc pr,1|2,nom,sing # Обманул лисицу я -pr,1|2,nom,sing v,vf1,mod v,inf # Я начинаю повторять -adv pr,1|2,nom,sing v,vf1,copula n,instr # Как я был доктором -v,vf1,mod,dat pr,1|2,nom,sing n,dat # Завидую я ребятам -pr,1|2,nom,sing v,vf1 adv # Я умер вчера -n,gen pr,1|2,nom,sing v,vf1 # Сучьев я натаскал -pr,1|2,nom,sing adv v,vf1 # Я зимой носила -pr,1|2,nom,sing v,vf1 adv adv # Я продаю гораздо дешевле -pr,1|2,nom,sing v,vf1,acc n,acc adv # Я ищу работу срочно -pr,1|2,nom,sing v,vf1,acc adj,acc # Я купил другие -n,instr v,vf1,instr pr,1|2 # Мастером являюсь я -pr,1|2 v,vf1,instr adj,instr # Я притворился спящим -n,acc v,vf1,acc pr,1|2,nom,sing # Коммуналку плачу я -pr,1|2,nom,sing v,vf1 p,gen n,gen # Я работаю от души -v,vf1,acc pr,1|2,nom,sing n,acc # Залепила я дыру -pr,1|2,nom,sing pr,acc v,vf1,acc # Я вас вижу -pr,1|2,nom,sing v,vf1,acc pr,acc # Я вижу вас -pr,1|2,nom,sing pr,dat v,vf1,dat # Я вам перезвоню -pr,1|2,nom,sing v,vf1,dat pr,dat # Я перезвоню вам -pr,acc pr,1|2,nom,sing adv v,vf1,acc # Их я тоже продаю -adv v,vf1 pr,1|2,nom,sing # Дальше работаю я -v,vf1,instr pr,instr pr,1|2,nom,sing # Пользовался им я -pr,1|2,nom,sing pr,acc neg v,vf1,acc # Я ее не гонял -v,vf1,acc pr,1|2,nom,sing pr,acc # Видал я тебя -pr,1|2,nom,sing adv pr,dat v,vf1,dat # Я обязательно вам перезвоню -pr,1|2,nom,sing p,prep pr,prep v,vf1 # Я в них тону -neg v,vf1 pr,1|2,nom,sing # Не пойду я -pr,1|2,nom,sing n,dat v,vf1,dat # Я папе скажу -pr,1|2,nom,sing v,vf1,instr n,instr # Я залюбовался им -pr,1|2,nom,sing v,vf1,gen n,gen # Я просил мира -pr,1|2,nom,sing сам v,vf1 # Я сам позвоню -pr,1|2,nom,sing сама v,vf1 # Я сама позвоню -pr,1|2,nom,pl сами v,vf1 # Мы сами позвоним - -pr,1|2,nom,sing сам v,vf1,acc pr,acc # Я сам найду вас -pr,1|2,nom,sing сама v,vf1,acc pr,acc # Я сама найду вам -pr,1|2,nom,sing pr,acc сам v,vf1,acc # Я вас сам найду -pr,1|2,nom,sing pr,acc сама v,vf1,acc # Я вас сама найду -pr,1|2,nom,sing сам pr,acc v,vf1,acc # Я сам вас найду -pr,1|2,nom,sing сама pr,acc v,vf1,acc # Я сама вас найду - -pr,1|2,nom,sing сам v,vf1,dat pr,dat # Я сам перезвоню вам -pr,1|2,nom,sing сама v,vf1,dat pr,dat # Я сама перезвоню вам -pr,1|2,nom,sing pr,dat сам v,vf1,dat # Я вам сам перезвоню -pr,1|2,nom,sing pr,dat сама v,vf1,dat # Я вам сам перезвоню -pr,1|2,nom,sing сам pr,dat v,vf1,dat # Я сам вам перезвоню -pr,1|2,nom,sing сама pr,dat v,vf1,dat # Я сам вам перезвоню - -pr,1|2,nom,sing n,gen v,vf1,acc # Я косточек насушу -v,vf1,acc pr,1|2,nom,sing n,acc # Ободрил я спутников -adv pr,1|2,nom,sing v,vf1,acc n,acc # КАК Я ЛОВИЛ ЧЕЛОВЕЧКОВ -adv pr,1|2,nom,sing n,acc v,vf1,acc # КАК Я ГРИБЫ ИСКАЛ -v,vf1,instr pr,1|2,nom,sing n,instr # Стал я остарбайтером - -pr,1|2,nom,sing n,instr v,vf1,instr # Я верёвочкой мерила - -pr,1|2,nom,sing v,vf1,dat n,dat # Я отомщу им -pr,1|2,nom,sing v,vf1 p,instr n,instr # Я СПЕШУ ЗА СЧАСТЬЕМ - -n,dat pr,1|2,nom,sing v,vf1,dat # Завучу я наврал - - - - - -pr,1|2,nom,sing n,acc v,vf1,acc # Я работу ищу -pr,1|2,nom,sing v,vf1,instr n,instr # Я заклеил моментом. -pr,1|2,nom,sing v,vf1,acc n,acc # Я ищу работу. -pr,1|2,nom,sing v,sing # Мы сидим -pr,1|2,nom,sing v,vf1 # И я читал. -pr,1|2,nom,sing neg v,vf1 # Я не курю -v,vf1 adv pr,1|2,nom,sing # Ездил только я -pr,1|2,nom,sing p,instr n,instr v,vf1 # Я с радостью помогу -pr,1|2,nom,sing v,vf1,acc,~gen n,acc n,gen # Я гарантирую возврат денег -n,nom v,copula adj,nom # Церковь получилась масштабная -v num n,gen # Осталось 12 мангалов -neg v n,nom # не подошел размер -pr,1|2,nom,sing neg v,vf1,acc,~gen n,acc # Я не ношу подделки! -n,acc pr,1|2,nom,sing neg v,vf1,acc #region Габариты я не знаю. -pr,1|2,nom,sing n,acc neg v,vf1,acc # Я габариты не знаю. -n,acc neg v,vf1,acc pr,1|2,nom,sing # Габариты не знаю я. -n,instr pr,1|2,nom,sing neg v,vf1 # Почтой я не отправляю. -pr,1|2,nom,sing n,instr neg v,vf1 # Я почтой не отправляю. -pr,1|2,nom,sing neg v,vf1 n,instr # я не отправляю почтой. -neg v,vf1 pr,1|2,nom,sing n,instr # Не отправляю я почтой. -pr,1|2,nom,sing v,vf1,gen adj,gen n,gen # Я жду Ваших предложений -pr,1|2,nom,sing v,vf1,acc adj,acc n,acc # Я помню чудное мгновенье. -pr,1|2,nom,sing v,vf1 prep n # Я нахожусь в Краснодаре. -pr,1|2,nom,sing adv v,vf1 # Я только продаю! -v,vf1 pr,1|2,nom,sing adv # Радовался я недолго. -adv pr,1|2,nom,sing v,vf1 # Теперь я знаю. -pr,1|2,nom,sing neg v,vf1 # Я не курю. -n,acc pr,1|2,nom,sing v,vf1,acc # Коробку я потерял... -pr,1|2,nom,sing v,vf1,dat n,dat # Я жаловался коллегам. -n,nom adv neg v,vf1 # Петя ничуть не смутился. -n,nom neg v,vf1 adv # Юбка не мнется совершенно! -n,nom neg v,vf1 n,instr # Китайцы не были моряками. -neg v,vf1 n,nom adv # Не мнется юбка совершенно! -adv n,nom neg v,vf1 # Ранее автомобиль не эксплуатировался. -adj,nom n,nom v,acc,~gen n,acc n,gen # Электронное зажигание упрощает запуск инструмента -n,nom n,gen v,acc,~gen adj,acc n,acc # Процессор платы имеет пятифазное питание -adj,nom n,nom v,acc n,acc adv # Ностальгирующая публика принимала певца радушно. -adj,nom adj,nom n,nom v adv # Загадочная славянская душа выворачивается наизнанку. -adj,dat n,dat v,dat adj,nom n,nom # Вашему вниманию представляются Красивые номера -v,acc n,acc n,nom conj n,nom # Рассказывает сказки мама или папа -v,instr n,instr n,nom conj n,nom # Зарастают водорослями пруды и каналы. -n,nom conj n,nom v,dat n,dat # Фотографии и цена соответствуют действительности -n,nom conj n,nom adv v # Мотор и коробка идеально работают -n,nom v,dat n,dat conj n,dat # Басаев угрожает церквям и детям. -n,nom v,acc n,acc conj n,acc # Девушка снимет комнату или квартиру -adj,nom n,nom adv v,acc n,acc # Возродившийся конкурс активно набирает обороты. -adj,nom adj,nom n,nom v,acc n,acc # Внезапная острая боль перехватила дыхание. -adv v adj,nom adj,nom n,nom # Здесь вызревает янтарный игристый напиток. -adj,nom n,nom v,dat adj,dat n,dat # Налоговый кодекс подвергается значительным правкам. -adj,nom adj,nom n,nom v,acc adj,acc n,acc # Ласковый игривый малыш ждет своего хозяина -n,dat n,nom n,gen adv v,dat # Зрителям смелость секретаря очень понравилась. -v adj,nom n,nom adv,a_modif adv # Выглядит такой термостакан очень достойно -adj,nom n,nom adv v,dat n,dat # Яркие расцветки неизменно нравятся деткам -adj,acc n,acc v,acc adj,nom n,nom # Трехмерное изображение создают регулируемые линзы -n,nom v,acc adj,acc adj,acc n,acc # Пленка имеет глубокий черный цвет -n,nom v,instr adj,instr adj,instr n,instr # Металлодетекторы обладают большой пропускной способностью -adj,nom n,nom v,instr adj,instr n,instr # Стальная рама отличается высокой прочностью -v adv,a_modif adj,nom n,nom # Продается очень мощный компьютер. -adv,a_modif adj,nom n,nom v # Очень мощный компьютер продается. -n,nom v adv,a_modif adv,adv_как # Модель выглядит очень гармонично. -n,nom adv v prep n,acc,anim # Брат пристально посмотрел на доктора. -n,nom v adv # Дверца открывается влево. -adv v n,nom # Внутри находится карман. -n,nom adv v # Улица активно застраивается. -n,nom v,acc n,acc # Мыло убивает запахи. -v,acc n,nom n,acc # Заняли бойцы оборону. -n,acc v,acc n,nom # Оборону заняли бойцы. -n,nom v,dat n,dat # Мама удивилась вопросу. -n,nom n,instr v # Дорога зимой чистится. -n,nom v,instr n,instr # Ручка регулируется кнопкой. -n,instr v n,nom # Ночью ударит мороз. -n,nom n,gen v,acc n,acc # Бригада плотников ищет работу -n,nom v,instr adj,instr n,instr # Занятия проводятся опытными тренерами -n,nom adv v,acc n,acc # Ткань хорошо держит форму -adv v,acc n,nom n,acc # Быстро красит машина материю! -n,nom v,acc n,acc adv # Анастасия обрела самообладание быстро. -n,nom neg v,instr n,instr # Стекло не зарастает водорослями -n,nom neg v,instr adj,instr n,instr # Предложение не является публичной офертой. -n,nom n,gen v,instr n,instr # Скорость подачи регулируется инвертером -n,nom neg v,acc n # Машинка не нагревает воду -n,nom n,acc neg v,acc # Двигатель масло не расходует -n,gen n,nom neg v,acc # Вложений машина не потребует -n,nom n,dat neg v,acc # Паутина работе не мешает -n,dat neg v,acc n,nom # Малышу не подошел размер -n,nom v,acc adj,acc n,acc # Часы имеют оригинальное происхождение -adj,nom n,nom v n,instr # Пластиковые окна закрываются ролставнями -adj,nom n,nom v adv # Задняя дверь открывается вверх. -adj,nom n,nom adv v # Задняя дверь вверх открывается. -adv v adj,nom n,nom # Вверх открывается задняя дверь. -v adv adj,nom n,nom # открывается вверх задняя дверь. -n,nom n,gen v adv # Панель управления откидывается вверх. -adv v n,nom n,gen # Вверх откидывается панель управления -n,nom n,gen adv v # Панель управления вверх откидывается. -adv n,nom n,gen v # Вверх панель управления откидывается -n,nom v n,acc n,gen # Собственник заключает договор аренды -adj,nom n,nom v,acc n,acc # Высокие волны заливали пляж -n,acc v,acc adj,nom n,nom # Сетку обслуживает опытный человек -adj,nom n,nom v,acc adj,acc n,acc # Массажные головки имеют встроенный нагрев -n,nom v,acc n,acc adv # Кот повел ребят вверх. -n,nom adv v,acc n,acc # Кот вверх повел ребят. -adv n,nom v,acc n,acc # Вверх кот повел ребят. -adv v,acc n,nom n,acc # Вверх повел ребят кот. -n,acc adv n,nom v,acc # Ребят вверх кот повел. -n,acc n,nom adv v,acc # Ребят кот вверх повел. -v adj,nom n,nom # продается детская коляска, -n,nom neg v # Пух не лезет -n,instr n,nom v # Зимой дорога чистится -adj,nom n,nom v # Стиральная машина есть -v n,nom n,instr # Складывается коляска книжкой -v n,nom n,gen # Есть возможность чиповки -n,nom v n,instr # Павильоны комплектуются электрикой -v n,nom adv # Имеется подсветка сверху -n,nom p,acc n,acc v # Разрешение на продажу есть -n,nom n,gen v # Кабель питания прилагается -neg v adj,nom n,nom # Не работает фронтальная камера -v n,nom p,instr n,instr # Требуется монтажник с опытом -n,nom v,gen n,gen # Квартира требует ремонта -adj,nom n,nom neg v # Новый наждак не использовался -n,nom v adv # Аккумулятор держит нормально -n,nom adv v # ПАРК ПОСТОЯННО ОБНОВЛЯЕТСЯ!! -v n,nom p,dat n,dat # Имеется регулировка по высоте -v n,nom adj,nom # Продается пистолет монтажный -n,nom v p,prep n,prep # Диски находятся в Буинске -n,acc adv neg v # Полукомбинезон почти не носили -v adj,nom adj,nom n,nom # Продается красивый виртуальный номер -v n,nom # Требуются каменщики! -v n,acc adj,nom n,nom # Ищет дом добрый кобель -neg v n,nom n,gen # Не работает кнопка блокировки -n,nom p,gen n,gen v # Защита от детей есть -v adj,nom n,nom n,gen # Имеется полный пакет документов -p,prep n,prep v n,nom # В квартире требуется ремонт -v adv n,nom # Остается частично мебель -v adj,nom n,nom n,gen # Имеются другие разновидности тортов -n,dat v,dat n,nom # Покупателю останется мебель -v n,nom p,acc n,acc # Требуется уборщица в отель -n,nom v p,acc n,acc # Документы готовятся на продажу -n,nom adj,gen n,gen v # Поддержка многоядерных процессоров есть -p,dat n,dat v n,nom # К квартире прилагается гараж -v adv,adv_counter n,gen # Имеется несколько штук -n,nom n,acc v # Каменщики работу ищут -n,nom v # Общежитие предоставляется. -n,nom n,acc v # Батарейка заряд держит -v n,acc n,nom # Ищет дом котик -n,nom v p,gen n,gen # Сроки зависят от загруженности -v n,nom p,prep n,prep # Мерцает подсветка на трубке -adv n,nom v # Сзади бант регулируется -n,nom v adv # Аккумулятор держит идеально -n,nom adj,nom v # Ботиночки теплые отстегиваются -adj,nom adj,nom n,nom v # Встроенная сетевая карта есть -v adv,adv_counter adj,gen n,gen # Есть много других моделей -v n,nom p,prep n,prep # Есть сколы на углах -n,nom v prep,instr n,instr # Гитара поставляется с кейсом - -v n,nom p,gen n,gen # Есть самовывоз со склада -n,nom n,gen p,acc n,acc v # Возможность крепления на стену есть -n,nom p,prep n,prep v # Помощь в выращивании гарантируется -n,nom v n,instr adv # Размер регулируется ремешком сзади -n,nom v p,dat n,dat # Ножки регулируются по высоте -v n,nom p,gen n,gen # Есть место для бассейна -n,nom p,acc n,acc neg v # Боковины в комплект не входят -n,nom adj,gen n,gen neg v # Возможность наложенного платежа не рассматривается -p,acc n,acc v n,nom # В комплект входит шторка -n,nom adv v n,instr # Витрина дополнительно комплектуется подсветкой -n,nom v p,dat n,dat # Угги продаются по распродаже -n,nom v n,instr n,gen # Пересылка осуществляется Почтой России -n,nom v adj,instr n,instr # Доставка осуществляется Транспортной компанией -n,nom n,gen n,gen v # Угол наклона дуги регулируется -v n,nom adj,gen n,gen # Ведется распродажа зимнего ассортимента -n,nom n,gen v n,dat # Качество товара соответствует фотографиям -n,nom v adv,adv_counter n,gen # Магниты занимает мало места -n,nom v p,dat n,dat # Продажи подходят к концу -adv n,dat v n,nom # Теперь мучениям пришел конец -n,nom p,dat n,dat v # Инструкция по сборке прилагается - -n,nom n,gen neg v # Подсветка индикаторов не горит -v num adj,gen n,gen # Продаются два дачных участка -n,nom v prep,instr n,instr # МАМА ПРОЖИВАЕТ С КОТЕНКОМ -n,nom v,gen adj,gen n,gen # Машина требует некоторых вложений -n,nom n,gen neg v # Автомобиль вложений не требует -p,prep n,prep v adj,nom n,nom # В наличии имеются другие цвета -n,nom v num n,gen # Спинка имеет 4 положения -p,instr n,instr v n,nom # Под окном есть огород -p,gen n,gen v n,nom # Внизу рукава есть утяжка -v n,nom conj n,nom # Есть полки и тумбочки -n,nom conj n,nom v # Механика и экспонометр работают -p,acc n,acc n,nom v adv # На иномарки установка обговаривается отдельно -n,nom n,gen neg v # Опыт работы не требуется -v p,instr n,instr n,nom # Ходила с телефоном жена -adv n,nom v adv # Реально платье стоит дороже -p,gen n,gen v n,nom # У модели открывается капот - -adj,nom n,nom v,copula adj,instr # Данный вид считается безобидным -v n,nom n,gen n,gen # Есть функция отключения боя -n,nom v p,prep adj,prep n,prep # Техника находится в хорошем состоянии -adv v adv,adv_counter n,gen # Сзади есть несколько зацепок -n,nom v,dat adj,dat n,dat # Картридж подлежит многократной заправке -n,nom v adv,a_modif adv # Модель выглядит очень гармонично -n,nom adv,a_modif adv v # Бусины очень красиво переливаются -neg v adj,gen n,gen # Не требуется дополнительных вложений -n,nom v p,instr n,instr # Ребенок носил с удовольствием -adj,nom n,nom n,gen v,acc n,acc # Федеральная служба эвакуаторов Ищет партнёров -n,nom v adv adv # Демонтаж осуществляется также легко -v adj,nom n,nom p,gen n,gen # Предлагается титулованный кобель для вязок -n,nom n,gen v,copula n,adj,instr # Конструкция снегоката является разборной -n,nom adv v,dat n,dat # Товар полностью соответствует фотографии -p,prep n,prep n,nom v # При закрытии экран гаснет -v adj,nom adj,nom n,nom # Остается небольшой кухонный гарнитур -n,nom v p,acc num n,gen # Спинка поднимается на три уровня -v adj,nom n,nom adj,gen n,gen # Продается парикмахерское кресло оранжевого цвета - -n,nom v adv adv # Укладка продержится невероятно долго -n,nom n,gen v,copula adj,instr # Конструкция снегоката является разборной -adj,nom n,nom v,dat n,dat # Вторая комната сдается девушке -n,nom v adv n,instr # Сдача осуществляется напрямую собственником -v n,nom p,prep adj,prep n,prep # Продается люлька в отличном состоянии diff --git a/CSharpCode/GeneratePersonChangeDataset/.vs/GeneratePersonChangeDataset/v14/.suo b/CSharpCode/GeneratePersonChangeDataset/.vs/GeneratePersonChangeDataset/v14/.suo deleted file mode 100644 index 6329321..0000000 Binary files a/CSharpCode/GeneratePersonChangeDataset/.vs/GeneratePersonChangeDataset/v14/.suo and /dev/null differ diff --git a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset.sln b/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset.sln deleted file mode 100644 index b70a997..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GeneratePersonChangeDataset", "GeneratePersonChangeDataset\GeneratePersonChangeDataset.csproj", "{BE40C2D9-52BB-409C-99B7-4FB2BE37CE11}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BE40C2D9-52BB-409C-99B7-4FB2BE37CE11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE40C2D9-52BB-409C-99B7-4FB2BE37CE11}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE40C2D9-52BB-409C-99B7-4FB2BE37CE11}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE40C2D9-52BB-409C-99B7-4FB2BE37CE11}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/App.config b/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/App.config deleted file mode 100644 index 88fa402..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/GeneratePersonChangeDataset.cs b/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/GeneratePersonChangeDataset.cs deleted file mode 100644 index edc5848..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/GeneratePersonChangeDataset.cs +++ /dev/null @@ -1,359 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -class GeneratePersonChangeDataset -{ - private static List GetTerms(SolarixGrammarEngineNET.SyntaxTreeNode n) - { - List res = new List(); - res.Add(n); - - foreach (var child in n.leafs) - { - res.AddRange(GetTerms(child)); - } - - return res; - } - - - static int GetPOS(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node) - { - int id_entry = node.GetEntryID(); - int pos_id = gren.GetEntryClass(id_entry); - return pos_id; - } - - static bool IsPronoun_1s_nom(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node) - { - return GetPOS(gren, node) == SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru && - node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru && - node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.NOMINATIVE_CASE_ru && - node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru; - } - - static bool IsVerb_1s(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node) - { - if (GetPOS(gren, node) == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_ru) - { - if (node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru && - node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru && - node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.VB_INF_ru) - { - return true; - } - } - - return false; - } - - - static string ChangePronounTo(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node, string to_person) - { - List coords = new List(); - List states = new List(); - - if (to_person == "1s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru); - } - else if (to_person == "2s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else if (to_person == "3s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else - { - throw new ArgumentException("to_person"); - } - - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NOMINATIVE_CASE_ru); - - string new_word = ""; - List fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), node.GetEntryID(), coords, states); - if (fx != null && fx.Count > 0) - { - new_word = fx[0].ToLower(); - } - else - { - new_word = null; - } - - return new_word; - } - - - static string ChangeVerbTo(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node, string to_person) - { - List coords = new List(); - List states = new List(); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru); - states.Add(node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru)); - - if (node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) != SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru) - { - if (to_person == "1s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru); - } - else if (to_person == "2s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else if (to_person == "3s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else - { - throw new ArgumentException("to_person"); - } - } - - - foreach (var p in node.GetPairs()) - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru || - p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru) - { - coords.Add(p.CoordID); - states.Add(p.StateID); - } - } - - string v2 = ""; - List fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), node.GetEntryID(), coords, states); - if (fx != null && fx.Count > 0) - { - v2 = fx[0].ToLower(); - } - else - { - v2 = null; - } - - return v2; - } - - - - - static int Main(string[] args) - { - List input_files = new List(); - string output_file = null; - string dictionary_xml = ""; - string from_person = ""; - string to_person = ""; - - #region Command_Line_Options - for (int i = 0; i < args.Length; ++i) - { - if (args[i] == "-input_file") - { - input_files.Add(args[i + 1]); - i++; - } - else if (args[i] == "-output_file") - { - output_file = args[i + 1]; - i++; - } - else if (args[i] == "-dict") - { - dictionary_xml = args[i + 1]; - i++; - } - else if (args[i] == "-from_person") - { - from_person = args[i + 1]; - i++; - } - else if (args[i] == "-to_person") - { - to_person = args[i + 1]; - i++; - } - else - { - throw new ApplicationException(string.Format("Unknown option {0}", args[i])); - } - } - - if (string.IsNullOrEmpty(from_person)) - { - Console.WriteLine("'from_person' parameter can not be empty"); - return 1; - } - - if (string.IsNullOrEmpty(to_person)) - { - Console.WriteLine("'to_person' parameter can not be empty"); - return 1; - } - #endregion Command_Line_Options - - - - // Загружаем грамматический словарь - Console.WriteLine("Loading dictionary {0}", dictionary_xml); - SolarixGrammarEngineNET.GrammarEngine2 gren = new SolarixGrammarEngineNET.GrammarEngine2(); - gren.Load(dictionary_xml, true); - - - int id_language = SolarixGrammarEngineNET.GrammarEngineAPI.RUSSIAN_LANGUAGE; - SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags morph_flags = SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_COMPLETE_ONLY | SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_MODEL; - SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags syntax_flags = SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags.DEFAULT; - int MaxAlt = 40; - int constraints = 600000 | (MaxAlt << 22); - - using (System.IO.StreamWriter wrt = new System.IO.StreamWriter(output_file)) - { - int nb_samples = 0; - foreach (string input_path in input_files) - { - Console.WriteLine("Processing {0}", input_path); - - using (System.IO.StreamReader rdr = new System.IO.StreamReader(input_path)) - { - while (!rdr.EndOfStream) - { - string line0 = rdr.ReadLine(); - if (line0 == null) break; - - string line = line0.Trim(); - string phrase2 = line; - - using (SolarixGrammarEngineNET.AnalysisResults linkages = gren.AnalyzeSyntax(phrase2, id_language, morph_flags, syntax_flags, constraints)) - { - if (linkages.Count == 3) - { - SolarixGrammarEngineNET.SyntaxTreeNode root = linkages[1]; - List terms = GetTerms(root).OrderBy(z => z.GetWordPosition()).ToList(); - - if (from_person == "1s") - { - // Ищем подлежащее-местоимение "я" или проверяем, что глагол стоит в первом лице. - bool is_good_sample = false; - if (IsVerb_1s(gren, root)) - { - is_good_sample = true; - } - - if (!is_good_sample) - { - for (int ichild = 0; ichild < root.leafs.Count; ++ichild) - { - if (root.GetLinkType(ichild) == SolarixGrammarEngineNET.GrammarEngineAPI.SUBJECT_link) - { - SolarixGrammarEngineNET.SyntaxTreeNode sbj = root.leafs[ichild]; - if (IsPronoun_1s_nom(gren, sbj)) - { - is_good_sample = true; - break; - } - } - } - } - - if (is_good_sample) - { - // Не должно быть местоимений в других падежах, чтобы не получалось: - // Я тебя съем ! ты тебя съешь ! - foreach( var term in terms ) - { - if( GetPOS(gren,term)==SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru && !IsPronoun_1s_nom(gren, term) ) - { - is_good_sample = false; - break; - } - } - } - - if (is_good_sample) - { - List src_words = new List(); - List res_words = new List(); - foreach (var term in terms) - { - src_words.Add(term.GetWord()); - - if (IsPronoun_1s_nom(gren, term)) - { - string new_word = ChangePronounTo(gren, term, to_person); - res_words.Add(new_word); - } - else if (IsVerb_1s(gren, term)) - { - string new_word = ChangeVerbTo(gren, term, to_person); - res_words.Add(new_word); - } - else - { - res_words.Add(term.GetWord()); - } - } - - - int nb_empty = res_words.Count(z => string.IsNullOrEmpty(z)); - if (nb_empty == 0) - { - string src_str = string.Join(" ", src_words); - string res_str = string.Join(" ", res_words); - wrt.WriteLine("{0}\t{1}", src_str, res_str); - wrt.Flush(); - nb_samples++; - if( (nb_samples%10)==0 ) - { - Console.Write("{0} samples stored\r", nb_samples); - } - } - } - } - } - } - } - } - - Console.WriteLine(); - } - } - - - return 0; - } -} diff --git a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/GeneratePersonChangeDataset.csproj b/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/GeneratePersonChangeDataset.csproj deleted file mode 100644 index 47e3b1e..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/GeneratePersonChangeDataset.csproj +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Debug - AnyCPU - {BE40C2D9-52BB-409C-99B7-4FB2BE37CE11} - Exe - Properties - GeneratePersonChangeDataset - GeneratePersonChangeDataset - v4.5.2 - 512 - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\..\..\..\MVoice\lem\lib64\gren_consts.dll - - - ..\..\..\..\..\MVoice\lem\lib64\gren_fx.dll - - - ..\..\..\..\..\MVoice\lem\lib64\gren_fx2.dll - - - ..\packages\Microsoft.Experimental.Collections.1.0.3-alpha\lib\portable-net45+win8+wp8\Microsoft.Experimental.Collections.dll - True - - - - - - - - - - - - - - - - - - - - - copy e:\MVoice\lem\lib64\solarix_grammar_engine.dll $(TargetDir) -copy e:\MVoice\lem\lib64\sqlite.dll $(TargetDir) - - - - \ No newline at end of file diff --git a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/Properties/AssemblyInfo.cs b/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/Properties/AssemblyInfo.cs deleted file mode 100644 index a2365f0..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("GeneratePersonChangeDataset")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("GeneratePersonChangeDataset")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("be40c2d9-52bb-409c-99b7-4fb2be37ce11")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/packages.config b/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/packages.config deleted file mode 100644 index e2c3b21..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/GeneratePersonChangeDataset/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/License-Stable.rtf b/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/License-Stable.rtf deleted file mode 100644 index 3aec6b6..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/License-Stable.rtf +++ /dev/null @@ -1,118 +0,0 @@ -{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Calibri;}{\f3\fnil\fcharset0 Calibri;}{\f4\fnil\fcharset2 Symbol;}} -{\colortbl ;\red31\green73\blue125;\red0\green0\blue255;} -{\*\listtable -{\list\listhybrid -{\listlevel\levelnfc0\leveljc0\levelstartat1{\leveltext\'02\'00.;}{\levelnumbers\'01;}\jclisttab\tx360} -{\listlevel\levelnfc4\leveljc0\levelstartat1{\leveltext\'02\'01.;}{\levelnumbers\'01;}\jclisttab\tx363} -{\listlevel\levelnfc2\leveljc0\levelstartat1{\leveltext\'02\'02.;}{\levelnumbers\'01;}\jclisttab\tx720}\listid1 } -{\list\listhybrid -{\listlevel\levelnfc0\leveljc0\levelstartat1{\leveltext\'02\'00.;}{\levelnumbers\'01;}\jclisttab\tx363} -{\listlevel\levelnfc4\leveljc0\levelstartat1{\leveltext\'02\'01.;}{\levelnumbers\'01;}\jclisttab\tx363}\listid2 }} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} -{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}{\s3 heading 3;}} -{\*\generator Riched20 6.2.9200}\viewkind4\uc1 -\pard\nowidctlpar\sb120\sa120\b\f0\fs24 MICROSOFT SOFTWARE LICENSE TERMS\par - -\pard\brdrb\brdrs\brdrw10\brsp20 \nowidctlpar\sb120\sa120 MICROSOFT .NET LIBRARY \par - -\pard\nowidctlpar\sb120\sa120\fs19 These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent363{\pntxtb\'B7}}\nowidctlpar\fi-363\li720\sb120\sa120\b0 updates,\par -{\pntext\f4\'B7\tab}supplements,\par -{\pntext\f4\'B7\tab}Internet-based services, and\par -{\pntext\f4\'B7\tab}support services\par - -\pard\nowidctlpar\sb120\sa120\b for this software, unless other terms accompany those items. If so, those terms apply.\par -BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\par - -\pard\brdrt\brdrs\brdrw10\brsp20 \nowidctlpar\sb120\sa120 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.\par - -\pard -{\listtext\f0 1.\tab}\jclisttab\tx360\ls1\nowidctlpar\s1\fi-357\li357\sb120\sa120 INSTALLATION AND USE RIGHTS. \par - -\pard -{\listtext\f0 a.\tab}\jclisttab\tx363\ls1\ilvl1\nowidctlpar\s2\fi-363\li720\sb120\sa120 Installation and Use.\b0\fs20 You may install and use any number of copies of the software to design, develop and test your programs.\par -{\listtext\f0 b.\tab}\b\fs19 Third Party Programs.\b0\fs20 The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for the third party program are included for your information only.\b\fs19\par - -\pard -{\listtext\f0 2.\tab}\jclisttab\tx360\ls1\nowidctlpar\s1\fi-357\li357\sb120\sa120\fs20 ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.\par - -\pard -{\listtext\f0 a.\tab}\jclisttab\tx363\ls1\ilvl1\nowidctlpar\s2\fi-363\li720\sb120\sa120 DISTRIBUTABLE CODE.\~ \b0 The software is comprised of Distributable Code. \f1\ldblquote\f0 Distributable Code\f1\rdblquote\f0 is code that you are permitted to distribute in programs you develop if you comply with the terms below.\b\par - -\pard -{\listtext\f0 i.\tab}\jclisttab\tx720\ls1\ilvl2\nowidctlpar\s3\fi-357\li1077\sb120\sa120\tx1077 Right to Use and Distribute. \par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent360{\pntxtb\'B7}}\nowidctlpar\fi-357\li1434\sb120\sa120\b0 You may copy and distribute the object code form of the software.\par -{\pntext\f4\'B7\tab}Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.\par - -\pard\nowidctlpar\s3\fi-357\li1077\sb120\sa120\tx1077\b ii.\tab Distribution Requirements.\b0 \b For any Distributable Code you distribute, you must\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent360{\pntxtb\'B7}}\nowidctlpar\fi-357\li1434\sb120\sa120\b0 add significant primary functionality to it in your programs;\par -{\pntext\f4\'B7\tab}require distributors and external end users to agree to terms that protect it at least as much as this agreement;\par -{\pntext\f4\'B7\tab}display your valid copyright notice on your programs; and\par -{\pntext\f4\'B7\tab}indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\rquote fees, related to the distribution or use of your programs.\par - -\pard\nowidctlpar\s3\fi-357\li1077\sb120\sa120\tx1077\b iii.\tab Distribution Restrictions.\b0 \b You may not\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent360{\pntxtb\'B7}}\nowidctlpar\fi-357\li1434\sb120\sa120\b0 alter any copyright, trademark or patent notice in the Distributable Code;\par -{\pntext\f4\'B7\tab}use Microsoft\rquote s trademarks in your programs\rquote names or in a way that suggests your programs come from or are endorsed by Microsoft;\par -{\pntext\f4\'B7\tab}include Distributable Code in malicious, deceptive or unlawful programs; or\par -{\pntext\f4\'B7\tab}modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent360{\pntxtb\'B7}}\nowidctlpar\fi-358\li1792\sb120\sa120 the code be disclosed or distributed in source code form; or\cf1\f2\par -{\pntext\f4\'B7\tab}\cf0\f0 others have the right to modify it.\cf1\f2\par - -\pard\nowidctlpar\s1\fi-357\li357\sb120\sa120\cf0\b\f0 3.\tab\fs19 SCOPE OF LICENSE. \b0 The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent363{\pntxtb\'B7}}\nowidctlpar\fi-363\li720\sb120\sa120 work around any technical limitations in the software;\par -{\pntext\f4\'B7\tab}reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\par -{\pntext\f4\'B7\tab}publish the software for others to copy;\par -{\pntext\f4\'B7\tab}rent, lease or lend the software;\par -{\pntext\f4\'B7\tab}transfer the software or this agreement to any third party; or\par -{\pntext\f4\'B7\tab}use the software for commercial software hosting services.\par - -\pard\nowidctlpar\s1\fi-357\li357\sb120\sa120\b\fs20 4.\tab\fs19 BACKUP COPY. \b0 You may make one backup copy of the software. You may use it only to reinstall the software.\par -\b\fs20 5.\tab\fs19 DOCUMENTATION. \b0 Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\par -\b\fs20 6.\tab\fs19 EXPORT RESTRICTIONS. \b0 The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see {\cf2\ul\fs20{\field{\*\fldinst{HYPERLINK www.microsoft.com/exporting }}{\fldrslt{www.microsoft.com/exporting}}}}\f0\fs19 .\cf2\ul\fs20\par -\cf0\ulnone\b 7.\tab\fs19 SUPPORT SERVICES. \b0 Because this software is \ldblquote as is,\rdblquote we may not provide support services for it.\par -\b\fs20 8.\tab\fs19 ENTIRE AGREEMENT. \b0 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\par -\b\fs20 9.\tab\fs19 APPLICABLE LAW.\par - -\pard -{\listtext\f0 a.\tab}\jclisttab\tx363\ls2\ilvl1\nowidctlpar\s2\fi-363\li720\sb120\sa120 United States. \b0 If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\par -{\listtext\f0 b.\tab}\b Outside the United States. If you acquired the software in any other country, the laws of that country apply.\par - -\pard\nowidctlpar\s1\fi-357\li357\sb120\sa120\fs20 10.\tab\fs19 LEGAL EFFECT. \b0 This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\par -\b\fs20 11.\tab\fs19 DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \ldblquote AS-IS.\rdblquote YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.\par - -\pard\nowidctlpar\li357\sb120\sa120 FOR AUSTRALIA \endash YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS.\par - -\pard\nowidctlpar\s1\fi-357\li357\sb120\sa120\fs20 12.\tab\fs19 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES.\par - -\pard\nowidctlpar\li357\sb120\sa120\b0 This limitation applies to\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent363{\pntxtb\'B7}}\nowidctlpar\fi-363\li720\sb120\sa120 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\par -{\pntext\f4\'B7\tab}claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\par - -\pard\nowidctlpar\sb120\sa120 It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\par -\lang9 Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French.\par -Remarque : Ce logiciel \'e9tant distribu\'e9 au Qu\'e9bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7ais.\par - -\pard\nowidctlpar\s1\sb120\sa120\b\lang1033 EXON\'c9RATION DE GARANTIE. \b0 Le logiciel vis\'e9 par une licence est offert \'ab tel quel \'bb. Toute utilisation de ce logiciel est \'e0 votre seule risque et p\'e9ril. Microsoft n\rquote accorde aucune autre garantie expresse. Vous pouvez b\'e9n\'e9ficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9 marchande, d\rquote ad\'e9quation \'e0 un usage particulier et d\rquote absence de contrefa\'e7on sont exclues.\par -\b LIMITATION DES DOMMAGES-INT\'c9R\'caTS ET EXCLUSION DE RESPONSABILIT\'c9 POUR LES DOMMAGES. \b0 Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9tendre \'e0 aucune indemnisation pour les autres dommages, y compris les dommages sp\'e9ciaux, indirects ou accessoires et pertes de b\'e9n\'e9fices.\par - -\pard\nowidctlpar\sb120\sa120\lang9 Cette limitation concerne :\par - -\pard{\pntext\f4\'B7\tab}{\*\pn\pnlvlblt\pnf4\pnindent360{\pntxtb\'B7}}\nowidctlpar\li720\sb120\sa120 tout ce qui est reli\'e9 au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et\par -{\pntext\f4\'B7\tab}les r\'e9clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9 stricte, de n\'e9gligence ou d\rquote une autre faute dans la limite autoris\'e9e par la loi en vigueur.\par - -\pard\nowidctlpar\sb120\sa120 Elle s\rquote applique \'e9galement, m\'eame si Microsoft connaissait ou devrait conna\'eetre l\rquote\'e9ventualit\'e9 d\rquote un tel dommage. Si votre pays n\rquote autorise pas l\rquote exclusion ou la limitation de responsabilit\'e9 pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l\rquote exclusion ci-dessus ne s\rquote appliquera pas \'e0 votre \'e9gard.\par - -\pard\nowidctlpar\s1\sb120\sa120\b\lang1033 EFFET JURIDIQUE. \b0 Le pr\'e9sent contrat d\'e9crit certains droits juridiques. Vous pourriez avoir d\rquote autres droits pr\'e9vus par les lois de votre pays. Le pr\'e9sent contrat ne modifie pas les droits que vous conf\'e8rent les lois de votre pays si celles-ci ne le permettent pas.\par - -\pard\nowidctlpar\sb120\sa120\b\fs20\lang1036\par - -\pard\sa200\sl276\slmult1\b0\f3\fs22\lang9\par -} - \ No newline at end of file diff --git a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/Microsoft.Experimental.Collections.1.0.3-alpha.nupkg b/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/Microsoft.Experimental.Collections.1.0.3-alpha.nupkg deleted file mode 100644 index 325d231..0000000 Binary files a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/Microsoft.Experimental.Collections.1.0.3-alpha.nupkg and /dev/null differ diff --git a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/lib/portable-net45+win8+wp8/Microsoft.Experimental.Collections.dll b/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/lib/portable-net45+win8+wp8/Microsoft.Experimental.Collections.dll deleted file mode 100644 index d15d1e4..0000000 Binary files a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/lib/portable-net45+win8+wp8/Microsoft.Experimental.Collections.dll and /dev/null differ diff --git a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/lib/portable-net45+win8+wp8/Microsoft.Experimental.Collections.xml b/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/lib/portable-net45+win8+wp8/Microsoft.Experimental.Collections.xml deleted file mode 100644 index a986b9f..0000000 --- a/CSharpCode/GeneratePersonChangeDataset/packages/Microsoft.Experimental.Collections.1.0.3-alpha/lib/portable-net45+win8+wp8/Microsoft.Experimental.Collections.xml +++ /dev/null @@ -1,864 +0,0 @@ - - - - Microsoft.Experimental.Collections - - - - - A MultiValueDictionary can be viewed as a that allows multiple - values for any given unique key. While the MultiValueDictionary API is - mostly the same as that of a regular , there is a distinction - in that getting the value for a key returns a of values - rather than a single value associated with that key. Additionally, - there is functionality to allow adding or removing more than a single - value at once. - - The MultiValueDictionary can also be viewed as a IReadOnlyDictionary<TKey,IReadOnlyCollection<TValue>t> - where the is abstracted from the view of the programmer. - - For a read-only MultiValueDictionary, see . - - The type of the key. - The type of the value. - - - - The private dictionary that this class effectively wraps around - - - - - The function to construct a new - - - - - - The current version of this MultiValueDictionary used to determine MultiValueDictionary modification - during enumeration - - - - - Initializes a new instance of the - class that is empty, has the default initial capacity, and uses the default - for . - - - - - Initializes a new instance of the class that is - empty, has the specified initial capacity, and uses the default - for . - - Initial number of keys that the will allocate space for - capacity must be >= 0 - - - - Initializes a new instance of the class - that is empty, has the default initial capacity, and uses the - specified . - - Specified comparer to use for the s - If is set to null, then the default for is used. - - - - Initializes a new instance of the class - that is empty, has the specified initial capacity, and uses the - specified . - - Initial number of keys that the will allocate space for - Specified comparer to use for the s - Capacity must be >= 0 - If is set to null, then the default for is used. - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<KeyValuePair<TKey, IReadOnlyCollection<TValue>>> and uses the - default for the type. - - IEnumerable to copy elements into this from - enumerable must be non-null - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<KeyValuePair<TKey, IReadOnlyCollection<TValue>>> and uses the - specified . - - IEnumerable to copy elements into this from - Specified comparer to use for the s - enumerable must be non-null - If is set to null, then the default for is used. - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<IGrouping<TKey, TValue>> and uses the - default for the type. - - IEnumerable to copy elements into this from - enumerable must be non-null - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<IGrouping<TKey, TValue>> and uses the - specified . - - IEnumerable to copy elements into this from - Specified comparer to use for the s - enumerable must be non-null - If is set to null, then the default for is used. - - - - Creates a new new instance of the - class that is empty, has the default initial capacity, and uses the default - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - A new with the specified - parameters. - must not have - IsReadOnly set to true by default. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the specified initial capacity, and uses the default - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - Initial number of keys that the will allocate space for - A new with the specified - parameters. - Capacity must be >= 0 - must not have - IsReadOnly set to true by default. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the default initial capacity, and uses the specified - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - Specified comparer to use for the s - must not have - IsReadOnly set to true by default. - A new with the specified - parameters. - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the specified initial capacity, and uses the specified - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - Initial number of keys that the will allocate space for - Specified comparer to use for the s - A new with the specified - parameters. - must not have - IsReadOnly set to true by default. - Capacity must be >= 0 - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<KeyValuePair<TKey, IReadOnlyCollection<TValue>>> - and uses the default for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - A new with the specified - parameters. - must not have - IsReadOnly set to true by default. - enumerable must be non-null - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<KeyValuePair<TKey, IReadOnlyCollection<TValue>>> - and uses the specified for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - Specified comparer to use for the s - A new with the specified - parameters. - must not have - IsReadOnly set to true by default. - enumerable must be non-null - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<<TKey, TValue>> - and uses the default for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - A new with the specified - parameters. - must not have - IsReadOnly set to true by default. - enumerable must be non-null - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<IGrouping<TKey, TValue>> - and uses the specified for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - Specified comparer to use for the s - A new with the specified - parameters. - must not have - IsReadOnly set to true by default. - enumerable must be non-null - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the default initial capacity, and uses the default - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - must create collections with - IsReadOnly set to true by default. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the specified initial capacity, and uses the default - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - Initial number of keys that the will allocate space for - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - Capacity must be >= 0 - must create collections with - IsReadOnly set to true by default. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the default initial capacity, and uses the specified - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - Specified comparer to use for the s - A function to create a new to use - in the internal dictionary store of this . - must create collections with - IsReadOnly set to true by default. - A new with the specified - parameters. - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Creates a new new instance of the - class that is empty, has the specified initial capacity, and uses the specified - for . The - internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - Initial number of keys that the will allocate space for - Specified comparer to use for the s - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - must create collections with - IsReadOnly set to true by default. - Capacity must be >= 0 - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<KeyValuePair<TKey, IReadOnlyCollection<TValue>>> - and uses the default for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - must create collections with - IsReadOnly set to true by default. - enumerable must be non-null - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<KeyValuePair<TKey, IReadOnlyCollection<TValue>>> - and uses the specified for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - Specified comparer to use for the s - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - must create collections with - IsReadOnly set to true by default. - enumerable must be non-null - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<<TKey, TValue>> - and uses the default for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - must create collections with - IsReadOnly set to true by default. - enumerable must be non-null - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Initializes a new instance of the class that contains - elements copied from the specified IEnumerable<IGrouping<TKey, TValue>> - and uses the specified for the type. - The internal dictionary will use instances of the - class as its collection type. - - - The collection type that this - will contain in its internal dictionary. - - IEnumerable to copy elements into this from - Specified comparer to use for the s - A function to create a new to use - in the internal dictionary store of this . - A new with the specified - parameters. - must create collections with - IsReadOnly set to true by default. - enumerable must be non-null - If is set to null, then the default for is used. - - Note that must implement - in addition to being constructable through new(). The collection returned from the constructor - must also not have IsReadOnly set to True by default. - - - - - Adds the specified and to the . - - The of the element to add. - The of the element to add. - is null. - - Unlike the Add for , the Add will not - throw any exceptions. If the given is already in the , - then will be added to associated with - - - A call to this Add method will always invalidate any currently running enumeration regardless - of whether the Add method actually modified the . - - - - - Adds a number of key-value pairs to this , where - the key for each value is , and the value for a pair - is an element from - - The of all entries to add - An of values to add - and must be non-null - - A call to this AddRange method will always invalidate any currently running enumeration regardless - of whether the AddRange method actually modified the . - - - - - Removes every associated with the given - from the . - - The of the elements to remove - true if the removal was successful; otherwise false - is null. - - - - Removes the first instance (if any) of the given - - pair from this . - - The of the element to remove - The of the element to remove - must be non-null - true if the removal was successful; otherwise false - - If the being removed is the last one associated with its , then that - will be removed from the and its - associated will be freed as if a call to - had been made. - - - - - Determines if the given - - pair exists within this . - - The of the element. - The of the element. - true if found; otherwise false - must be non-null - - - - Determines if the given exists within this . - - A to search the for - true if the contains the ; otherwise false - - - - Gets a read-only view of the - that changes as the changes. - - a read-only view of the - - - - Removes every and from this - . - - - - - Determines if the given exists within this and has - at least one associated with it. - - The to search the for - true if the contains the requested ; - otherwise false. - must be non-null - - - - Attempts to get the associated with the given - and place it into . - - The of the element to retrieve - - When this method returns, contains the associated with the specified - if it is found; otherwise contains the default value of . - - - true if the contains an element with the specified - ; otherwise, false. - - must be non-null - - - - Get an Enumerator over the - - pairs in this . - - an Enumerator over the - - pairs in this . - - - - Gets each in this that - has one or more associated . - - - An containing each - in this that has one or more associated - . - - - - - Gets an enumerable of from this , - where each is the collection of every associated - with a present in the . - - An IEnumerable of each in this - - - - - Get every associated with the given . If - is not found in this , will - throw a . - - The of the elements to retrieve. - must be non-null - does not have any associated - s in this . - - An containing every - associated with . - - - Note that the returned will change alongside any changes - to the - - - - - Returns the number of s with one or more associated - in this . - - The number of s in this . - - - - The Enumerator class for a - that iterates over - - pairs. - - - - - Constructor for the enumerator - - A MultiValueDictionary to iterate over - - - - Advances the enumerator to the next element of the collection. - - - true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. - - The collection was modified after the enumerator was created. - - - - Sets the enumerator to its initial position, which is before the first element in the collection. - - The collection was modified after the enumerator was created. - - - - Frees resources associated with this Enumerator - - - - - An inner class that functions as a view of an ICollection within a MultiValueDictionary - - - - - A view of a as a read-only - object - - - - - Gets the sequence of s - associated with the given . - - The of the desired sequence. - the sequence of s - associated with the given . - Attempting to index on a that is not present in the - will return an empty - rather than throw an exception. - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Looks up a localized string similar to Destination array is not long enough to copy all the items in the collection. Check array index and length.. - - - - - Looks up a localized string similar to The specified TValueCollection creates collections that have IsReadOnly set to true by default. TValueCollection must be a mutable ICollection.. - - - - - Looks up a localized string similar to Enumeration has already completed.. - - - - - Looks up a localized string similar to Enumeration has not started. Call MoveNext() before Current.. - - - - - Looks up a localized string similar to Collection was modified; enumeration operation may not execute. - - - - - Looks up a localized string similar to The given key was not present.. - - - - - Looks up a localized string similar to The collection is read-only. - - - - - Common runtime checks that throw ArgumentExceptions upon failure. - - - - - Throws an exception if the specified parameter's value is null. - - The type of the parameter. - The value of the argument. - The name of the parameter to include in any thrown exception. - The value of the parameter. - Thrown if is null - - - - Throws an exception if the specified parameter's value is IntPtr.Zero. - - The value of the argument. - The name of the parameter to include in any thrown exception. - The value of the parameter. - Thrown if is null - - - - Throws an exception if the specified parameter's value is null. - - The type of the parameter. - The value of the argument. - The name of the parameter to include in any thrown exception. - The value of the parameter. - Thrown if is null - - This method exists for callers who themselves only know the type as a generic parameter which - may or may not be a class, but certainly cannot be null. - - - - - Throws an if a condition does not evaluate to true. - - - - - Throws an if a condition does not evaluate to true. - - Nothing. This method always throws. - - - - Throws an ArgumentException if a condition does not evaluate to true. - - - - - Throws an ArgumentException if a condition does not evaluate to true. - - - - - Indicates to Code Analysis that a method validates a particular parameter. - - - - diff --git a/CSharpCode/GenerateQA/.vs/GenerateQA/v14/.suo b/CSharpCode/GenerateQA/.vs/GenerateQA/v14/.suo deleted file mode 100644 index d07b3e7..0000000 Binary files a/CSharpCode/GenerateQA/.vs/GenerateQA/v14/.suo and /dev/null differ diff --git a/CSharpCode/GenerateQA/GenerateQA.sln b/CSharpCode/GenerateQA/GenerateQA.sln deleted file mode 100644 index a86eea7..0000000 --- a/CSharpCode/GenerateQA/GenerateQA.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateQAFromParsing", "GenerateQAFromParsing\GenerateQAFromParsing.csproj", "{3CBD3B8D-8EE7-42E5-8F8E-5A0D94688DC9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3CBD3B8D-8EE7-42E5-8F8E-5A0D94688DC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CBD3B8D-8EE7-42E5-8F8E-5A0D94688DC9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CBD3B8D-8EE7-42E5-8F8E-5A0D94688DC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CBD3B8D-8EE7-42E5-8F8E-5A0D94688DC9}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/AdverbCategory.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/AdverbCategory.cs deleted file mode 100644 index ce77292..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/AdverbCategory.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public static class AdverbCategory -{ - static HashSet adv_group1 = null;// влево - static HashSet adv_group2 = null; // внутри - static HashSet adv_group3 = null; // быстро - static HashSet adv_group4 = null; // всегда - - public static string GetQuestionWordForAdverb(string a0) - { - string a = a0.ToLower(); - - if (adv_group1 == null) - { - adv_group1 = new HashSet(); - adv_group2 = new HashSet(); - adv_group3 = new HashSet(); - adv_group4 = new HashSet(); - foreach (string w in "влево вправо вверх вниз домой наружу внутрь".Split()) - { - adv_group1.Add(w); - } - - foreach (string w in "внутри снаружи везде всюду сзади спереди сбоку сверху снизу там тут здесь повсюду повсеместно рядом неподалеку вдали".Split()) - { - adv_group2.Add(w); - } - - // КАК - string how_list = "быстро медленно плохо хорошо шустро понарошку агрессивно " + - "активно отдельно постоянно отлично индивидуально покорно удовлетворенно мрачно тяжело охотно весело " + - "одобрительно удивленно презрительно небрежно коротко испуганно нерешительно неловко кокетливо " + - "нехотя невесело осторожно угрюмо молча следом дипломатично моментально тихо звонко цинично учащенно лениво " + - "сочувственно оживленно робко обиженно загадочно пьяно понуро беспомощно громко автоматически " + - "отрывисто лукаво судорожно неумолимо робко звучно затравленно немедленно оскорбленно намертво насовсем " + - "поспешно постепенно тихо смело постепенно мощно сиротливо устало неслышно наскоком недвижно монолитно монотонно " + - "очумело пугливо сытно тоскливо сумрачно растерянно круто звонко резко успешно гулко невольно внимательно " + - "отважно тяжело яростно задумчиво долго основательно прочно злобно вопрошающе пристально недоуменно неустанно " + - "внакладе впритык нармонично туго красиво тайно навсегда победно сообща внезапно идеально нарасхват " + - "виртуозно экстренно остро достойно неизменно наизнанку радушно единогласно честно порядочно неправильно " + - "незначительно щедро изумленно обессилено непринужденно легко бесшумно неуклонно врасплох хмуро мягко " + - "вежливо буквально укоризненно предупредительно больно обидно сердито скептически демонстративно незатейливо отчаянно " + - "хладнокровно охотнее медленнее шустрее агрессивнее активнее "; - foreach (string w in how_list.Split()) - { - adv_group3.Add(w); - } - - foreach (string w in "всегда сегодня вчера позавчера послезавтра ежедневно еженочно ежемесячно наутро поутру накануне".Split()) - { - adv_group3.Add(w); - } - } - - if (adv_group1.Contains(a)) return "куда"; - if (adv_group2.Contains(a)) return "где"; - if (adv_group3.Contains(a)) return "как"; - if (adv_group4.Contains(a)) return "когда"; - - return null; - } - - public static bool IsQuestionAdverb(string a) - { - return "где как зачем почему откуда куда сколько".Contains(a); - } - public static bool IsAppropriateForNeg(string a) - { - return !IsQuestionAdverb(a) && !"много немного ничуть".Contains(a); - } -} diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/App.config b/CSharpCode/GenerateQA/GenerateQAFromParsing/App.config deleted file mode 100644 index 88fa402..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/FootPrint.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/FootPrint.cs deleted file mode 100644 index e2d7314..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/FootPrint.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; - - -public class FootPrint -{ - private List tokens; - - public FootPrint(SolarixGrammarEngineNET.GrammarEngine2 gren, List terms) - { - tokens = new List(); - foreach (var term in terms) - { - tokens.Add(new FootPrintToken(gren, term)); - } - } - - public bool Match(string tags) - { - string[] groups = tags.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - if (groups.Length != tokens.Count) - { - return false; - } - - for (int i = 0; i < groups.Length; ++i) - { - if (!tokens[i].Match(groups[i])) - { - return false; - } - } - - return true; - } - - public FootPrintToken this[int index] { get { return tokens[index]; } } - - public override string ToString() - { - return string.Join(" ", tokens.Select(z => z.ToString())); - } -} diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/FootPrintToken.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/FootPrintToken.cs deleted file mode 100644 index 760159f..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/FootPrintToken.cs +++ /dev/null @@ -1,191 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; -using System.Diagnostics.Contracts; - -public class FootPrintToken -{ - private string word; - private List tags; - private SolarixGrammarEngineNET.SyntaxTreeNode node; - public FootPrintToken(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode root) - { - Contract.Ensures(!string.IsNullOrEmpty(this.word)); - Contract.Ensures(this.node != null); - Contract.Ensures(this.tags != null); - - this.word = root.GetWord(); - this.tags = new List(); - this.node = root; - - this.tags.Add(root.GetWord().ToLower()); - - if (root.GetWord().Equals("не", StringComparison.OrdinalIgnoreCase)) - { - this.tags.Add("neg"); - } - - - int part_of_speech = gren.GetEntryClass(root.GetEntryID()); - switch (part_of_speech) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.CONJ_ru: this.tags.Add("conj"); break; // союз - - case SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN_ru: this.tags.Add("pr"); break; // местоимение Я - - case SolarixGrammarEngineNET.GrammarEngineAPI.NOUN_ru: this.tags.Add("n"); break; - - case SolarixGrammarEngineNET.GrammarEngineAPI.ADJ_ru: this.tags.Add("adj"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.VERB_ru: this.tags.Add("v"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.INFINITIVE_ru: this.tags.Add("v"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.GERUND_2_ru: this.tags.AddRange("adv adv_v".Split(' ')); break; - - case SolarixGrammarEngineNET.GrammarEngineAPI.ADVERB_ru: - { - this.tags.Add("adv"); - if (StringExtender.InCI(word, "очень крайне наиболее наименее чрезвычайно почти".Split())) // модификаторы наречий и прилагательных - { - this.tags.Add("a_modif"); - } - - string adv_cat = AdverbCategory.GetQuestionWordForAdverb(word); - if (!string.IsNullOrEmpty(adv_cat)) - { - this.tags.Add("adv_"+ adv_cat); - } - - break; - } - - case SolarixGrammarEngineNET.GrammarEngineAPI.PREPOS_ru: this.tags.Add("p"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PRONOUN2_ru: this.tags.Add("pr"); break; - default: this.tags.Add("x"); break; - } - - foreach (var p in root.GetPairs()) - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.NOMINATIVE_CASE_ru: this.tags.Add("nom"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.GENITIVE_CASE_ru: this.tags.Add("gen"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.ACCUSATIVE_CASE_ru: this.tags.Add("acc"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.DATIVE_CASE_ru: this.tags.Add("dat"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PREPOSITIVE_CASE_ru: this.tags.Add("prep"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PARTITIVE_CASE_ru: this.tags.Add("part"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.LOCATIVE_CASE_ru: this.tags.Add("loc"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.INSTRUMENTAL_CASE_ru: this.tags.Add("instr"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru: this.tags.Add("sing"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PLURAL_NUMBER_ru: this.tags.Add("pl"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru: this.tags.Add("past"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PRESENT_ru: this.tags.Add("pres"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.FUTURE_ru: this.tags.Add("future"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.FORM_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.ANIMATIVE_FORM_ru: this.tags.Add("anim"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.INANIMATIVE_FORM_ru: this.tags.Add("inanim"); break; - } - } - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.GENDER_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.MASCULINE_GENDER_ru: this.tags.Add("masc"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.FEMININE_GENDER_ru: this.tags.Add("fem"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.NEUTRAL_GENDER_ru: this.tags.Add("neut"); break; - } - } - - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru: this.tags.Add("1"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru: this.tags.Add("2"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_3_ru: this.tags.Add("3"); break; - } - } - - - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru) - { - switch (p.StateID) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.VB_INF_ru: this.tags.Add("vf1"); break; - case SolarixGrammarEngineNET.GrammarEngineAPI.VB_ORDER_ru: this.tags.Add("imper"); break; - } - } - - } - } - - public bool Match(string tags) - { - string[] tag_list = tags.Split(",.".ToCharArray()); - foreach (string t in tag_list) - { - if (t.StartsWith("~")) - { - if (this.tags.Contains(t.Substring(1,t.Length-1))) - { - return false; - } - } - else if( t.Contains("|")) - { - string[] tx = t.Split('|'); - foreach (var ti in tx) - { - if (this.tags.Contains(ti)) - { - return true; - } - } - - return false; - } - else - { - if (!this.tags.Contains(t)) - { - return false; - } - } - } - - return true; - } - - public override string ToString() - { - return word + " (" + string.Join(",", tags) + ")"; - } - - public string GetWord() { return word; } -} - diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/GenerateQAFromParsing.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/GenerateQAFromParsing.cs deleted file mode 100644 index ae19354..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/GenerateQAFromParsing.cs +++ /dev/null @@ -1,5561 +0,0 @@ -/* - * Вспомогательная утилита для чат-бота https://github.com/Koziev/chatbot - * Генерирует датасет с тройками предложение ПРЕДПОСЫЛКА-ВОПРОС-ОТВЕТ, например как тут https://github.com/Koziev/NLP_Datasets/blob/master/QA/premise_question_answer4.txt - * - * Использует результаты работы утилиты https://github.com/Koziev/chatbot/tree/master/CSharpCode/ExtractFactsFromParsing - * - * Для морфологического разбора фактов используется API Грамматического Словаря (http://solarix.ru/api/ru/list.shtml), - * исходные тексты на C# и C++ лежат в отдельном репозитории здесь https://github.com/Koziev/GrammarEngine/tree/master/src/demo/ai/solarix/engines - * - * Частеречная разметка требует наличия русской словарной базы. Можно взять готовые файлы здесь https://github.com/Koziev/GrammarEngine/tree/master/src/bin-windows64 или - * собрать ее самостоятельно из исходных текстов, которые лежат здесь https://github.com/Koziev/GrammarEngine/tree/master/src/dictionary.src - */ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography; -using System.Diagnostics.Contracts; - -class GenerateQAFromParsing -{ - static HashSet stop_adjs; - - static Preprocessor preprocessor; - - static GenerateQAFromParsing() - { - stop_adjs = new HashSet("один одна одно одни сам сама само сами".Split()); - preprocessor = new Preprocessor(); - } - - private static int sample_count = 0; - - static System.IO.StreamWriter wrt_samples, wrt_skipped; // PQA датасет - static System.IO.StreamWriter wrt_interpret; // INTERPRETATIONS датасет - - static int nb_samples = 0; - private static void WriteQA(string premise, string question, string answer) - { - Contract.Requires(!string.IsNullOrEmpty(premise)); - Contract.Requires(!string.IsNullOrEmpty(question)); - Contract.Requires(!string.IsNullOrEmpty(answer)); - Contract.Requires(question != answer); - Contract.Requires(premise != answer); - - wrt_samples.WriteLine(); - wrt_samples.WriteLine("T: {0}", premise.Trim()); - wrt_samples.WriteLine("Q: {0}", question.Trim()); - wrt_samples.WriteLine("A: {0}", answer.Trim()); - - nb_samples += 1; - return; - } - - - private static void WriteInterpretation(string question, string answer, string interpretation) - { - Contract.Requires(!string.IsNullOrEmpty(interpretation)); - Contract.Requires(!string.IsNullOrEmpty(question)); - Contract.Requires(!string.IsNullOrEmpty(answer)); - Contract.Requires(question != answer); - - wrt_interpret.WriteLine(); - wrt_interpret.WriteLine("{0}", question.Trim()); - wrt_interpret.WriteLine("{0}|{1}", answer.Trim(), interpretation.Trim()); - return; - } - - - [Obsolete] - private static void WritePermutationsQA2(string premise, string answer, params string[] constituents) - { - if (constituents.Count(z => string.IsNullOrEmpty(z)) > 0) - { - throw new ArgumentNullException($"Null constituent in WritePermutationsQA2 call: premise={premise} answer={answer}"); - } - - - int n = constituents.Length; - int[] idx = new int[n]; - Array.Clear(idx, 0, n); - - string[] wx = new string[n]; - HashSet generated = new HashSet(); - - int total_n = (int)Math.Round(Math.Pow(n, n)); - for (int p = 0; p < total_n; ++p) - { - bool good = true; - for (int i = 0; i < n; ++i) - { - string c = constituents[idx[i]]; - for (int j = 0; j < i; ++j) - { - if (wx[j] == c) - { - good = false; - break; - } - } - - wx[i] = c; - } - - if (good) - { - string sample = Join(wx) + "?"; - if (!generated.Contains(sample)) - { - generated.Add(sample); - WriteQA(premise, sample, answer); - } - } - - - int transfer = 1; - for (int i = n - 1; i >= 0; --i) - { - idx[i] += transfer; - if (idx[i] == n) - { - idx[i] = 0; - } - else - { - break; - } - } - } - - wrt_samples.Flush(); - - return; - } - - - - private static void WriteQA3(string premise, string[] constituents, string answer) - { - if (constituents.Count(z => string.IsNullOrEmpty(z)) > 0) - { - throw new ArgumentNullException($"Null constituent in WriteQA3 call: premise={premise} answer={answer}"); - } - - - int n = constituents.Length; - int[] idx = new int[n]; - Array.Clear(idx, 0, n); - - string[] wx = new string[n]; - HashSet generated = new HashSet(); - - int total_n = (int)Math.Round(Math.Pow(n, n)); - for (int p = 0; p < total_n; ++p) - { - bool good = true; - for (int i = 0; i < n; ++i) - { - string c = constituents[idx[i]]; - for (int j = 0; j < i; ++j) - { - if (wx[j] == c) - { - good = false; - break; - } - } - - wx[i] = c; - } - - if (good) - { - string sample = Join(wx) + "?"; - if (!generated.Contains(sample)) - { - generated.Add(sample); - WriteQA(premise, sample, answer); - } - } - - - int transfer = 1; - for (int i = n - 1; i >= 0; --i) - { - idx[i] += transfer; - if (idx[i] == n) - { - idx[i] = 0; - } - else - { - break; - } - } - } - - wrt_samples.Flush(); - - return; - } - - - - private static string[] L(params string[] l) => l; - - private static void WritePermutationsInterpretation2(string[] constituents, string answer, string interpretation) - { - if (constituents.Count(z => string.IsNullOrEmpty(z)) > 0) - { - throw new ArgumentNullException($"Null constituent in WritePermutationsInterpretation2 call: answer={answer} interpretation={interpretation}"); - } - - - int n = constituents.Length; - int[] idx = new int[n]; - Array.Clear(idx, 0, n); - - string[] wx = new string[n]; - HashSet generated = new HashSet(); - - int total_n = (int)Math.Round(Math.Pow(n, n)); - for (int p = 0; p < total_n; ++p) - { - bool good = true; - for (int i = 0; i < n; ++i) - { - string c = constituents[idx[i]]; - for (int j = 0; j < i; ++j) - { - if (wx[j] == c) - { - good = false; - break; - } - } - - wx[i] = c; - } - - if (good) - { - string question = Join(wx) + "?"; - if (!generated.Contains(question)) - { - generated.Add(question); - WriteInterpretation(question, answer, interpretation); - } - } - - - int transfer = 1; - for (int i = n - 1; i >= 0; --i) - { - idx[i] += transfer; - if (idx[i] == n) - { - idx[i] = 0; - } - else - { - break; - } - } - } - - wrt_interpret.Flush(); - - return; - } - - - private static void WriteAll(string premise, string[] question_constituents, string answer) - { - WriteQA3(premise, question_constituents, answer); - WritePermutationsInterpretation2(question_constituents, answer, premise); - } - - - - private static string Join(params string[] sx) - { - return string.Join(" ", sx).Replace(" ?", "?").Replace(" ,", ","); - } - - private static bool IsGoodObject(string obj_str) - { - foreach (string stopword in "кажд весь вся всю все день год месяц минуту секунду час ночь сутки год время шагу деру".Split()) - { - if (obj_str.Contains(stopword)) - { - return false; - } - } - - return true; - } - - - private static bool IsTimeNoun(string o) - { - return "ночью утром днем вечером зимой весной летом осенью".Split().Contains(o.ToLower()); - } - - - private static List GetTerms(SolarixGrammarEngineNET.SyntaxTreeNode n) - { - List res = new List(); - res.Add(n); - - foreach (var child in n.leafs) - { - res.AddRange(GetTerms(child)); - } - - return res; - } - - private static string TermToString(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode term) - { - int id_entry = term.GetEntryID(); - - if (gren.GetEntryName(id_entry) == "???") - { - return term.GetWord(); - } - - string res_word = gren.RestoreCasing(id_entry, term.GetWord()); - - return res_word; - } - - private static string TermsToString(SolarixGrammarEngineNET.GrammarEngine2 gren, IEnumerable terms) - { - return string.Join(" ", terms.Select(z => TermToString(gren, z))); - } - - private static string TermsToString(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode term) - { - return TermToString(gren, term); - } - - - static HashSet where_to_adverbs; - static bool IsWhereToAdverb(string adverb) - { - if (where_to_adverbs == null) - { - where_to_adverbs = new HashSet(); - foreach (string a in " туда вправо влево вверх вниз вперед назад левее левей правее правей ниже пониже повыше выше".Split()) - { - where_to_adverbs.Add(a); - } - } - - return where_to_adverbs.Contains(adverb); - } - - - static HashSet be_verbs; - static bool IsBeVerb(string v) - { - if (be_verbs == null) - { - be_verbs = new HashSet(); - foreach (string w in "быть бывать стать становиться оказаться оказываться казаться показаться выглядеть".Split()) - { - be_verbs.Add(w); - } - } - - return be_verbs.Contains(v); - } - - - - static bool IsPunkt(string word) - { - return word.Length > 0 && char.IsPunctuation(word[0]); - } - - static string GetNodeLemma(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode root) - { - int entry_id = root.GetEntryID(); - string lemma = gren.GetEntryName(entry_id); - if (string.IsNullOrEmpty(lemma)) - { - return root.GetWord(); - } - else - { - return lemma; - } - } - - - static string RebuildVerb2(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode v_node, string qword) - { - if (string.IsNullOrEmpty(qword)) - { - return null; - } - - List coords = new List(); - List states = new List(); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - if (v_node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru) - { - // Для глагола в прошедшем времени надо указать род подлежащего - средний или мужской - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.GENDER_ru); - if (qword.StartsWith("ч")) - { - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NEUTRAL_GENDER_ru); - } - else - { - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.MASCULINE_GENDER_ru); - } - } - - - // Смена лица для глагола не-прошедшего времени: - // Я продаю. - // Кто продает? - if (v_node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) != SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru) - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_3_ru); - } - - - foreach (var p in v_node.GetPairs()) - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru || - p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru) - { - coords.Add(p.CoordID); - states.Add(p.StateID); - } - } - - string v2 = ""; - List fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), v_node.GetEntryID(), coords, states); - if (fx != null && fx.Count > 0) - { - v2 = fx[0].ToLower(); - } - else - { - v2 = null; - } - - return v2; - } - - - static string GetWhichQword4Obj(FootPrintToken ft) - { - string qword = ""; - - if (ft.Match("inanim,fam,sing,acc")) - { - qword = "какую"; - } - else if (ft.Match("inanim,masc,sing,acc")) - { - qword = "какой"; - } - else if (ft.Match("inanim,neut,sing,acc")) - { - qword = "какое"; - } - else if (ft.Match("inanim,pl,acc")) - { - qword = "какие"; - } - else if (ft.Match("anim,masc,sing,acc")) - { - qword = "какого"; - } - else if (ft.Match("anim,fam,sing,acc")) - { - qword = "какую"; - } - else if (ft.Match("anim,neut,sing,acc")) - { - qword = "какое"; - } - else if (ft.Match("anim,pl,acc")) - { - qword = "каких"; - } - - - if (ft.Match("fam,sing,gen")) - { - qword = "какой"; - } - else if (ft.Match("masc,sing,gen")) - { - qword = "какого"; - } - else if (ft.Match("neut,sing,gen")) - { - qword = "какого"; - } - else if (ft.Match("pl,gen")) - { - qword = "каких"; - } - - return qword; - } - - - static string GetWhichQword4Subject(FootPrintToken ft) - { - if (stop_adjs.Contains(ft.GetWord())) - return null; - - string qword = ""; - if (ft.Match("fem,sing")) - { - qword = "какая"; - } - else if (ft.Match("masc,sing")) - { - qword = "какой"; - } - else if (ft.Match("neut,sing")) - { - qword = "какое"; - } - else if (ft.Match("pl")) - { - qword = "какие"; - } - - return qword; - } - - - static string GetWhichQword4Instr(FootPrintToken ft) - { - string qword = ""; - if (ft.Match("fam,sing")) - { - qword = "какой"; - } - else if (ft.Match("masc,sing")) - { - qword = "каким"; - } - else if (ft.Match("neut,sing")) - { - qword = "каким"; - } - else if (ft.Match("pl")) - { - qword = "какими"; - } - - return qword; - } - - - static string GetQuestionWordForAdverb(string a0) - { - return AdverbCategory.GetQuestionWordForAdverb(a0); - } - - - static string GetSubjectQuestion(FootPrintToken ft) - { - if (ft.Match("anim")) - { - return "кто"; - } - else if (ft.Match("inanim")) - { - return "что"; - } - else if (ft.Match("pr,1")) - { - return "кто"; - } - else if (ft.Match("pr,2")) - { - return "кто"; - } - - return null; - } - - - static string GetAccusObjectQuestion(FootPrintToken ft) - { - // Вопросы к прямому дополнению. - string qword = null; ; - if (ft.Match("inanim")) // ребят - { - qword = "что"; - } - else if (ft.Match("anim")) - { - qword = "кого"; - } - - return qword; - } - - static string GetDativeObjectQuestion(FootPrintToken ft) - { - // Вопросы к прямому дополнению. - string qword = null; ; - if (ft.Match("inanim")) - { - qword = "чему"; - } - else if (ft.Match("anim")) - { - qword = "кому"; - } - - return qword; - } - - static string GetInstrObjectQuestion(FootPrintToken ft) - { - string qword = null; - if (ft.Match("anim")) - { - qword = "кем"; - } - else - { - qword = "чем"; - } - return qword; - } - - static string Preprocess(string phrase, SolarixGrammarEngineNET.GrammarEngine2 gren) - { - return preprocessor.Preprocess(phrase, gren); - } - - static bool do_change_person = false; - - - static string ChangePronounTo(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node, string to_person) - { - if (do_change_person) - { - List coords = new List(); - List states = new List(); - - if (to_person == "1s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru); - } - else if (to_person == "2s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else if (to_person == "3s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else - { - throw new ArgumentException("to_person"); - } - - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NOMINATIVE_CASE_ru); - - string new_word = ""; - List fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), node.GetEntryID(), coords, states); - if (fx != null && fx.Count > 0) - { - new_word = fx[0].ToLower(); - } - else - { - new_word = null; - } - - return new_word; - } - else - { - return node.GetWord(); - } - } - - - - static string ChangeVerbTo(SolarixGrammarEngineNET.GrammarEngine2 gren, SolarixGrammarEngineNET.SyntaxTreeNode node, string to_person) - { - if (do_change_person) - { - - List coords = new List(); - List states = new List(); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru); - states.Add(node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru)); - - if (node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru) != SolarixGrammarEngineNET.GrammarEngineAPI.PAST_ru) - { - if (to_person == "1s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_1_ru); - } - else if (to_person == "2s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else if (to_person == "3s") - { - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.NUMBER_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.SINGULAR_NUMBER_ru); - - coords.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_ru); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.PERSON_2_ru); - } - else - { - throw new ArgumentException("to_person"); - } - } - - - foreach (var p in node.GetPairs()) - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.TENSE_ru || - p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.VERB_FORM_ru) - { - coords.Add(p.CoordID); - states.Add(p.StateID); - } - - if (to_person == "1s" || to_person == "2s") - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.GENDER_ru) - { - coords.Add(p.CoordID); - states.Add(p.StateID); - } - } - - } - - string v2 = ""; - List fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), node.GetEntryID(), coords, states); - if (fx != null && fx.Count > 0) - { - v2 = fx[0].ToLower(); - } - else - { - v2 = null; - } - - return v2; - } - else - { - return node.GetWord(); - } - } - - - static string ChangePersonTo(string sbj) - { - if (do_change_person) - { - if (sbj == "я") - { - return "2s"; - } - else if (sbj == "ты") - { - return "1s"; - } - else - { - return null; - } - } - else - { - return sbj; - } - } - - - static int nb_processed = 0; - static HashSet processed_phrases = new HashSet(); - static void ProcessSentence(string phrase, SolarixGrammarEngineNET.GrammarEngine2 gren, int max_len) - { - nb_processed += 1; - - if (phrase.Length > 2 && phrase.Last() != '?') - { - bool used = false; - - if (phrase.Last() == '.' || phrase.Last() == '!') - { - phrase = phrase.Substring(0, phrase.Length - 1); - } - - if (!processed_phrases.Contains(phrase)) - { - processed_phrases.Add(phrase); - - string phrase2 = Preprocess(phrase, gren); - - int id_language = SolarixGrammarEngineNET.GrammarEngineAPI.RUSSIAN_LANGUAGE; - SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags morph_flags = SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_COMPLETE_ONLY | SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_MODEL; - SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags syntax_flags = SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags.DEFAULT; - int MaxAlt = 40; - int constraints = 600000 | (MaxAlt << 22); - - using (SolarixGrammarEngineNET.AnalysisResults linkages = gren.AnalyzeSyntax(phrase2, id_language, morph_flags, syntax_flags, constraints)) - { - if (linkages.Count == 3) - { - SolarixGrammarEngineNET.SyntaxTreeNode root = linkages[1]; - List terms = GetTerms(root).OrderBy(z => z.GetWordPosition()).ToList(); - - FootPrint footprint = new FootPrint(gren, terms); - - string predicate_lemma = GetNodeLemma(gren, root); - //if (!IsBeVerb(predicate_lemma)) - { - #region Его зовут Лешка. - if (footprint.Match("acc,sing зовут n,nom,sing")) - { - used = true; - - string whom = TermsToString(gren, terms[0]); - string answer = TermsToString(gren, terms[2]); - - if (do_change_person) - { - if (StringExtender.EqCI(whom, "меня")) - { - whom = "тебя"; - } - else if (StringExtender.EqCI(whom, "тебя")) - { - whom = "меня"; - } - } - - - WriteAll(phrase, L("как", whom, "зовут"), answer); - } - #endregion Его зовут Лешка. - - - #region Я не ношу подделки! - if (footprint.Match("pr,1|2,nom,sing neg v,vf1,acc,~gen n,acc")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms.Skip(3).Take(1)); // подделки - var v_node = terms[2]; // ношу - - string qword = null; - string answer = null; - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[2], to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - - // Я не ношу подделки - // Ты носишь подделки? - // Нет. - answer = "нет"; - WriteQA3(phrase, L(s2, v2, o), answer); - - WritePermutationsInterpretation2(L(s2, v2, o), // Ты носишь подделки? - answer, // нет - Join(s2, v3, o)); // Ты не носишь подделки - - - // Вопрос к дополнению: - // Что ты не носишь? - qword = GetAccusObjectQuestion(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - var question = L(qword, s2, v3); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты не носишь? - answer, // подделки - Join(s2, v3, o)); // Ты не носишь подделки - } - } - - // Вопрос к подлежащему: - // Кто не носит подделки? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - answer = s; - var question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не носит подделки? - s, // я - Join(s2, v3, o)); // Ты не носишь подделки - } - } - } - #endregion Я не ношу подделки! - - - #region Габариты я не знаю. - if (footprint.Match("n,acc pr,1|2,nom,sing neg v,vf1,acc")) - { - used = true; - - string s = TermsToString(gren, terms[1]); // я - string o = TermsToString(gren, terms.Take(1)); // габариты - var v_node = terms[3]; // знаю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[1], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Габариты я не знаю - // Ты знаешь габариты? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты знаешь габариты? - answer, // нет - Join(s2, v3, o)); // Ты не знаешь габариты - - // Вопрос к дополнению: - // Что ты не знаешь? - qword = GetAccusObjectQuestion(footprint[0]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v3, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты не знаешь? - answer, // габариты - Join(s2, v3, o)); // Ты не знаешь габариты - } - - // Вопрос к подлежащему: - // Кто не знает габариты? - qword = GetSubjectQuestion(footprint[1]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не знает габариты? - s, // я - Join(s2, v3, o)); // Ты не знаешь габариты - - } - } - } - } - #endregion Габариты я не знаю. - - - #region Я габариты не знаю. - if (footprint.Match("pr,1|2,nom,sing n,acc neg v,vf1,acc")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms[1]); // габариты - var v_node = terms[3]; // знаю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Я габариты не знаю - // Ты знаешь габариты? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты знаешь габариты? - answer, // нет - Join(s2, v3, o)); // Ты не знаешь габариты - - - // Вопрос к дополнению: - // Что ты не знаешь? - qword = GetAccusObjectQuestion(footprint[1]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v3, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты не знаешь? - answer, // габариты - Join(s2, v3, o)); // Ты не знаешь габариты - } - - // Вопрос к подлежащему: - // Кто не знает габариты? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не знает габариты? - s, // я - Join(s2, v3, o)); // Ты не знаешь габариты - } - } - } - } - #endregion Габариты я не знаю. - - - #region Габариты не знаю я. - if (footprint.Match("n,acc neg v,vf1,acc pr,1|2,nom,sing")) - { - used = true; - - string s = TermsToString(gren, terms[3]); // я - string o = TermsToString(gren, terms[0]); // габариты - var v_node = terms[2]; // знаю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[3], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Габариты не знаю я. - // Ты знаешь габариты? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты знаешь габариты? - answer, // нет - Join(s2, v3, o)); // Ты не знаешь габариты - - - // Вопрос к дополнению: - // Что ты не знаешь? - qword = GetAccusObjectQuestion(footprint[0]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(qword, s2, v3); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты не знаешь? - answer, // габариты - Join(s2, v3, o)); // Ты не знаешь габариты - } - - // Вопрос к подлежащему: - // Кто не знает габариты? - qword = GetSubjectQuestion(footprint[3]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не знает габариты? - s, // я - Join(s2, v3, o)); // Ты не знаешь габариты - } - } - } - } - #endregion Габариты я не знаю. - - - #region Почтой я не отправляю. - if (footprint.Match("n,instr,inanim pr,1|2,nom,sing neg v,vf1")) - { - used = true; - - string s = TermsToString(gren, terms[1]); // я - string o = TermsToString(gren, terms.Take(1)); // почтой - var v_node = terms[3]; // отправляю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[1], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Почтой я не отправляю - // Ты отправляешь почтой? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты отправляешь почтой? - answer, // нет - Join(s2, v3, o)); // Ты не отправляешь почтой - - - - // Вопрос к подлежащему: - // Кто не отправляет почтой? - qword = GetSubjectQuestion(footprint[1]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не отправляет почтой? - answer, // я - Join(s2, v3, o)); // Ты не отправляешь почтой - - } - } - } - } - #endregion Почтой я НЕ отправляю. - - - #region Я почтой не отправляю. - if (footprint.Match("pr,1|2,nom,sing n,instr,inanim neg v,vf1")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms[1]); // почтой - var v_node = terms[3]; // отправляю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Я почтой не отправляю - // Ты отправляешь почтой? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты отправляешь почтой? - answer, // нет - Join(s2, v3, o)); // Ты не отправляешь почтой - - - // Вопрос к подлежащему: - // Кто не отправляет почтой? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не отправляет почтой? - answer, // я - Join(s2, v3, o)); // Ты не отправляешь почтой - } - } - } - } - #endregion Почтой я НЕ отправляю. - - - #region я не отправляю почтой. - if (footprint.Match("pr,1|2,nom,sing neg v,vf1 n,instr,inanim")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms[3]); // почтой - var v_node = terms[2]; // отправляю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Я почтой не отправляю - // Ты отправляешь почтой? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты отправляешь почтой? - answer, // нет - Join(s2, v3, o)); // Ты не отправляешь почтой - - - - // Вопрос к подлежащему: - // Кто не отправляет почтой? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не отправляет почтой? - answer, // я - Join(s2, v3, o)); // Ты не отправляешь почтой - } - } - } - } - #endregion я не отправляю почтой. - - - #region Не отправляю я почтой. - if (footprint.Match("neg v,vf1 pr,1|2,nom,sing n,instr,inanim")) - { - used = true; - - string s = TermsToString(gren, terms[2]); // я - string o = TermsToString(gren, terms[3]); // почтой - var v_node = terms[1]; // отправляю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[2], to_person); - string v2 = ChangeVerbTo(gren, v_node, to_person); - - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - string qword = null; - string answer = null; - - // Не отправляю я почтой. - // Ты отправляешь почтой? - // Нет. - answer = "нет"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты отправляешь почтой? - answer, // нет - Join(s2, v3, o)); // Ты не отправляешь почтой - - // Вопрос к подлежащему: - // Кто не отправляет почтой? - qword = GetSubjectQuestion(footprint[2]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - v3 = "не " + v2; - answer = s; - question = L(qword, v3, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не отправляет почтой? - answer, // я - Join(s2, v3, o)); // Ты не отправляешь почтой - } - } - } - } - #endregion Не отправляю я почтой. - - - #region Я гарантирую возврат денег - if (footprint.Match("pr,1|2,nom,sing v,vf1,acc,~gen n,acc n,gen")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms.Skip(2).Take(2)); // возврат денег - var v_node = terms[1]; // гарантирую - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я гарантирую возврат денег - // Ты гарантируешь возврат денег? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты гарантируешь возврат денег? - answer, // да - Join(s2, v2, o)); // Ты гарантируешь возврат денег - - - // Вопрос к дополнению: - // Что ты гарантируешь? - qword = GetAccusObjectQuestion(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v2, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты гарантируешь? - answer, // возврат денег - Join(s2, v2, o)); // Ты гарантируешь возврат денег - } - - // Вопрос к подлежащему: - // Кто гарантирует возврат денег? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто гарантирует возврат денег? - s, // я - Join(s2, v2, o)); // Ты гарантируешь возврат денег - } - } - } - #endregion Я гарантирую возврат денег - - - #region Я жду Ваших предложений - if (footprint.Match("pr,1|2,nom,sing v,vf1,gen adj,gen n,gen")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms.Skip(2).Take(2)); // Ваших предложений - var v_node = terms[1]; // гарантирую - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я жду Ваших предложений - // Ты ждешь ваших предложений? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты ждешь ваших предложений? - answer, // да - Join(s2, v2, o)); // Ты ждешь ваших предложений - - // Вопрос к дополнению: - // Что ты ждешь? - qword = GetAccusObjectQuestion(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v2, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты ждешь? - answer, // ваших предложений - Join(s2, v2, o)); // Ты ждешь ваших предложений - } - - // Вопросы "какой? etc" к прямому дополнению - // Каких предложений ты ждешь? - qword = GetWhichQword4Obj(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - string o2 = qword + " " + TermsToString(gren, terms[3]); // каких предложений? - answer = TermsToString(gren, terms[2]); // ваших - WriteAll(phrase, L(o2, v2, s2), answer); - } - - - // Вопрос к подлежащему: - // Кто ждет ваших предложений? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - WritePermutationsInterpretation2(question, answer, Join(s2, v2, o)); - } - } - } - #endregion Я жду Ваших предложений - - - #region Я помню чудное мгновенье. - if (footprint.Match("pr,1|2,nom,sing v,vf1,acc adj,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms.Skip(2).Take(2)); // чудное мгновенье - var v_node = terms[1]; // помню - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я помню чудное мгновенье. - // Ты помнишь чудное мгновенье? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты помнишь чудное мгновенье? - answer, // да - Join(s2, v2, o)); // Ты помнишь чудное мгновенье - - // Вопрос к дополнению: - // Что ты помнишь? - qword = GetAccusObjectQuestion(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v2, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты помнишь? - answer, // чудное мгновенье - Join(s2, v2, o)); // Ты помнишь чудное мгновенье - } - - // Вопросы "какой? etc" к прямому дополнению - // Какое мгновенье ты помнишь? - qword = GetWhichQword4Obj(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - string o2 = qword + " " + TermsToString(gren, terms[3]); // какое мгновенье - answer = TermsToString(gren, terms[2]); // чудное - question = L(o2, v2, s2); - - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Какое мгновенье ты помнишь? - answer, // чудное - Join(s2, v2, o)); // Ты помнишь чудное мгновенье - - } - - // Вопрос к подлежащему: - // Кто помнит чудное мгновенье? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто помнит чудное мгновенье? - answer, // я - Join(s2, v2, o)); // Ты помнишь чудное мгновенье - } - } - } - #endregion - - - #region Я нахожусь в Краснодаре. - if (footprint.Match("pr,1|2,nom,sing v,vf1 prep n")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - var v_node = terms[1]; // нахожусь - string pn = TermsToString(gren, terms.Skip(2).Take(2)); // в Краснодаре - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я нахожусь в Краснодаре. - // Ты находишься в Краснодаре? - // Да. - answer = "да"; - var question = L(s2, v2, pn); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(L(s2, v2, pn), // Ты находишься в Краснодаре? - Join("да", ",", pn), // да, в Краснодаре - Join(s2, v2, pn)); // Ты находишься в Краснодаре - - WritePermutationsInterpretation2(L(s2, v2, pn), // Ты находишься в Краснодаре? - Join("да", ",", s), // да, я - Join(s2, v2, pn)); // Ты находишься в Краснодаре - - - // Вопрос к подлежащему: - // Кто находится в Краснодаре? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, pn); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто находится в Краснодаре? - s, // я - Join(s2, v2, pn)); // Ты находишься в Краснодаре - } - } - } - #endregion Я нахожусь в Краснодаре. - - - #region И я читал. - if (footprint.Match("pr,1|2,nom,sing v,vf1")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - var v_node = terms[1]; // читал - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я читаю. - // Ты читаешь? - // Да. - answer = "да"; - var question = L(s2, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты читаешь? - Join("да", ",", TermsToString(gren, v_node)), // Да, читаю - Join(s2, v2)); // Ты читаешь - - WritePermutationsInterpretation2(question, // Ты читаешь? - Join("да", ",", s), // Да, я - Join(s2, v2)); // Ты читаешь - - // Вопрос к подлежащему: - // Кто читает? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто читает? - s, // я - Join(s2, v2)); // Ты читаешь - } - } - } - #endregion И я читал. - - - #region Я только продаю! - if (footprint.Match("pr,1|2,nom,sing adv v,vf1")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string a = TermsToString(gren, terms[1]); // только - var v_node = terms[2]; // продаю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[2], to_person); - - string qword = null; - string answer = null; - - // Я только продаю. - // Ты только продаешь? - // Да. - answer = "да"; - var question = L(s2, a, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты только продаешь? - answer, // да - Join(s2, v2)); // Ты только продаешь - - - // Вопрос к подлежащему: - // Кто продает? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, a, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто только продает? - answer, // я - Join(s2, v2)); // Ты только продаешь - } - } - } - #endregion Я только продаю! - - - #region Радовался я недолго. - if (footprint.Match("v,vf1 pr,1|2,nom,sing adv")) - { - used = true; - - string s = TermsToString(gren, terms[1]); // я - string a = TermsToString(gren, terms[2]); // недолго - var v_node = terms[0]; // радовался - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[1], to_person); - string v2 = ChangeVerbTo(gren, terms[0], to_person); - - string qword = null; - string answer = null; - - // Радовался я недолго. - // Ты недолго радовался? - // Да. - answer = "да"; - var question = L(s2, a, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты недолго радовался? - answer, // да - Join(s2, a, v2)); // Ты недолго радовался - - // Вопрос к подлежащему: - // Кто недолго радовался? - qword = GetSubjectQuestion(footprint[1]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, a, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто недолго радовался? - s, // я - Join(s2, a, v2)); // Ты недолго радовался - } - } - } - #endregion Радовался я недолго. - - - #region Теперь я знаю. - if (footprint.Match("adv pr,1|2,nom,sing v,vf1")) - { - used = true; - - string a = TermsToString(gren, terms[0]); // теперь - string s = TermsToString(gren, terms[1]); // я - var v_node = terms[2]; // знаю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[1], to_person); - string v2 = ChangeVerbTo(gren, terms[2], to_person); - - string qword = null; - string answer = null; - - // Теперь я знаю. - // Теперь ты знаешь? - // Да. - answer = "да"; - var question = L(s2, a, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Теперь ты знаешь? - Join("да", ",", v2), // да, знаю - Join(s2, a, v2)); // Ты теперь знаешь - - WritePermutationsInterpretation2(question, // Теперь ты знаешь? - Join("да", ",", a, v2), // да, теперь знаю - Join(s2, a, v2)); // Ты теперь знаешь - - // Вопрос к подлежащему: - // Кто теперь знает? - qword = GetSubjectQuestion(footprint[1]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, a, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто теперь знает? - s, // я - Join(s2, a, v2)); // Ты теперь знаешь - - } - } - } - #endregion Теперь я знаю. - - - #region Я не курю. - if (footprint.Match("pr,1|2,nom,sing neg v,vf1")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - var v_node = terms[2]; // курю - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[2], to_person); - - string qword = null; - string answer = null; - - // Я не курю. - // Ты куришь? - // Нет. - answer = "нет"; - var question = L(s2, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(L(s2, v2), // Ты куришь? - answer, // нет - Join(s2, "не", v2)); // Ты не куришь - - WritePermutationsInterpretation2(L(s2, v2), // Ты куришь? - Join("нет", ",", "не", v2), // нет, не курю - Join(s2, "не", v2)); // Ты не куришь - - WritePermutationsInterpretation2(question, // Ты куришь? - Join("нет", ",", "не", s), // нет, не я - Join(s2, "не", v2)); // Ты не куришь - - // Вопрос к подлежащему: - // Кто не курит? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - string v3 = "не " + v2; - answer = s2; - question = L(qword, v3); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не курит? - answer, // я - Join(s2, v3)); // Ты не куришь - } - } - } - #endregion Я не курю. - - - #region Я заклеил моментом. - if (footprint.Match("pr,1|2,nom,sing v,vf1,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string v = TermsToString(gren, terms[1]); // заклеил - string o = TermsToString(gren, terms[2]); // моментом - var v_node = terms[1]; // заклеил - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я заклеил моментом. - // Ты заклеил моментом? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(L(s2, v2, o), // Ты заклеил моментом? - "да", - Join(s2, v2, o)); // Ты заклеил моментом - - WritePermutationsInterpretation2(L(s2, v2, o), // Ты заклеил моментом? - Join("да", ",", o), // да, моментом - Join(s2, v2, o)); // Ты заклеил моментом - - WritePermutationsInterpretation2(L(s2, v2, o), // Ты заклеил моментом? - Join("да", ",", s), // да, я - Join(s2, v2, o)); // Ты заклеил моментом - - WritePermutationsInterpretation2(L(s2, v2, o), // Ты заклеил моментом? - Join("да", ",", v), // да, заклеил - Join(s2, v2, o)); // Ты заклеил моментом - - // Вопрос к дополнению: - qword = GetInstrObjectQuestion(footprint[2]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v2, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(L(qword, s2, v2), // Чем ты заклеил? - answer, // моментом - Join(s2, v2, o)); // Ты заклеил моментом - } - - // Вопрос к подлежащему: - // Кто заклеил моментом? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто заклеил моментом? - s, // я - Join(s2, v2, o)); // Ты заклеил моментом - } - } - } - #endregion Я заклеил моментом. - - - #region Я ищу работу. - if (footprint.Match("pr,1|2,nom,sing v,vf1,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string v = TermsToString(gren, terms[1]); // ищу - string o = TermsToString(gren, terms[2]); // работу - var v_node = terms[1]; // ищу - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я ищу работу. - // Ты ищешь работу? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты ищешь работу? - "да", // да - Join(s2, v2, o)); // Ты ищешь работу - - WritePermutationsInterpretation2(question, // Ты ищешь работу? - Join("да", ",", v), // да, ищу - Join(s2, v2, o)); // Ты ищешь работу - - WritePermutationsInterpretation2(question, // Ты ищешь работу? - Join("да", ",", o), // да, работу - Join(s2, v2, o)); // Ты ищешь работу - - - // Вопрос к дополнению: - // Что ты ищешь? - qword = GetAccusObjectQuestion(footprint[2]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(s2, v2, qword); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты ищешь? - answer, // работу - Join(s2, v2, o)); // Ты ищешь работу - } - - // Вопрос к подлежащему: - // Кто ищет работу? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто ищет работу? - s, // я - Join(s2, v2, o)); // Ты ищешь работу - } - } - } - #endregion Я ищу работу. - - - #region Коробку я потерял... - if (footprint.Match("n,acc pr,1|2,nom,sing v,vf1,acc")) - { - used = true; - - string o = TermsToString(gren, terms[0]); // коробку - string s = TermsToString(gren, terms[1]); // я - string v = TermsToString(gren, terms[2]); // потерял - var v_node = terms[2]; // потерял - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[1], to_person); - string v2 = ChangeVerbTo(gren, terms[2], to_person); - - string qword = null; - string answer = null; - - // Коробку я потерял. - // Ты потерял коробку? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты потерял коробку? - "да", // да - Join(s2, v2, o)); // Ты потерял коробку - - WritePermutationsInterpretation2(question, // Ты потерял коробку? - Join("да", ",", v), // да, потерял - Join(s2, v2, o)); // Ты потерял коробку - - WritePermutationsInterpretation2(question, // Ты потерял коробку? - Join("да", ",", o), // да, коробку - Join(s2, v2, o)); // Ты потерял коробку? - - - // Вопрос к дополнению: - // Что ты потерял? - qword = GetAccusObjectQuestion(footprint[0]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(qword, s2, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ты потерял? - answer, // коробку - Join(s2, v2, o)); // Ты потерял коробку - } - - // Вопрос к подлежащему: - // Кто потерял коробку? - qword = GetSubjectQuestion(footprint[1]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто потерял коробку? - s, // я - Join(s2, v2, o)); // Ты потерял коробку - } - } - } - #endregion Коробку я потерял... - - - #region Я жаловался коллегам. - if (footprint.Match("pr,1|2,nom,sing v,vf1,dat n,dat")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // я - string o = TermsToString(gren, terms[2]); // коллегам - var v_node = terms[1]; // жаловался - - string to_person = ChangePersonTo(s); - if (!string.IsNullOrEmpty(to_person)) - { - string s2 = ChangePronounTo(gren, terms[0], to_person); - string v2 = ChangeVerbTo(gren, terms[1], to_person); - - string qword = null; - string answer = null; - - // Я жаловался коллегам. - // Ты жаловался коллегам? - // Да. - answer = "да"; - var question = L(s2, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Ты жаловался коллегам? - "да", // да - Join(s2, v2, o)); // Ты жаловался коллегам - - WritePermutationsInterpretation2(question, // Ты жаловался коллегам? - Join("да", ",", v2), // да, жаловался - Join(s2, v2, o)); // Ты жаловался коллегам - - WritePermutationsInterpretation2(question, // Ты жаловался коллегам? - Join("да", ",", o), // да, коллегам - Join(s2, v2, o)); // Ты жаловался коллегам - - // Вопрос к дополнению: - // Кому ты жаловался? - qword = GetDativeObjectQuestion(footprint[2]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - question = L(qword, s2, v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кому ты жаловался? - answer, // коллегам - Join(s2, v2, o)); // Ты жаловался коллегам - } - - // Вопрос к подлежащему: - // Кто жаловался коллегам? - qword = GetSubjectQuestion(footprint[0]); - v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, v2, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто жаловался коллегам? - s, // я - Join(s2, v2, o)); // Ты жаловался коллегам - } - } - } - #endregion Я жаловался коллегам. - - - #region Петя ничуть не смутился. - if (footprint.Match("n,nom adv neg v,vf1")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // Петя - string a = TermsToString(gren, terms[1]); // ничуть - - if (AdverbCategory.IsAppropriateForNeg(a)) - { - var v_node = terms[3]; // смутился - string v = TermsToString(gren, terms[3]); // смутился - - string answer = "нет"; - var question = L(s, v); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Петя смутился? - answer, // нет - Join(s, "не", v)); // Петя не смутился - - WritePermutationsInterpretation2(question, // Петя смутился? - Join("нет", ",", "не", v), // нет, не смутился - Join(s, "не", v)); // Петя не смутился - - WritePermutationsInterpretation2(question, // Петя смутился? - Join("нет", ",", "не", s), // нет, не Петя - Join(s, "не", v)); // Петя не смутился - - string qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, Join("не", v2)); - WriteQA3(phrase, question, answer); - WritePermutationsInterpretation2(question, // Кто не смутился? - answer, // Петя - Join(s, "не", v)); // Петя не смутился - } - } - } - #endregion Петя ничуть не смутился. - - - #region Юбка не мнется совершенно! - if (footprint.Match("n,nom neg v,vf1 adv")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // Юбка - var v_node = terms[2]; // мнется - string v = TermsToString(gren, terms[2]); // мнется - string adv = TermsToString(gren, terms[3]); // совершенно - - string answer = "нет"; - var question = L(s, v); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Юбка мнется? - answer, // нет - Join(s, "не", v)); // Юбка не мнется - - WritePermutationsInterpretation2(question, // Юбка мнется? - Join("нет", ",", "не", v), // нет, не мнется - Join(s, "не", v)); // Юбка не мнется - - string qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - // Q: Что не мнется совершенно? - // A: Юбка - answer = s; - WriteAll(phrase, L(qword, "не " + v2, adv), answer); - } - } - #endregion Юбка не мнется совершенно! - - - #region Китайцы не были моряками. - if (footprint.Match("n,nom neg v,vf1 n,instr")) - { - used = true; - - string s = TermsToString(gren, terms[0]); // Китайцы - var v_node = terms[2]; // были - string v = TermsToString(gren, terms[2]); // были - string o = TermsToString(gren, terms[3]); // моряками - - string answer = "нет"; - var question = L(s, v, o); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Китайцы были моряками? - answer, // нет - Join(s, "не", v, o)); // Китайцы не были моряками. - - WritePermutationsInterpretation2(question, // Китайцы были моряками? - Join("нет", ",", "не", v), // нет, не были - Join(s, "не", v, o)); // Китайцы не были моряками. - - WritePermutationsInterpretation2(question, // Китайцы были моряками? - Join("нет", ",", "не", s), // нет, не китайцы - Join(s, "не", v, o)); // Китайцы не были моряками. - - WritePermutationsInterpretation2(question, // Китайцы были моряками? - Join("нет", ",", "не", o), // нет, не моряками - Join(s, "не", v, o)); // Китайцы не были моряками. - - string qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - question = L(qword, "не " + v2, o); // Кто не был моряками? - answer = s; - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Кто не был моряками? - answer, // китайцы - Join(s, "не", v, o)); // Китайцы не были моряками. - } - } - #endregion Китайцы не были моряками. - - - #region Не мнется юбка совершенно! - if (footprint.Match("neg v,vf1 n,nom adv")) - { - used = true; - - string s = TermsToString(gren, terms[2]); // Юбка - var v_node = terms[1]; // мнется - string v = TermsToString(gren, terms[1]); // мнется - - string answer = "нет"; - var question = L(s, v); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Юбка мнется? - answer, // нет - Join(s, "не", v)); // Юбка не мнется - - WritePermutationsInterpretation2(question, // Юбка мнется? - Join("нет", ",", "не", v), // нет, не мнется - Join(s, "не", v)); // Юбка не мнется - - - string qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, "не " + v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что не мнется? - s, // юбка - Join(s, "не", v)); // Юбка не мнется - } - - } - #endregion Юбка не мнется совершенно! - - - #region Ранее автомобиль не эксплуатировался. - if (footprint.Match("adv n,nom neg v,vf1")) - { - used = true; - - string a = TermsToString(gren, terms[0]); // ранее - if (!AdverbCategory.IsQuestionAdverb(a)) - { - string s = TermsToString(gren, terms[1]); // автомобиль - var v_node = terms[3]; // эксплуатировался - string v = TermsToString(gren, terms[3]); - - string answer = "нет"; - var question = L(s, v); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Автомобиль эксплуатировался? - answer, // нет - Join(s, "не", v)); // Автомобиль не эксплуатировался - - WritePermutationsInterpretation2(question, // Автомобиль эксплуатировался? - Join("нет", ",", "не", v), // нет, не эксплуатировался - Join(s, "не", v)); // Автомобиль не эксплуатировался - - string qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - question = L(qword, a, "не " + v2); - WriteQA3(phrase, question, answer); - - WritePermutationsInterpretation2(question, // Что ранее не эксплуатировалось? - s, // автомобиль - Join(s, a, "не", v)); // Автомобиль ранее не эксплуатировался - } - } - } - #endregion Ранее автомобиль не эксплуатировался. - - - #region Электронное зажигание упрощает запуск инструмента - if (footprint.Match("adj,nom n,nom v,acc,~gen n,acc n,gen")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Электронное зажигание - string v = TermsToString(gren, terms[2]); // упрощает - string o = TermsToString(gren, terms.Skip(3).Take(2)); // запуск инструмента - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что упрощает электронное зажигание? - qword = GetAccusObjectQuestion(footprint[3]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что упрощает запуск инструмента? - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - - // Вопрос к атрибуту подлежащего: - // Какое зажигание упрощает запуск инструмента? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[1]); - if (!string.IsNullOrEmpty(qword)) - { - string s2 = qword + " " + TermsToString(gren, terms[1]); // какое зажигание - answer = TermsToString(gren, terms[0]); // электронное - WriteAll(phrase, L(s2, v, o), answer); - } - } - } - #endregion Электронное зажигание упрощает запуск инструмента - - - #region Процессор платы имеет пятифазное питание - if (footprint.Match("n,nom n,gen v,acc,~gen adj,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Процессор платы - string v = TermsToString(gren, terms[2]); // имеет - string o = TermsToString(gren, terms.Skip(3).Take(2)); // пятифазное питание - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что имеет процессор платы? - qword = GetAccusObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что имеет пятифазное питание? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - - // Вопросы "какой? etc" к прямому дополнению - // Какое питание имеет процессор платы? - qword = GetWhichQword4Obj(footprint[4]); - if (!string.IsNullOrEmpty(qword)) - { - string o2 = qword + " " + TermsToString(gren, terms[4]); // какое питание - answer = TermsToString(gren, terms[3]); // пятифазное - WriteAll(phrase, L(o2, v, s), answer); - } - } - } - #endregion Процессор платы имеет пятифазное питание - - - #region Ностальгирующая публика принимала певца радушно. - if (footprint.Match("adj,nom n,nom v,acc n,acc adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Ностальгирующая публика - string v = TermsToString(gren, terms[2]); // принимала - string o = TermsToString(gren, terms.Skip(3).Take(1)); // певца - string a = TermsToString(gren, terms[4]); // радушно - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Кого принимала радушно ностальгирующая публика? - qword = GetAccusObjectQuestion(footprint[3]); - answer = o; - WriteAll(phrase, L(s, v, a, qword), answer); - - // Вопросы к подлежащему - // Кто принимал певца равнодушно? - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, a, o), answer); - } - - - // Вопрос к наречному обстоятельству: - // Как принимала певца ностальгирующая публика? - // ^^^ - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s, o), answer); - } - - } - } - #endregion Ностальгирующая публика принимала певца радушно. - - - #region Загадочная славянская душа выворачивается наизнанку. - if (footprint.Match("adj,nom adj,nom n,nom v adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(3)); // Загадочная славянская душа - string v = TermsToString(gren, terms[3]); // выворачивается - string a = TermsToString(gren, terms[4]); // наизнанку - var v_node = terms[3]; - - string answer = null; - string qword = null; - - // Вопрос к подлежащему: - // Что выворачивается наизнанку? - // ^^^ - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, a, v2), answer); - } - - // Вопрос к наречному обстоятельству: - // Как выворачивается загадочная славянская душа? - // ^^^ - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - } - } - #endregion Загадочная славянская душа выворачивается наизнанку. - - - #region Вашему вниманию представляются Красивые номера - if (footprint.Match("adj,dat n,dat v,dat adj,nom n,nom")) - { - used = true; - - string o = TermsToString(gren, terms.Take(2)); // Вашему вниманию - string v = TermsToString(gren, terms[2]); // представляются - string s = TermsToString(gren, terms.Skip(3).Take(2)); // Красивые номера - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Чему представляются красивые номера? - qword = GetDativeObjectQuestion(footprint[1]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что представляется вашему вниманию? - qword = GetSubjectQuestion(footprint[4]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Вашему вниманию представляются Красивые номера - - - #region Рассказывает сказки мама или папа - if (footprint.Match("v,acc n,acc n,nom conj n,nom")) - { - used = true; - - string v = TermsToString(gren, terms[0]); // рассказывает - string o = TermsToString(gren, terms.Skip(1).Take(1)); // сказки - string s = TermsToString(gren, terms.Skip(2).Take(3)); // мама или папа - var v_node = terms[0]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что рассказывает мама или папа? - qword = GetAccusObjectQuestion(footprint[1]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Кто рассказывает сказки? - qword = GetSubjectQuestion(footprint[4]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Рассказывает сказки мама или папа - - - #region Зарастают водорослями пруды и каналы. - if (footprint.Match("v,instr n,instr n,nom conj n,nom")) - { - used = true; - - string v = TermsToString(gren, terms[0]); // зарастают - string o = TermsToString(gren, terms.Skip(1).Take(1)); // водорослями - string s = TermsToString(gren, terms.Skip(2).Take(3)); // пруды и каналы - var v_node = terms[0]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Чем зарастают пруды и каналы? - qword = GetInstrObjectQuestion(footprint[0]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что зарастает водорослями? - qword = GetSubjectQuestion(footprint[4]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Зарастают водорослями пруды и каналы. - - - #region Фотографии и цена соответствуют действительности - if (footprint.Match("n,nom conj n,nom v,dat n,dat")) - { - used = true; - - string s = TermsToString(gren, terms.Take(3)); // Фотографии и цена - string v = TermsToString(gren, terms[3]); // соответствуют - string o = TermsToString(gren, terms.Skip(4).Take(1)); // действительности - var v_node = terms[3]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Чему соответствуют фотографии и цена? - qword = GetDativeObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что соответствует действительности? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Фотографии и цена соответствуют действительности - - - #region Мотор и коробка идеально работают - if (footprint.Match("n,nom conj n,nom adv v")) - { - used = true; - - string s = TermsToString(gren, terms.Take(3)); // Мотор и коробка - string a = TermsToString(gren, terms[3]); // идеально - string v = TermsToString(gren, terms[4]); // работают - var v_node = terms[4]; - - string qword = null; - string answer = null; - - // Вопросы к подлежащему - // Что работает идеально? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - - - // Вопрос к наречному обстоятельству: - // Как работают мотор и коробка? - // ^^^ - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteQA3(phrase, L(qword, v, s), answer); - } - } - #endregion Мотор и коробка идеально работают - - - #region Басаев угрожает церквям и детям. - if (footprint.Match("n,nom v,dat n,dat conj n,dat")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // Басаев - string v = TermsToString(gren, terms[1]); // угрожает - string o = TermsToString(gren, terms.Skip(2).Take(3)); // церквям и детям - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Чему угрожает Басаев? - qword = GetDativeObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Кто угрожает церквям и детям? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Басаев угрожает церквям и детям. - - - #region Девушка снимет комнату или квартиру - if (footprint.Match("n,nom v,acc n,acc conj n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // Девушка - string v = TermsToString(gren, terms[1]); // снимет - string o = TermsToString(gren, terms.Skip(2).Take(3)); // комнату или квартиру - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что снимет девушка? - qword = GetAccusObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Кто снимет комнату или квартиру? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Девушка снимет комнату или квартиру - - - #region Возродившийся конкурс активно набирает обороты. - if (footprint.Match("adj,nom n,nom adv v,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Возродившийся конкурс - string a = TermsToString(gren, terms[2]); // активно - string v = TermsToString(gren, terms[3]); // набирает - string o = TermsToString(gren, terms.Skip(4).Take(1)); // обороты - var v_node = terms[3]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что активно набирает возродившийся конкурс? - qword = GetAccusObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, a, v, qword), answer); - WriteQA3(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что активно набирает обороты? - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, a, v2, o), answer); - WriteQA3(phrase, L(qword, v2, o), answer); - } - - // Вопрос к наречному обстоятельству: - // Как набирает обороты возродившийся конкурс? - // ^^^ - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s, o), answer); - } - - } - } - #endregion Возродившийся конкурс активно набирает обороты. - - - #region Внезапная острая боль перехватила дыхание. - if (footprint.Match("adj,nom adj,nom n,nom v,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(3)); // Внезапная острая боль - string v = TermsToString(gren, terms[3]); // перехватила - string o = TermsToString(gren, terms.Skip(4).Take(1)); // дыхание - var v_node = terms[3]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что перехватила внезапная острая боль? - qword = GetAccusObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что перехватило дыхание? - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Внезапная острая боль перехватила дыхание. - - - #region Здесь вызревает янтарный игристый напиток. - if (footprint.Match("adv v adj,nom adj,nom n,nom")) - { - used = true; - - string a = TermsToString(gren, terms[0]); // здесь - string v = TermsToString(gren, terms[1]); // вызревает - string s = TermsToString(gren, terms.Skip(2).Take(3)); // янтарный игристый напиток - var v_node = terms[1]; - - string answer = null; - string qword = null; - - // Вопрос к подлежащему: - // Что здесь вызревает? - // ^^^ - qword = GetSubjectQuestion(footprint[4]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, a, v2), answer); - } - - // Вопрос к наречному обстоятельству: - // Где вызревает янтарный игристый напиток? - // ^^^ - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - } - } - #endregion Здесь вызревает янтарный игристый напиток. - - - #region Налоговый кодекс подвергается значительным правкам. - if (footprint.Match("adj,nom n,nom v,dat adj,dat n,dat")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Налоговый кодекс - string v = TermsToString(gren, terms[2]); // подвергается - string o = TermsToString(gren, terms.Skip(3).Take(2)); // значительным правкам - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Налоговый кодекс подвергается чему? - qword = GetDativeObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что подвергается правкам? - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Налоговый кодекс подвергается значительным правкам. - - - #region Ласковый игривый малыш ждет своего хозяина - if (footprint.Match("adj,nom adj,nom n,nom v,acc adj,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(3)); // Ласковый игривый малыш - string v = TermsToString(gren, terms[3]); // ждет - string o = TermsToString(gren, terms.Skip(4).Take(2)); // своего хозяина - var v_node = terms[3]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Кого ждет ласковый игривый малыш? - qword = GetAccusObjectQuestion(footprint[5]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Кто ждет своего хозяина? - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Ласковый игривый малыш ждет своего хозяина - - - #region Зрителям смелость секретаря очень понравилась. - if (footprint.Match("n,dat n,nom n,gen adv v,dat")) - { - used = true; - - string o = TermsToString(gren, terms.Take(1)); // зрителям - string s = TermsToString(gren, terms.Skip(1).Take(2)); // смелость секретаря - string a = TermsToString(gren, terms[3]); // очень - string v = TermsToString(gren, terms[4]); // понравилась - var v_node = terms[4]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Кому смелость секретаря очень понравилась? - qword = GetDativeObjectQuestion(footprint[0]); - answer = o; - WriteAll(phrase, L(s, a, v, qword), answer); - - // Вопросы к подлежащему - // Что очень понравилось зрителям? - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, a, v2, o), answer); - } - - - // Вопрос к наречному обстоятельству - // Как зрителям понравилась смелость секретаря? - qword = GetQuestionWordForAdverb(a); - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - } - } - } - #endregion Зрителям смелость секретаря очень понравилась. - - - #region Выглядит такой термостакан очень достойно - if (footprint.Match("v adj,nom n,nom adv,a_modif adv")) - { - used = true; - - string v = TermsToString(gren, terms[0]); // выглядит - string s = TermsToString(gren, terms.Skip(1).Take(2)); // такой термостакан - string a = TermsToString(gren, terms.Skip(3).Take(2)); // очень достойно - var v_node = terms[0]; - - string answer = null; - string qword = null; - - // Вопрос к подлежащему: - // Что выглядит очень достойно? - // ^^^ - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, a, v2), answer); - } - - // Вопрос к наречному обстоятельству: - // Как выглядит такой термостакан? - // ^^^ - qword = GetQuestionWordForAdverb(TermsToString(gren, terms[4])); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - } - } - #endregion Выглядит такой термостакан очень достойно - - - #region Яркие расцветки неизменно нравятся деткам - if (footprint.Match("adj,nom n,nom adv v,dat n,dat ")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Яркие расцветки - string a = TermsToString(gren, terms[2]); // неизменно - string v = TermsToString(gren, terms[3]); // нравятся - string o = TermsToString(gren, terms.Skip(4).Take(1)); // деткам - var v_node = terms[3]; - - string answer = null; - string qword = null; - - // Вопрос к подлежащему: - // что нравится деткам? - // ^^^ - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, a, v2, o), answer); - } - - // Вопрос к наречному обстоятельству: - // Как нравятся деткам яркие расцветки? - // ^^^ - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(qword, v, s, o), answer); - } - - // Вопросы к прямому дополнению: - // Кому нравятся яркие расцветки? - qword = GetDativeObjectQuestion(footprint[4]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - WriteQA3(phrase, L(s, v, qword), answer); - WriteAll(phrase, L(s, a, v, qword), answer); - } - - } - #endregion Яркие расцветки неизменно нравятся деткам - - - #region Трехмерное изображение создают регулируемые линзы - if (footprint.Match("adj,acc n,acc v,acc adj,nom n,nom")) - { - used = true; - - string o = TermsToString(gren, terms.Take(2)); // трехмерное изображение - string v = TermsToString(gren, terms[2]); // создают - string s = TermsToString(gren, terms.Skip(3).Take(2)); // регулируемые линзы - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что создают регулируемые линзы? - qword = GetAccusObjectQuestion(footprint[1]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что создает трехмерное изображение? - qword = GetSubjectQuestion(footprint[4]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Трехмерное изображение создают регулируемые линзы - - - #region Пленка имеет глубокий черный цвет - if (footprint.Match("n,nom v,acc adj,acc adj,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // пленка - string v = TermsToString(gren, terms[1]); // имеет - string o = TermsToString(gren, terms.Skip(2).Take(3)); // глубокий черный цвет - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Что имеет пленка? - // ^^^ - qword = GetAccusObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что имеет глубокий черный цвет? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Пленка имеет глубокий черный цвет - - - #region Металлодетекторы обладают большой пропускной способностью - if (footprint.Match("n,nom v,instr adj,instr adj,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // Металлодетекторы - string v = TermsToString(gren, terms[1]); // обладают - string o = TermsToString(gren, terms.Skip(2).Take(3)); // большой пропускной способностью - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Чем обладают металлодетекторы? - // ^^^ - qword = GetInstrObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что обладает большой пропускной способностью? - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Металлодетекторы обладают большой пропускной способностью - - - #region Стальная рама отличается высокой прочностью - if (footprint.Match("adj,nom n,nom v,instr adj,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // Стальная рама - string v = TermsToString(gren, terms.Skip(2).Take(1)); // отличается - string o = TermsToString(gren, terms.Skip(3).Take(2)); // высокой прочностью - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Чем отличается стальная рама? - // ^^^ - qword = GetInstrObjectQuestion(footprint[4]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - // Что отличается высокой прочностью? - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Стальная рама отличается высокой прочностью - - - #region Продается очень мощный компьютер. - if (footprint.Match("v adv,a_modif adj,nom n,nom")) - { - used = true; - - string v = TermsToString(gren, terms.Take(1)); // продается - string s = TermsToString(gren, terms.Skip(1).Take(3)); // очень мощный компьютер - var v_node = terms[0]; - - string answer = null; - string qword = null; - - // Вопрос к атрибуту подлежащего: - // Какой компьютер продается? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - string s2 = qword + " " + TermsToString(gren, terms.Skip(3).Take(1)); - answer = TermsToString(gren, terms.Skip(1).Take(2)); // очень мощный - - // Какой компьютер продается? - WriteAll(phrase, L(s2, v), answer); - } - - - // Вопрос к подлежащему: - // Что продается? - // ^^^ - qword = GetSubjectQuestion(footprint[3]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2), answer); - } - } - - #endregion Продается очень мощный компьютер. - - - #region Очень мощный компьютер продается. - if (footprint.Match("adv,a_modif adj,nom n,nom v")) - { - used = true; - - string s = TermsToString(gren, terms.Take(3)); // очень мощный компьютер - string v = TermsToString(gren, terms.Skip(3).Take(1)); // продается - var v_node = terms[3]; - - string answer = null; - string qword = null; - - // Вопрос к атрибуту подлежащего: - // Какой компьютер продается? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[2]); - if (!string.IsNullOrEmpty(qword)) - { - string s2 = qword + " " + TermsToString(gren, terms.Skip(2).Take(1)); - answer = TermsToString(gren, terms.Take(2)); // очень мощный - - // Какой компьютер продается? - WriteAll(phrase, L(s2, v), answer); - } - - - // Вопрос к подлежащему: - // Что продается? - // ^^^ - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2), answer); - } - } - #endregion Продается очень мощный компьютер. - - - #region Модель выглядит очень гармонично. - if (footprint.Match("n,nom v adv,a_modif adv,adv_как")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // модель - string v = TermsToString(gren, terms.Skip(1).Take(1)); // выглядит - string a = TermsToString(gren, terms.Skip(2).Take(2)); // очень гармонично - var v_node = terms[1]; - - string answer = null; - string qword = null; - - // Вопрос к обстоятельству - // Как выглядит модель? - qword = GetQuestionWordForAdverb(TermToString(gren, terms[3])); - - if (!string.IsNullOrEmpty(qword)) - { - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопрос к подлежащему: - // Что выглядит очень гармонично? - // ^^^ - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Модель выглядит очень гармонично. - - - #region Брат пристально посмотрел на доктора. - if (footprint.Match("n,nom adv v prep n,acc,anim")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // брат - string a = TermsToString(gren, terms.Skip(1).Take(1)); // пристально - string v = TermsToString(gren, terms.Skip(2).Take(1)); // посмотрел - string pn = TermsToString(gren, terms.Skip(3).Take(2)); // на доктора - var v_node = terms[2]; - - // Вопросы к предложному дополнению - string qword = "на кого"; - string answer = pn; - - // На кого посмотрел брат? - WriteQA3(phrase, L(qword, v, s), answer); - - // На кого пристально посмотрел брат? - WriteAll(phrase, L(qword, a, v, s), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто пристально посмотрел на доктора? - answer = s; - WriteAll(phrase, L(qword, a, v2, pn), answer); - - // Кто посмотрел на доктора? - WriteQA3(phrase, L(qword, v2, pn), answer); - } - - // Вопросы к объекту в предложном обстоятельстве: - // На кого посмотрел брат? - qword = TermsToString(gren, terms[3]) + " кого"; - answer = TermsToString(gren, terms.Skip(3).Take(2)); - WriteAll(phrase, L(qword, a, v, s), answer); - } - #endregion Брат пристально посмотрел на доктора. - - - #region Дверца открывается влево. - if (footprint.Match("n,nom v adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // дверца - string v = TermsToString(gren, terms.Skip(1).Take(1)); // открывается - string a = TermsToString(gren, terms.Skip(2).Take(1)); // влево - var v_node = terms[1]; - - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Куда открывается дверца? - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что открывается влево? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - #endregion Дверца открывается влево. - - - #region Внутри находится карман. - if (footprint.Match("adv v n,nom")) - { - used = true; - - string a = TermsToString(gren, terms.Take(1)); // внутри - string v = TermsToString(gren, terms.Skip(1).Take(1)); // находится - string s = TermsToString(gren, terms.Skip(2).Take(1)); // карман - var v_node = terms[1]; - - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Где находится карман? - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что находится внутри? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Внутри находится карман. - - - #region Улица активно застраивается. - if (footprint.Match("n,nom adv v")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // улица - string a = TermsToString(gren, terms.Skip(1).Take(1)); // активно - string v = TermsToString(gren, terms.Skip(2).Take(1)); // застраивается - var v_node = terms[2]; - - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Как застраивается улица? - answer = a; - WriteAll(phrase, L(qword, v, s), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что застраивается активно? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Улица активно застраивается. - - - #region Мыло убивает запахи. - if (footprint.Match("n,nom v,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // мыло - string v = TermsToString(gren, terms.Skip(1).Take(1)); // убивает - string o = TermsToString(gren, terms.Skip(2).Take(1)); // запахи - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - qword = GetAccusObjectQuestion(footprint[2]); - - // Мыло убивает что? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что убивает запахи? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Мыло убивает запахи. - - - #region Заняли бойцы оборону. - if (footprint.Match("v,acc n,nom n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Skip(1).Take(1)); // бойцы - string v = TermsToString(gren, terms.Take(1)); // заняли - string o = TermsToString(gren, terms.Skip(2).Take(1)); // оборону - var v_node = terms[0]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - qword = GetAccusObjectQuestion(footprint[2]); - - // Бойцы заняли что? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто занял оборону? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Заняли бойцы оборону. - - - #region Оборону заняли бойцы. - if (footprint.Match("n,acc v,acc n,nom")) - { - used = true; - - string s = TermsToString(gren, terms.Skip(2).Take(1)); // бойцы - string v = TermsToString(gren, terms.Skip(1).Take(1)); // заняли - string o = TermsToString(gren, terms.Take(1)); // оборону - var v_node = terms[1]; - - if (IsGoodObject(o) && v != "зовут") - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - qword = GetAccusObjectQuestion(footprint[0]); - - // Бойцы заняли что? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[2]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто занял оборону? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Оборону заняли бойцы. - - - #region Мама удивилась вопросу. - if (footprint.Match("n,nom v,dat n,dat")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // мама - string v = TermsToString(gren, terms.Skip(1).Take(1)); // удивилась - string o = TermsToString(gren, terms.Skip(2).Take(1)); // вопросу - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - qword = GetDativeObjectQuestion(footprint[2]); - - // Мама удивилась чему? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто удивился вопросу? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Мама удивилась вопросу. - - - #region Дорога зимой чистится. - if (footprint.Match("n,nom n,instr v")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // дорога - string o = TermsToString(gren, terms.Skip(1).Take(1)); // зимой - string v = TermsToString(gren, terms.Skip(2).Take(1)); // чистится - var v_node = terms[2]; - - string qword = null; - string answer = null; - - if (IsTimeNoun(o)) - { - // Дорога зимой чистится. - qword = "когда"; - answer = o; - WriteAll(phrase, L(qword, v, s), answer); // Когда чистится дорога? - } - else if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению - qword = GetInstrObjectQuestion(footprint[1]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что чистится зимой? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - #endregion Дорога зимой чистится. - - - #region Ручка регулируется кнопкой. - if (footprint.Match("n,nom v,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // ручка - string v = TermsToString(gren, terms.Skip(1).Take(1)); // регулируется - string o = TermsToString(gren, terms.Skip(2).Take(1)); // кнопкой - var v_node = terms[1]; - - string qword = null; - string answer = null; - - if (IsTimeNoun(o)) - { - // Ночью ударит мороз. - qword = "когда"; - answer = o; - WriteAll(phrase, L(qword, v, s), answer); // Когда ударит мороз? - } - else if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению - qword = GetInstrObjectQuestion(footprint[2]); - answer = o; - - // Ручка регулируется чем? - WriteAll(phrase, L(s, v, qword), answer); - } - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что регулируется кнопкой? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - #endregion Ручка регулируется кнопкой. - - - #region Ночью ударит мороз. - if (footprint.Match("n,instr v n,nom")) - { - used = true; - - string o = TermsToString(gren, terms.Take(1)); // ночью - string v = TermsToString(gren, terms.Skip(1).Take(1)); // ударит - string s = TermsToString(gren, terms.Skip(2).Take(1)); // мороз - var v_node = terms[1]; - - string qword = null; - string answer = null; - - if (IsTimeNoun(o)) - { - // Ночью ударит мороз. - qword = "когда"; - answer = o; - WriteAll(phrase, L(qword, v, s), answer); - } - else if (IsGoodObject(o)) - { - // Прахом пошли усилия - - // Вопросы к прямому дополнению - qword = GetInstrObjectQuestion(footprint[0]); - - // Усилия пошли чем? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[2]); - - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что пошло прахом? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - #endregion Прахом пошли усилия. - - - #region Бригада плотников ищет работу - if (footprint.Match("n,nom n,gen v,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // бригада плотников - string v = TermsToString(gren, terms.Skip(2).Take(1)); // ищет - string o = TermsToString(gren, terms.Skip(3).Take(1)); // работу - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению: - // Бригада плотников ищет что? - qword = GetAccusObjectQuestion(footprint[3]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что ищет работу? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Бригада плотников ищет работу - - - #region Занятия проводятся опытными тренерами - if (footprint.Match("n,nom v,instr adj,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); - string v = TermsToString(gren, terms.Skip(1).Take(1)); - string o = TermsToString(gren, terms.Skip(2).Take(2)); - - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к обстоятельственному дополнению - // Занятия проводятся кем? - qword = GetInstrObjectQuestion(footprint[3]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - WriteAll(phrase, L(o, v2, qword), answer); - } - - // Вопросы "какой? etc" к прямому дополнению - // Какими тренерами проводятся занятия? - qword = GetWhichQword4Instr(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - string o2 = qword + " " + TermsToString(gren, terms.Skip(3).Take(1)); // какими тренерами - answer = TermsToString(gren, terms.Skip(2).Take(1)); // опытными - WriteAll(phrase, L(o2, v, s), answer); - } - } - } - #endregion Занятия проводятся опытными тренерами - - - #region Ткань хорошо держит форму - if (footprint.Match("n,nom adv v,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // ткань - string v = TermsToString(gren, terms.Skip(1).Take(2)); // хорошо держит - string o = TermsToString(gren, terms.Skip(3).Take(1)); // форму - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Ткань хорошо держит что? - qword = GetAccusObjectQuestion(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - if (!string.IsNullOrEmpty(qword)) - { - string v2 = TermsToString(gren, terms.Skip(1).Take(1)) + " " + RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что хорошо держит форму? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - } - #endregion Ткань хорошо держит форму - - - #region Быстро красит машина материю! - if (footprint.Match("adv v,acc n,nom n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Skip(2).Take(1)); // машина - string v = TermsToString(gren, terms.Take(2)); // быстро красит - string o = TermsToString(gren, terms.Skip(3).Take(1)); // ткань - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Машина быстро красит что? - qword = GetAccusObjectQuestion(footprint[3]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[2]); - string v2 = TermsToString(gren, terms.Take(1)) + " " + RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что быстро красит ткань? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Быстро красит машина материю! - - - #region Анастасия обрела самообладание быстро. - if (footprint.Match("n,nom v,acc n,acc adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // Анастасия - string v = TermsToString(gren, terms.Skip(3)) + " " + TermsToString(gren, terms.Skip(1).Take(1)); // быстро красит - string o = TermsToString(gren, terms.Skip(2).Take(1)); // самообладание - var v_node = terms[1]; - - if (IsGoodObject(o)) - { - string qword = null; - string answer = null; - - // Вопросы к прямому дополнению - // Анастасия быстро обрела что? - qword = GetAccusObjectQuestion(footprint[2]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = TermsToString(gren, terms.Skip(3).Take(1)) + " " + RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто быстро обрел самообладание? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Анастасия обрела самообладание быстро. - - - #region Стекло не зарастает водорослями - if (footprint.Match("n,nom neg v,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // стекло - string v = TermsToString(gren, terms.Skip(2).Take(1)); // зарастает - string o = TermsToString(gren, terms.Skip(3).Take(1)); // водорослями - var v_node = terms[2]; - - string answer = null; - - // Стекло зарастает водорослями? - answer = "нет"; - WriteQA3(phrase, L(s, v, o), answer); - - // Вопросы к подлежащему - string qword = GetSubjectQuestion(footprint[0]); - string v0 = RebuildVerb2(gren, v_node, qword); - string v2 = "не " + v0; - - if (!string.IsNullOrEmpty(v0)) - { - // Что не зарастает водорослями? - answer = s; - WriteQA3(phrase, L(qword, v2, o), answer); - } - - // Вопросы к обстоятельственному дополнению - qword = GetInstrObjectQuestion(footprint[3]); - - v2 = "не " + v; - - // Стекло не зарастает чем? - answer = o; - WriteAll(phrase, L(s, v2, qword), answer); - } - #endregion Стекло не зарастает водорослями - - - #region Предложение не является публичной офертой. - if (footprint.Match("n,nom neg v,instr adj,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // предложение - string v = TermsToString(gren, terms.Skip(2).Take(1)); // является - string o = TermsToString(gren, terms.Skip(3).Take(2)); // публичной офертой - - string answer = null; - - if (IsGoodObject(o)) - { - // Предложение является публичной офертой? - answer = "нет"; - WriteQA3(phrase, L(s, v, o), answer); - - // Вопросы к подлежащему - string qword = GetSubjectQuestion(footprint[0]); - - var v_node = terms[2]; - string v0 = RebuildVerb2(gren, v_node, qword); - string v2 = "не " + v0; - - if (!string.IsNullOrEmpty(v0)) - { - // Что не является публичной офертой? - answer = s; - WriteQA3(phrase, L(qword, v2, o), answer); - } - - // Вопросы к обстоятельственному дополнению - qword = GetInstrObjectQuestion(footprint[3]); - v2 = "не " + v; - - // Предложение не является чем? - answer = o; - WriteQA3(phrase, L(s, v2, qword), answer); - } - } - #endregion Предложение не является публичной офертой. - - - #region Скорость подачи регулируется инвертером - if (footprint.Match("n,nom n,gen v,instr n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // скорость подачи - string v = TermsToString(gren, terms.Skip(2).Take(1)); // регулируется - string o = TermsToString(gren, terms.Skip(3)); // инвертером - var v_node = terms[2]; - - string qword = ""; - string answer = null; - - // Вопросы к обстоятельственному дополнению в творительном падеже - qword = GetInstrObjectQuestion(footprint[3]); - - if (IsGoodObject(o)) - { - // Скорость подачи регулируется чем? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - - // Вопрос к подлежащему: - // Что регулируется инвертором? - // ^^^ - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что регулируется инвертером? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - #endregion Скорость подачи регулируется инвертером - - - #region Машинка не нагревает воду - if ( - footprint.Match("n,nom neg v,acc n") // Машинка не нагревает воду - || footprint.Match("n,nom n,acc neg v,acc") // Двигатель масло не расходует - || footprint.Match("n,gen n,nom neg v,acc") // Вложений машина не потребует - || footprint.Match("n,nom n,dat neg v,acc") // Паутина работе не мешает - || footprint.Match("n,dat neg v,acc n,nom") // Малышу не подошел размер - ) - { - used = true; - - string o = null; - string s = null; - string v = null; - SolarixGrammarEngineNET.SyntaxTreeNode obj_node = null; - - - if (footprint.Match("n,nom neg v n")) // Машинка не нагревает воду - { - s = TermsToString(gren, terms.Take(1)); // машинка - v = TermsToString(gren, terms.Skip(2).Take(1)); - obj_node = terms[3]; - o = TermsToString(gren, terms.Skip(3).Take(1)); // воду - } - else if (footprint.Match("n,nom n neg v")) // Двигатель масло не расходует - { - s = TermsToString(gren, terms.Take(1)); // двигатель - v = TermsToString(gren, terms.Skip(3).Take(1)); // расходует - obj_node = terms[1]; - o = TermsToString(gren, terms.Skip(1).Take(1)); // масло - } - else if (footprint.Match("n,gen n,nom neg v")) // Вложений машина не потребует - { - obj_node = terms[0]; - o = TermsToString(gren, terms.Take(1)); // вложений - s = TermsToString(gren, terms.Skip(1).Take(1)); // машина - v = TermsToString(gren, terms.Skip(3).Take(1)); // потребует - } - else if (footprint.Match("n,nom n,dat neg v")) // Паутина работе не мешает - { - s = TermsToString(gren, terms.Take(1)); // паутина - obj_node = terms[0]; - o = TermsToString(gren, terms.Skip(1).Take(1)); // работе - v = TermsToString(gren, terms.Skip(3).Take(1)); // мешает - } - else if (footprint.Match("n,dat neg v n,nom")) // Малышу не подошел размер - { - obj_node = terms[0]; - o = TermsToString(gren, terms.Take(1)); // малышу - v = TermsToString(gren, terms.Skip(2).Take(1)); // подошел - s = TermsToString(gren, terms.Skip(3).Take(1)); // размер - } - - if (IsGoodObject(o)) - { - if (obj_node.GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru) == SolarixGrammarEngineNET.GrammarEngineAPI.GENITIVE_CASE_ru) - { - // Заменим на винительный падеж: - // Парик не требует укладки ==> Парик требует укладку - List coords = new List(); - List states = new List(); - - foreach (var p in obj_node.GetPairs()) - { - if (p.CoordID == SolarixGrammarEngineNET.GrammarEngineAPI.CASE_ru) - { - coords.Add(p.CoordID); - states.Add(SolarixGrammarEngineNET.GrammarEngineAPI.ACCUSATIVE_CASE_ru); - } - else - { - coords.Add(p.CoordID); - states.Add(p.StateID); - } - } - - - List fx = SolarixGrammarEngineNET.GrammarEngine.sol_GenerateWordformsFX(gren.GetEngineHandle(), obj_node.GetEntryID(), coords, states); - if (fx.Count > 0) - { - o = fx[0].ToLower(); - } - else - { - o = null; - } - } - - string answer = null; - if (!string.IsNullOrEmpty(o)) - { - used = true; - - // Машинка нагревает воду? - answer = "нет"; - WriteQA3(phrase, L(s, v, o), answer); - //WritePermutationsQA2(phrase, answer, s, v+" ли", o); - } - } - } - #endregion Машинка не нагревает воду - - - #region Часы имеют оригинальное происхождение - // Часы имеют оригинальное происхождение - if (footprint.Match("n,nom v,acc adj,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); - string v = TermsToString(gren, terms.Skip(1).Take(1)); - string o = TermsToString(gren, terms.Skip(2).Take(2)); - var v_node = terms[1]; - - string qword = null; - string answer = null; - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению - // Часы имеют что? - // Часы имеют кого? - qword = GetAccusObjectQuestion(footprint[3]); - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что имеет оригинальное происхождение? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - - // Вопросы "какой? etc" к прямому дополнению - // Какое происхождение имеют часы? - qword = GetWhichQword4Obj(footprint[3]); - if (!string.IsNullOrEmpty(qword)) - { - string o2 = qword + " " + TermsToString(gren, terms.Skip(3).Take(1)); // происхождение - answer = TermsToString(gren, terms.Skip(2).Take(1)); // оригинальное - - // Какое происхождение имеют часы? - WriteAll(phrase, L(o2, v, s), answer); - } - } - } - #endregion Часы имеют оригинальное происхождение - - - #region Пластиковые окна закрываются ролставнями - // Пластиковые окна закрываются ролставнями - if (footprint.Match("adj,nom n,nom v n,instr")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); - string v = TermsToString(gren, terms.Skip(2).Take(1)); - string o = TermsToString(gren, terms.Skip(3)); - var v_node = terms[2]; - - string qword = null; - string answer = null; - - // Вопросы к обстоятельственному дополнению в творительном падеже - qword = GetInstrObjectQuestion(footprint[3]); - - if (IsGoodObject(o)) - { - // Пластиковые окна закрываются чем? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - - // Вопрос к атрибуту подлежащего: - // Какие окна закрываются ставнями? - // ^^^^^ - qword = ""; - if (footprint[1].Match("sing")) - { - int gender = terms[0].GetCoordState(SolarixGrammarEngineNET.GrammarEngineAPI.GENDER_ru); - switch (gender) - { - case SolarixGrammarEngineNET.GrammarEngineAPI.MASCULINE_GENDER_ru: qword = "какой"; break; - case SolarixGrammarEngineNET.GrammarEngineAPI.FEMININE_GENDER_ru: qword = "какая"; break; - case SolarixGrammarEngineNET.GrammarEngineAPI.NEUTRAL_GENDER_ru: qword = "какое"; break; - } - } - else - { - qword = "какие"; - } - - string s2 = qword + " " + TermsToString(gren, terms.Skip(1).Take(1)); - if (!string.IsNullOrEmpty(qword)) - { - // Какие окна закрываются ставнями? - answer = TermsToString(gren, terms.Take(1)); // пластиковые - WriteAll(phrase, L(s2, v, o), answer); - } - - - // Вопрос к подлежащему: - // Что закрывается ставнями? - // ^^^ - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что закрывается ставнями? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - #endregion Пластиковые окна закрываются ролставнями - - - #region Задняя дверь открывается вверх. - if (footprint.Match("adj,nom n,nom v adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // задняя дверь - string v = TermsToString(gren, terms.Skip(2).Take(1)); // открывается - string a = TermsToString(gren, terms.Skip(3)); // вверх - var v_node = terms[2]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Задняя дверь открывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопрос к атрибуту подлежащего: - // Какая дверь открывается вверх? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[1]); - string s2 = qword + " " + TermsToString(gren, terms.Skip(1).Take(1)); - if (!string.IsNullOrEmpty(qword)) - { - answer = TermsToString(gren, terms.Take(1)); // задняя - - // Какая дверь открывается вверх? - WriteAll(phrase, L(s2, v, a), answer); - } - - - // Вопрос к подлежащему: - // Что открывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - if (!string.IsNullOrEmpty(v2)) - { - // Что открывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Задняя дверь открывается вверх. - - - #region Задняя дверь вверх открывается. - if (footprint.Match("adj,nom n,nom adv v")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // задняя дверь - string a = TermsToString(gren, terms.Skip(2).Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(3).Take(1)); // открывается - var v_node = terms[3]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Задняя дверь открывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопрос к атрибуту подлежащего: - // Какая дверь открывается вверх? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[1]); - string s2 = qword + " " + TermsToString(gren, terms.Skip(1).Take(1)); - if (!string.IsNullOrEmpty(qword)) - { - answer = TermsToString(gren, terms.Take(1)); // задняя - - // Какая дверь открывается вверх? - WriteAll(phrase, L(s2, v, a), answer); - } - - - // Вопрос к подлежащему: - // Что открывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что открывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Задняя дверь вверх открывается. - - - #region Вверх открывается задняя дверь. - if (footprint.Match("adv v adj,nom n,nom")) - { - used = true; - - string a = TermsToString(gren, terms.Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(1).Take(1)); // открывается - string s = TermsToString(gren, terms.Skip(2).Take(2)); // задняя дверь - var v_node = terms[1]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Задняя дверь открывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопрос к атрибуту подлежащего: - // Какая дверь открывается вверх? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[3]); - string s2 = qword + " " + TermsToString(gren, terms.Skip(3).Take(1)); // Какая дверь - if (!string.IsNullOrEmpty(qword)) - { - answer = TermsToString(gren, terms.Skip(2).Take(1)); // задняя - - // Какая дверь открывается вверх? - WriteAll(phrase, L(s2, v, a), answer); - } - - - // Вопрос к подлежащему: - // Что открывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[3]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что открывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Задняя дверь вверх открывается. - - - #region открывается вверх задняя дверь. - if (footprint.Match("v adv adj,nom n,nom")) - { - used = true; - - string v = TermsToString(gren, terms.Take(1)); // открывается - string a = TermsToString(gren, terms.Skip(1).Take(1)); // вверх - string s = TermsToString(gren, terms.Skip(2).Take(2)); // задняя дверь - var v_node = terms[0]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Задняя дверь открывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопрос к атрибуту подлежащего: - // Какая дверь открывается вверх? - // ^^^^^ - qword = GetWhichQword4Subject(footprint[3]); - string s2 = qword + " " + TermsToString(gren, terms.Skip(3).Take(1)); // Какая дверь - if (!string.IsNullOrEmpty(qword)) - { - answer = TermsToString(gren, terms.Skip(2).Take(1)); // задняя - - // Какая дверь открывается вверх? - WriteAll(phrase, L(s2, v, a), answer); - } - - - // Вопрос к подлежащему: - // Что открывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[3]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что открывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Задняя дверь вверх открывается. - - - #region Панель управления откидывается вверх. - if (footprint.Match("n,nom n,gen v adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // панель управления - string v = TermsToString(gren, terms.Skip(2).Take(1)); // откидывается - string a = TermsToString(gren, terms.Skip(3)); // вверх - var v_node = terms[2]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Панель управления откидывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - // Вопрос к подлежащему: - // Что откидывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что откидывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Панель управления откидывается вверх. - - - #region Вверх откидывается панель управления - if (footprint.Match("adv v n,nom n,gen")) - { - used = true; - - string a = TermsToString(gren, terms.Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(1).Take(1)); // откидывается - string s = TermsToString(gren, terms.Skip(2).Take(2)); // панель управления - var v_node = terms[1]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Панель управления откидывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопрос к подлежащему: - // Что откидывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[2]); - - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что откидывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Вверх откидывается панель управления - - - #region Панель управления вверх откидывается. - if (footprint.Match("n,nom n,gen adv v")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // панель управления - string a = TermsToString(gren, terms.Skip(2).Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(3).Take(1)); // откидывается - var v_node = terms[3]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Панель управления откидывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопрос к подлежащему: - // Что откидывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что откидывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Панель управления вверх откидывается. - - - #region Вверх панель управления откидывается - if (footprint.Match("adv n,nom n,gen v")) - { - used = true; - - string a = TermsToString(gren, terms.Take(1)); // вверх - string s = TermsToString(gren, terms.Skip(1).Take(2)); // панель управления - string v = TermsToString(gren, terms.Skip(3).Take(1)); // откидывается - var v_node = terms[3]; - - // Вопросы к обстоятельству - string qword = GetQuestionWordForAdverb(a); - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - // Панель управления откидывается куда? - answer = a; - WriteAll(phrase, L(s, v, qword), answer); - - - // Вопрос к подлежащему: - // Что откидывается вверх? - // ^^^ - qword = GetSubjectQuestion(footprint[1]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Что откидывается вверх? - answer = s; - WriteAll(phrase, L(qword, v2, a), answer); - } - } - } - #endregion Вверх панель управления откидывается - - - #region Собственник заключает договор аренды - // Собственник заключает договор аренды - if (footprint.Match("n,nom v n,acc n,gen")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // собственник - string v = TermsToString(gren, terms.Skip(1).Take(1)); // заключает - string o = TermsToString(gren, terms.Skip(2)); // договор аренды - var v_node = terms[1]; - - string qword = null; - string answer = null; - - // Вопрос к прямому дополнению - qword = GetAccusObjectQuestion(footprint[2]); - - if (IsGoodObject(o)) - { - // Собственник заключает что? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто заключает договор аренды? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - #endregion Собственник заключает договор аренды - - - #region Высокие волны заливали пляж - if (footprint.Match("adj,nom n,nom v,acc n,acc")) - { - used = true; - - // Высокие волны заливали пляж - // Высокая волна залила пляж - - string s = TermsToString(gren, terms.Take(2)); - string v = TermsToString(gren, terms.Skip(2).Take(1)); - string o = TermsToString(gren, terms.Skip(3).Take(1)); - - var v_node = terms[2]; - - if (IsGoodObject(o)) - { - // Вопросы к атрибуту подлежащего: - // Какие волны заливали пляж? - string qword = GetWhichQword4Subject(footprint[1]); - string answer = ""; - - if (!string.IsNullOrEmpty(qword)) - { - used = true; - - string s2 = qword + " " + TermsToString(gren, terms.Skip(1).Take(1)); - answer = terms[0].GetWord(); - - // Какой кот ищет подружку? - WriteAll(phrase, L(s2, v, o), answer); - } - - - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[3]); - - if (!string.IsNullOrEmpty(qword)) - { - // Что снимет семейная пара? - answer = o; - WriteAll(phrase, L(qword, v, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[1]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто ищет подружку? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Высокие волны заливали пляж - - - #region Сетку обслуживает опытный человек - if (footprint.Match("n,acc v,acc adj,nom n,nom")) - { - used = true; - - string s = TermsToString(gren, terms.Skip(2).Take(2)); // опытный человек - string v = TermsToString(gren, terms.Skip(1).Take(1)); // обслуживает - string o = TermsToString(gren, terms.Take(1)); // сетку - var v_node = terms[1]; // обслуживает - - string answer = ""; - - // Сетку обслуживает опытный человек - string qword = GetWhichQword4Subject(footprint[2]); - - if (IsGoodObject(o)) - { - // Вопросы к атрибуту подлежащего - - if (!string.IsNullOrEmpty(qword)) - { - used = true; - - answer = TermsToString(gren, terms.Skip(2).Take(1)); // опытный - s = qword + " " + TermsToString(gren, terms.Skip(3).Take(1)); // человек - - // Какой человек обслуживает сетку? - WriteAll(phrase, L(s, v, o), answer); - } - - - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[0]); - - if (!string.IsNullOrEmpty(qword)) - { - s = TermsToString(gren, terms.Skip(2).Take(2)); // опытный человек - - // Опытный человек обслуживает что? - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[3]); - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто обслуживает сетку? - answer = s; - WriteAll(phrase, L(qword, v2, o), answer); - } - } - } - #endregion Сетку обслуживает опытный человек - - - #region Массажные головки имеют встроенный нагрев - if (footprint.Match("adj,nom n,nom v,acc adj,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(2)); // массажные головки - string v = TermsToString(gren, terms.Skip(2).Take(1)); // имеют - string o = TermsToString(gren, terms.Skip(3).Take(2)); // встроенный нагрев - - string sn = TermsToString(gren, terms.Skip(1).Take(1)); // головки - string on = TermsToString(gren, terms.Skip(4).Take(1)); // нагрев - - if (IsGoodObject(o)) - { - // Вопросы к атрибуту прямого дополнения - // Массажные головки имеют встроенный нагрев. - // ^^^^^^^^^^ - // Какой нагрев имеют массажные головки? - // ^^^^^ - - string qword = ""; - var ft = footprint[3]; - if (ft.Match("anim,sing,masc")) - { - qword = "какого"; - } - else if (ft.Match("anim,sing,fem")) - { - qword = "какую"; - } - else if (ft.Match("anim,sing,neut")) - { - qword = "какое"; - } - else if (ft.Match("anim,pl")) - { - qword = "каких"; - } - else if (ft.Match("inanim,sing,masc")) - { - qword = "какой"; - } - else if (ft.Match("inanim,sing,fem")) - { - qword = "какую"; - } - else if (ft.Match("inanim,sing,neut")) - { - qword = "какое"; - } - else if (ft.Match("inanim,pl")) - { - qword = "какие"; - } - - string question = ""; - string answer = null; - - if (!string.IsNullOrEmpty(qword)) - { - used = true; - - string o2 = qword + " " + on; - - answer = TermsToString(gren, terms.Skip(3).Take(1)); // встроенный - WriteAll(phrase, L(s, v, o2), answer); - } - - - // Вопрос к атрибуту подлежащего: - // Какие головки имеют встроенный нагрев? - qword = GetWhichQword4Subject(footprint[1]); - - if (!string.IsNullOrEmpty(qword)) - { - used = true; - - string s2 = qword + " " + sn; - - answer = TermsToString(gren, terms.Take(1)); // массажные - WriteAll(phrase, L(s2, v, o), answer); - } - - - // Вопросы к прямому дополнению - qword = GetAccusObjectQuestion(footprint[4]); - - if (!string.IsNullOrEmpty(qword)) - { - answer = o; - WriteAll(phrase, L(s, v, qword), answer); - } - - - // Вопросы к подлежащему - // Массажная головка имеет встроенный нагрев - // Что имеет встроенный нагрев? - qword = GetSubjectQuestion(footprint[1]); - - var v_node = terms[2]; - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - answer = s; - - // Что имеет встроенный нагрев? - WriteAll(phrase, L(qword, v2, o), answer); - } - - } - } - #endregion Массажные головки имеют встроенный нагрев - - - #region Кот повел ребят вверх. - if (footprint.Match("n,nom v,acc n,acc adv")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // кот - string v = TermsToString(gren, terms.Skip(1).Take(1)); // повел - string o = TermsToString(gren, terms.Skip(2).Take(1)); // ребят - string a = TermsToString(gren, terms.Skip(3).Take(1)); // вверх - - var v_node = terms[1]; - string qword = null; - string answer = null; - - // Вопросы к обстоятельству - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - // Кот куда повел ребят? - answer = a; - WriteAll(phrase, L(s, qword, v, o), answer); - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[2]); - if (!string.IsNullOrEmpty(qword)) - { - // Кого повел вверх кот? - answer = o; - WriteAll(phrase, L(qword, v, a, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто повел ребят вверх? - answer = s; - WriteAll(phrase, L(qword, v2, o, a), answer); - } - } - } - } - #endregion Кот повел ребят вверх. - - - #region Кот вверх повел ребят. - if (footprint.Match("n,nom adv v,acc n,acc")) - { - used = true; - - string s = TermsToString(gren, terms.Take(1)); // кот - string a = TermsToString(gren, terms.Skip(1).Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(2).Take(1)); // повел - string o = TermsToString(gren, terms.Skip(3).Take(1)); // ребят - - var v_node = terms[2]; - string qword = null; - string answer = null; - - // Вопросы к обстоятельству - qword = GetQuestionWordForAdverb(a); - if (!string.IsNullOrEmpty(qword)) - { - // Кот куда повел ребят? - answer = a; - WriteAll(phrase, L(s, qword, v, o), answer); - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[3]); // ребят - if (!string.IsNullOrEmpty(qword)) - { - // Кого повел вверх кот? - answer = o; - WriteAll(phrase, L(qword, v, a, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[0]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто повел ребят вверх? - answer = s; - WriteAll(phrase, L(qword, v2, o, a), answer); - } - } - } - } - #endregion Кот вверх повел ребят. - - - #region Вверх кот повел ребят. - if (footprint.Match("adv n,nom v,acc n,acc")) - { - used = true; - - string a = TermsToString(gren, terms.Take(1)); // вверх - string s = TermsToString(gren, terms.Skip(1).Take(1)); // кот - string v = TermsToString(gren, terms.Skip(2).Take(1)); // повел - string o = TermsToString(gren, terms.Skip(3).Take(1)); // ребят - - var v_node = terms[2]; - string qword = null; - string answer = null; - - // Вопросы к обстоятельству - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - // Кот куда повел ребят? - answer = a; - WriteAll(phrase, L(s, qword, v, o), answer); - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[3]); // ребят - if (!string.IsNullOrEmpty(qword)) - { - // Кого повел вверх кот? - answer = o; - WriteAll(phrase, L(qword, v, a, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[1]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто повел ребят вверх? - answer = s; - WriteAll(phrase, L(qword, v2, o, a), answer); - } - } - } - } - #endregion Вверх кот повел ребят. - - - #region Вверх повел ребят кот. - if (footprint.Match("adv v,acc n,nom n,acc")) - { - used = true; - - string a = TermsToString(gren, terms.Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(1).Take(1)); // повел - string o = TermsToString(gren, terms.Skip(2).Take(1)); // ребят - string s = TermsToString(gren, terms.Skip(3).Take(1)); // кот - - var v_node = terms[1]; - string qword = null; - string answer = null; - - // Вопросы к обстоятельству - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - // Кот куда повел ребят? - answer = a; - WriteAll(phrase, L(s, qword, v, o), answer); - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[2]); - if (!string.IsNullOrEmpty(qword)) - { - // Кого повел вверх кот? - answer = o; - WriteAll(phrase, L(qword, v, a, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[3]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто повел ребят вверх? - answer = s; - WriteAll(phrase, L(qword, v2, o, a), answer); - } - } - } - } - #endregion Вверх повел ребят кот. - - - #region Ребят вверх кот повел. - if (footprint.Match("n,acc adv n,nom v,acc")) - { - used = true; - - string o = TermsToString(gren, terms.Take(1)); // ребят - string a = TermsToString(gren, terms.Skip(1).Take(1)); // вверх - string s = TermsToString(gren, terms.Skip(2).Take(1)); // кот - string v = TermsToString(gren, terms.Skip(3).Take(1)); // повел - - var v_node = terms[3]; - string qword = null; - string answer = null; - - // Вопросы к обстоятельству - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - // Кот куда повел ребят? - answer = a; - WriteAll(phrase, L(s, qword, v, o), answer); - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[0]); // ребят - - if (!string.IsNullOrEmpty(qword)) - { - // Кого повел вверх кот? - answer = o; - WriteAll(phrase, L(qword, v, a, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[2]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто повел ребят вверх? - answer = s; - WriteAll(phrase, L(qword, v2, o, a), answer); - } - } - } - } - #endregion Ребят вверх кот повел. - - - #region Ребят кот вверх повел. - if (footprint.Match("n,acc n,nom adv v,acc")) - { - used = true; - - string o = TermsToString(gren, terms.Take(1)); // ребят - string s = TermsToString(gren, terms.Skip(1).Take(1)); // кот - string a = TermsToString(gren, terms.Skip(2).Take(1)); // вверх - string v = TermsToString(gren, terms.Skip(3).Take(1)); // повел - - var v_node = terms[3]; - string qword = null; - string answer = null; - - // Вопросы к обстоятельству - qword = GetQuestionWordForAdverb(a); - - if (!string.IsNullOrEmpty(qword)) - { - // Кот куда повел ребят? - answer = a; - WriteAll(phrase, L(s, qword, v, o), answer); - - if (IsGoodObject(o)) - { - // Вопросы к прямому дополнению. - qword = GetAccusObjectQuestion(footprint[0]); // ребят - if (!string.IsNullOrEmpty(qword)) - { - // Кого повел вверх кот? - answer = o; - WriteAll(phrase, L(qword, v, a, s), answer); - } - - - // Вопросы к подлежащему - qword = GetSubjectQuestion(footprint[1]); - - // Иногда требуется изменить число для глагола: - // Глухие удары раскалывают тишину --> Что раскалывает тишину? - string v2 = RebuildVerb2(gren, v_node, qword); - - if (!string.IsNullOrEmpty(v2)) - { - // Кто повел ребят вверх? - answer = s; - WriteAll(phrase, L(qword, v2, o, a), answer); - } - } - } - } - #endregion Ребят вверх кот повел. - } - } - } - } - - if (!used) - { - wrt_skipped.WriteLine("{0}", phrase); - wrt_skipped.Flush(); - } - } - - wrt_samples.Flush(); - - Console.Write("{0} processed, {1} samples generated\r", nb_processed, nb_samples); - - return; - } - - - static HashSet sample_hashes = new HashSet(); - static MD5 md5 = MD5.Create(); - - static string NormalizeSample(string str) - { - return str.ToLower(); - } - - static bool IsUniqueSample(string str) - { - byte[] hash = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str.ToLower())); - Int64 ihash1 = BitConverter.ToInt64(hash, 0); - Int64 ihash2 = BitConverter.ToInt64(hash, 8); - Int64 ihash = ihash1 ^ ihash2; - - if (!sample_hashes.Contains(ihash)) - { - sample_hashes.Add(ihash); - return true; - } - else - { - return false; - } - } - - - static bool IsGoodSent(string phrase) - { - string stops = "как ни в чем не бывало|тем не менее"; - foreach (string s in stops.Split('|')) - { - if (phrase.Contains(s)) - return false; - } - - return true; - } - - static void Main(string[] args) - { - string result_folder = @"f:\tmp"; - List input_filenames = new List(); - - int MAX_SAMPLE = int.MaxValue; - int MAX_LEN = int.MaxValue; - string dictionary_xml = "dictionary.xml"; - bool OnlyNegations = false; - string rx_filter = null; - - #region Command_Line_Options - for (int i = 0; i < args.Length; ++i) - { - if (args[i] == "-input") - { - input_filenames.Add(args[i + 1]); - i++; - } - else if (args[i] == "-output") - { - result_folder = args[i + 1]; - i++; - } - else if (args[i] == "-max_samples") - { - MAX_SAMPLE = int.Parse(args[i + 1]); - i++; - } - else if (args[i] == "-max_len") - { - MAX_LEN = int.Parse(args[i + 1]); - i++; - } - else if (args[i] == "-only_neg") - { - OnlyNegations = true; - } - else if (args[i] == "-dict") - { - dictionary_xml = args[i + 1]; - i++; - } - else if (args[i] == "-rx") - { - rx_filter = args[i + 1].Trim(); - i++; - } - else - { - throw new ApplicationException(string.Format("Unknown option {0}", args[i])); - } - } - #endregion Command_Line_Options - - wrt_samples = new System.IO.StreamWriter(System.IO.Path.Combine(result_folder, "premise_question_answer.txt")); - wrt_skipped = new System.IO.StreamWriter(System.IO.Path.Combine(result_folder, "skipped.txt")); - wrt_interpret = new System.IO.StreamWriter(System.IO.Path.Combine(result_folder, "interpretation.txt")); - - // Загружаем грамматический словарь - Console.WriteLine("Loading dictionary {0}", dictionary_xml); - SolarixGrammarEngineNET.GrammarEngine2 gren = new SolarixGrammarEngineNET.GrammarEngine2(); - gren.Load(dictionary_xml, true); - - #region Processing_All_Files - foreach (string mask in input_filenames) - { - string[] files = null; - if (System.IO.Directory.Exists(mask)) - { - files = System.IO.Directory.GetFiles(mask, "*.txt"); - } - else if (mask.IndexOfAny("*?".ToCharArray()) != -1) - { - files = System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(mask), System.IO.Path.GetFileName(mask)); - } - else - { - files = new string[1] { mask }; - } - - Console.WriteLine("Number of input files={0}", files.Length); - - foreach (string file in files) - { - if (sample_count >= MAX_SAMPLE) - break; - - Console.WriteLine("Processing {0}...", file); - - using (System.IO.StreamReader rdr = new System.IO.StreamReader(file)) - { - while (!rdr.EndOfStream && sample_count < MAX_SAMPLE) - { - string sent = rdr.ReadLine(); - if (sent == null) break; - sent = sent.Trim(); - sample_count++; - - sent = sent.Replace(" ", " "); - - string lsent = sent.ToLower(); - if (!IsGoodSent(sent)) - continue; - - if (OnlyNegations) - { - bool has_neg = false; - - if (!lsent.Contains("тем не менее")) - { - if (lsent.StartsWith("не ") || lsent.Contains(" не ")) - { - has_neg = true; - } - } - - if (!has_neg) - { - continue; - } - } - - if (!string.IsNullOrEmpty(rx_filter)) - { - var mx = System.Text.RegularExpressions.Regex.Match(sent, rx_filter, System.Text.RegularExpressions.RegexOptions.IgnoreCase); - if (!mx.Success) - { - continue; - } - } - - try - { - ProcessSentence(sent, gren, MAX_LEN); - } - catch (Exception ex) - { - Console.Write("ERROR\nSentence={0}\nError={1}", sent, ex.Message); - } - } - } - } - } - #endregion Processing_All_Files - - wrt_samples.Close(); - wrt_skipped.Close(); - wrt_interpret.Close(); - - return; - } -} diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/GenerateQAFromParsing.csproj b/CSharpCode/GenerateQA/GenerateQAFromParsing/GenerateQAFromParsing.csproj deleted file mode 100644 index db7f389..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/GenerateQAFromParsing.csproj +++ /dev/null @@ -1,81 +0,0 @@ - - - - - Debug - AnyCPU - {3CBD3B8D-8EE7-42E5-8F8E-5A0D94688DC9} - Exe - Properties - GenerateQAFromParsing - GenerateQAFromParsing - v4.5.2 - 512 - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\..\..\..\MVoice\lem\lib64\gren_consts.dll - - - ..\..\..\..\..\MVoice\lem\lib64\gren_fx.dll - - - ..\..\..\..\..\MVoice\lem\lib64\gren_fx2.dll - - - - - - - - - - - - - - - - - - - - - - - - - - copy e:\MVoice\lem\lib64\solarix_grammar_engine.dll $(TargetDir) -copy e:\MVoice\lem\lib64\sqlite.dll $(TargetDir) - - - - \ No newline at end of file diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/Preprocessor.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/Preprocessor.cs deleted file mode 100644 index dcb18ee..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/Preprocessor.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -public class Preprocessor -{ - List prefixes; - public Preprocessor() - { - string[] sx = - { - "и|", // И я читал. - "ну|и|", // Ну и жара нынче стоит! - "к счастью|,", // К счастью, подавляющее большинство спасают. - "в|итоге|,", // В итоге, кошка пропала. - "а|вот", // А вот риф немного разочаровал. - "вот|", // Вот так началась наша поездка! - "ну|", // Ну ювелир принимает заказ. - "а|", // А божественное право давало Слово. - "конечно|", // Конечно, Мейми слегка растерялась. - "но|", // Но куда же делись деньги ? - "наконец|,", // Наконец, вверху помещается детектор. - "иными|словами|,", // Иными словами, институт перестраховался. - "короче|,", // Короче, предстоит переговорный процесс. - "увы|,", // Увы, поезд стоял в... - "во-вторых|,", // Во-вторых, удар смягчила вода. - "по крайней мере|,", // По крайней мере, есть обнадеживающие факты. - "в|общем|,", // В общем, набрали 4000 гривен. - "да|и", // Да и обязанностями родители не отягощали. - "хотя", // Хотя судьба Феликса сложилась трагически. - "то есть", // То есть морская капуста попросту пропадала. - "как|всегда|,", // Как всегда, не сходились цифры. - "а|ведь", // А ведь поэты не шутят. - "мол|", // Мол, суд потом разберется. - "возможно|", // Возможно, правительство экономит деньги? - "разумеется|", // Разумеется, поначалу храм блистал. - "похоже|,|что|", - "похоже|,|", // Похоже, разговор шел по-немецки. - }; - - prefixes = sx.Select(z => z.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)).OrderByDescending(z => z.Length).Select(z => string.Join("|", z) + "|").ToList(); - } - - - - public string Preprocess(string phrase0, SolarixGrammarEngineNET.GrammarEngine2 gren) - { - string phrase = phrase0; - - if( phrase.EndsWith("..")) - { - phrase = phrase.Substring(0, phrase.Length - 2); - } - - if (phrase.EndsWith("!")) - { - phrase = phrase.Substring(0, phrase.Length - 1); - } - - - string[] tokens = gren.Tokenize(phrase, SolarixGrammarEngineNET.GrammarEngineAPI.RUSSIAN_LANGUAGE); - List res_tokens = tokens.ToList(); - bool changed = false; - - string s = string.Join("|", tokens).ToLower(); - - foreach (string prefix in prefixes) - { - if (s.StartsWith(prefix)) - { - // Ну и жара нынче стоит! - res_tokens = res_tokens.Skip(prefix.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Length).ToList(); - changed = true; - break; - } - } - - - if (changed) - { - return string.Join(" ", res_tokens); - } - else - { - return phrase; - } - } - -} diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/Properties/AssemblyInfo.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/Properties/AssemblyInfo.cs deleted file mode 100644 index dc5daa5..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("GenerateQAFromParsing")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("GenerateQAFromParsing")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3cbd3b8d-8ee7-42e5-8f8e-5a0d94688dc9")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/SolarixExtender.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/SolarixExtender.cs deleted file mode 100644 index 6d3cc07..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/SolarixExtender.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Xml; -using System.Security.Cryptography; - - -public static class SolarixExtender -{ - public static bool IsPartOfSpeech(this SolarixGrammarEngineNET.SyntaxTreeNode node, SolarixGrammarEngineNET.GrammarEngine2 gren, int part_of_speech) - { - int p = gren.GetEntryClass(node.GetEntryID()); - return p == part_of_speech; - } -} - diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/StringExtender.cs b/CSharpCode/GenerateQA/GenerateQAFromParsing/StringExtender.cs deleted file mode 100644 index 544b62c..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/StringExtender.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; - - -public static class StringExtender -{ - public static bool NotIn(this string x, params string[] a) - { - foreach (string y in a) - { - if (x == y) - { - return false; - } - } - - return true; - } - - public static bool EqCI(this string x, string y) - { - return x.Equals(y, StringComparison.OrdinalIgnoreCase); - } - - public static bool InCI(this string x, string[] ys) - { - foreach( string a in ys ) - { - if (EqCI(x, a)) return true; - } - - return false; - } -} - diff --git a/CSharpCode/GenerateQA/GenerateQAFromParsing/options.txt b/CSharpCode/GenerateQA/GenerateQAFromParsing/options.txt deleted file mode 100644 index 724c83b..0000000 --- a/CSharpCode/GenerateQA/GenerateQAFromParsing/options.txt +++ /dev/null @@ -1,10 +0,0 @@ -Тебя зовут Сережа ------------------ --dict e:\MVoice\lem\bin-windows64\dictionary.xml -input f:\Corpus\SENTx\ru\SENT4.txt -output f:\tmp -rx "^[абвгдежзийклнопрсуфхцчшщыэюя](.+) зовут (.+)" - - -Негативные предпосылки ----------------------- --dict e:\MVoice\lem\bin-windows64\dictionary.xml -input e:\polygon\paraphrasing\data\facts4_1s.txt -output f:\tmp -neg_only - - diff --git a/CSharpCode/GenerateQA/README.md b/CSharpCode/GenerateQA/README.md deleted file mode 100644 index 39faa5a..0000000 --- a/CSharpCode/GenerateQA/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Утилита для генерации троек ПРЕДПОСЫЛКА-ВОПРОС-ОТВЕТ - -Вспомогательная утилита для чат-бота https://github.com/Koziev/chatbot, реализованная -на C# как консольная утилита для MS Windows. - -Генерирует датасет с тройками ПРЕДПОСЫЛКА-ВОПРОС-ОТВЕТ, например: - -``` -T: Памперсы имеют индикатор влагонасыщения -Q: памперсы имеют что? -A: индикатор влагонасыщения - -T: Памперсы имеют индикатор влагонасыщения -Q: памперсы что имеют? -A: индикатор влагонасыщения -``` - -Больше примеров можно увидеть тут https://github.com/Koziev/NLP_Datasets/blob/master/QA/premise_question_answer4.txt - -Также генерируется датасет для обучения модели интерпретации текста, которая должна -из двух фрагментов (вопроса и неразвернутого ответа) восстановить полный ответ: - -``` -глаза кто открыл? -Оля|Оля открыла глаза -``` - -Результат интерпретации отделяется от краткого ответа символом вертикальной верты. - -Используются результаты работы утилиты https://github.com/Koziev/chatbot/tree/master/CSharpCode/ExtractFactsFromParsing - -Для морфологического разбора фактов используется API Грамматического Словаря (http://solarix.ru/api/ru/list.shtml), -исходные тексты на C# и C++ лежат в отдельном репозитории здесь https://github.com/Koziev/GrammarEngine/tree/master/src/demo/ai/solarix/engines - -Частеречная разметка требует наличия русской словарной базы. Можно взять готовые файлы здесь https://github.com/Koziev/GrammarEngine/tree/master/src/bin-windows64 или -собрать ее самостоятельно из исходных текстов, которые лежат здесь https://github.com/Koziev/GrammarEngine/tree/master/src/dictionary.src - -## Запуск - -Утилита запускается в консоли MS Windows. Необходимо указать путь к собранной -русской словарной базе, путь к исходному файлу с фактами и путь к папке с результатами -работы: - -``` -GenerateQAFromParsing.exe -dict e:\MVoice\lem\bin-windows64\dictionary.xml -input e:\polygon\paraphrasing\data\facts4.txt -output f:\tmp -```