From 2927aef12eb104cf723975ae90c1e2abef115cfc Mon Sep 17 00:00:00 2001 From: "haiping008@gmail.com" Date: Tue, 7 Aug 2018 17:13:55 -0500 Subject: [PATCH] Fix cqdb_writer_close strncpy_s memory issue in Windows. --- .gitignore | 3 + BotSharp.Core/Abstractions/INlpPipeline.cs | 2 +- BotSharp.Core/Engines/BotTrainer.cs | 4 +- .../CRFsuite/CRFsuiteEntityRecognizer.cs | 143 +- BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs | 2 +- .../Engines/SpaCy/SpaCyEntityRecognizer.cs | 2 +- BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs | 2 +- BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs | 2 +- .../Engines/SpaCy/SpaCyTextCategorizer.cs | 2 +- BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs | 11 +- .../Engines/SpaCy/SpacyFeaturizer.cs | 2 +- BotSharp.MachineLearning/CRFsuite/Crfutils.cs | 11 +- BotSharp.MachineLearning/CRFsuite/Ner.cs | 19 +- BotSharp.MachineLearning/NLP/NlpToken.cs | 3 + BotSharp.MachineLearning/SpaCy/server.py | 148 +- BotSharp.WebHost/Algorithms/crfsuite.exe | Bin 0 -> 215040 bytes .../Sebis/{Airport => Chatbot}/agent.json | 0 .../Sebis/{Airport => Chatbot}/corpus.json | 8444 ++++++++--------- .../App_Data/DbInitializer/Agents/agents.json | 2 +- BotSharp.WebHost/BotSharp.WebHost.csproj | 7 + BotSharp.WebHost/Settings/bot.json | 6 +- 21 files changed, 4454 insertions(+), 4361 deletions(-) create mode 100644 BotSharp.WebHost/Algorithms/crfsuite.exe rename BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/{Airport => Chatbot}/agent.json (100%) rename BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/{Airport => Chatbot}/corpus.json (94%) diff --git a/.gitignore b/.gitignore index cae01f15..6c9e8cd6 100644 --- a/.gitignore +++ b/.gitignore @@ -294,3 +294,6 @@ __pycache__/ /BotSharp.UnitTest/App_Data/BotSharp.db /BotSharp.WebHost/App_Data/BotSharp.db /BotSharp.UI +/BotSharp.WebHost/App_Data/TrainingFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318.parsed.txt +/BotSharp.WebHost/App_Data/TrainingFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318.model +/BotSharp.WebHost/App_Data/TrainingFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318.corpus.txt diff --git a/BotSharp.Core/Abstractions/INlpPipeline.cs b/BotSharp.Core/Abstractions/INlpPipeline.cs index 774be45e..f1e7a2e4 100644 --- a/BotSharp.Core/Abstractions/INlpPipeline.cs +++ b/BotSharp.Core/Abstractions/INlpPipeline.cs @@ -14,6 +14,6 @@ namespace BotSharp.Core.Abstractions { IConfiguration Configuration { get; set; } - bool Process(Agent agent, JObject data); + bool ProcessAsync(Agent agent, JObject data); } } diff --git a/BotSharp.Core/Engines/BotTrainer.cs b/BotSharp.Core/Engines/BotTrainer.cs index 9065a3f2..3461c9fb 100644 --- a/BotSharp.Core/Engines/BotTrainer.cs +++ b/BotSharp.Core/Engines/BotTrainer.cs @@ -47,7 +47,7 @@ namespace BotSharp.Core.Engines string providerName = config.GetSection($"{platform}:Provider").Value; var provider = TypeHelper.GetInstance(providerName, assemblies) as INlpPipeline; provider.Configuration = config.GetSection(platform); - provider.Process(agent, data); + provider.ProcessAsync(agent, data); //var corpus = agent.GrabCorpus(dc); @@ -61,7 +61,7 @@ namespace BotSharp.Core.Engines { var pipe = TypeHelper.GetInstance(pipeName, assemblies) as INlpPipeline; pipe.Configuration = provider.Configuration; - pipe.Process(agent, data); + pipe.ProcessAsync(agent, data); }); diff --git a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs index d601eb33..874ead41 100644 --- a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs +++ b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs @@ -8,10 +8,12 @@ using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Text; using System.Text.RegularExpressions; using System.Threading; +using System.Threading.Tasks; namespace BotSharp.Core.Engines.CRFsuite { @@ -19,73 +21,98 @@ namespace BotSharp.Core.Engines.CRFsuite { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { var dc = new DefaultDataContextLoader().GetDefaultDc(); var corpus = agent.Corpus; - - List> tags = data["Tags"].ToObject>>(); + List> tokens = data["Tokens"].ToObject>>(); List> userSays = corpus.UserSays; List> list = new List>(); var dir = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles"); - FileStream fs = new FileStream(Path.Join(dir, "rawTrain.txt"), FileMode.Create); - StreamWriter sw = new StreamWriter(fs); + string rawTrainingDataFileName = Path.Join(dir, $"{agent.Id}.corpus.txt"); + string parsedTrainingDataFileName = Path.Join(dir, $"{agent.Id}.parsed.txt"); + string modelFileName = Path.Join(dir, $"{agent.Id}.model"); + string logFileName = Path.Join(dir, $"{agent.Id}.log.txt"); - for (int i = 0 ; i < tags.Count; i++) + using (FileStream fs = new FileStream(rawTrainingDataFileName, FileMode.Create)) { - List curLine = Merge(tokens[i], tags[i], userSays[i].Entities); - list.Add(curLine); - curLine.ForEach(trainingData =>{ - string[] wordParams = {trainingData.Entity, trainingData.Token, trainingData.Tag, trainingData.Chunk}; - string wordStr = string.Join(" ", wordParams); - sw.Write(wordStr + "\n"); - }); - sw.Write("\n"); - } - sw.Flush(); - sw.Close(); - fs.Close(); - - new MachineLearning.CRFsuite.Ner().NerStart(); - - Runcmd(); + using (StreamWriter sw = new StreamWriter(fs)) + { + for (int i = 0; i < tokens.Count; i++) + { + List curLine = Merge(tokens[i], userSays[i].Entities); + curLine.ForEach(trainingData => + { + string[] wordParams = { trainingData.Entity, trainingData.Token, trainingData.Pos, trainingData.Chunk }; + string wordStr = string.Join(" ", wordParams); + sw.Write(wordStr + "\n"); + }); + list.Add(curLine); + sw.Write("\n"); + } + sw.Flush(); + } + } + + + var uniFeatures = Configuration.GetValue($"CRFsuiteEntityRecognizer:uniFeatures").Split(" "); + var biFeatures = Configuration.GetValue($"CRFsuiteEntityRecognizer:biFeatures").Split(" "); + + new MachineLearning.CRFsuite.Ner() + .NerStart(rawTrainingDataFileName, parsedTrainingDataFileName, uniFeatures, biFeatures); + + var algorithmDir = Path.Join(AppDomain.CurrentDomain.GetData("ContentRootPath").ToString(), "Algorithms"); + + CallCommandLine(Path.Join(algorithmDir, "crfsuite"), $"learn -m {modelFileName} {parsedTrainingDataFileName}"); // --split=3 -x + + Console.WriteLine($"Saved model to {modelFileName}"); return true; } - public void Runcmd () + public void CallCommandLine(string fileName, string arguments) { - var algorithmDir = Path.Join(AppDomain.CurrentDomain.GetData("ContentRootPath").ToString(), "Algorithms"); - var dataDir = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles"); + Console.WriteLine($"{fileName} {arguments}"); - string cmd = $"{algorithmDir}/crfsuite learn -m {dataDir}/crfsuite/bolo.model {dataDir}/crfsuite/1.txt"; - System.Diagnostics.Process p = new System.Diagnostics.Process(); - p.StartInfo.FileName = "sh"; - p.StartInfo.UseShellExecute = false; - p.StartInfo.RedirectStandardInput = true; - p.StartInfo.RedirectStandardOutput = true; - p.StartInfo.RedirectStandardError = true; - p.StartInfo.CreateNoWindow = false; - p.Start(); + ProcessStartInfo procStartInfo = new ProcessStartInfo(fileName); + procStartInfo.Arguments = arguments; + // The following commands are needed to redirect the standard output. + // This means that it will be redirected to the Process.StandardOutput StreamReader. + procStartInfo.RedirectStandardOutput = true; + procStartInfo.UseShellExecute = false; + // Do not create the black window. + procStartInfo.CreateNoWindow = true; + if (procStartInfo.EnvironmentVariables["OS"] == "Windows_NT") + { + procStartInfo.FileName = fileName; + } + else + { + procStartInfo.FileName = "sh"; + } - p.StandardInput.WriteLine(cmd + "&exit"); - p.StandardInput.AutoFlush = false; + Process proc = new Process(); + proc.StartInfo = procStartInfo; + proc.Start(); - string output = p.StandardOutput.ReadToEnd(); - - p.WaitForExit();//等待程序执行完退出进程 - p.Close(); - Console.WriteLine(output); + string output = String.Empty; + while (!proc.HasExited) + { + Thread.Sleep(1); + output = proc.StandardOutput.ReadLine(); + Console.WriteLine(output); + } } - public List Merge(List sentence, List tags, List entities) + + public List Merge(List tokens, List entities) { List trainingTuple = new List(); HashSet entityWordBag = new HashSet(); int wordCandidateCount = 0; - for (int i = 0; i < sentence.Count; i++) + for (int i = 0; i < tokens.Count; i++) { TrainingIntentExpressionPart curEntity = null; if (entities != null) @@ -97,7 +124,7 @@ namespace BotSharp.Core.Engines.CRFsuite string[] words = entity.Value.Split(" "); for (int j = 0; j < words.Length; j++) { - if (sentence[i + j].Text == words[j]) + if (tokens[i + j].Text == words[j]) { wordCandidateCount++; if (j == words.Length - 1) @@ -116,7 +143,7 @@ namespace BotSharp.Core.Engines.CRFsuite String entityName = curEntity.Entity.Contains(":")? curEntity.Entity.Substring(curEntity.Entity.IndexOf(":") + 1): curEntity.Entity; foreach(string s in words) { - trainingTuple.Add(new TrainingData(entityName, s, tags[i], "I")); + trainingTuple.Add(new TrainingData(entityName, s, tokens[i].Pos, "I")); } entityFinded = true; } @@ -125,7 +152,7 @@ namespace BotSharp.Core.Engines.CRFsuite } if (wordCandidateCount == 0) { - trainingTuple.Add(new TrainingData("O", sentence[i].Text, tags[i], "O")); + trainingTuple.Add(new TrainingData("O", tokens[i].Text, tokens[i].Pos, "O")); } else { @@ -141,33 +168,15 @@ namespace BotSharp.Core.Engines.CRFsuite { public String Token { get; set; } public String Entity { get; set; } - public String Tag { get; set; } + public String Pos { get; set; } public String Chunk { get; set; } - public TrainingData(string entity, string token, string tag, string chunk) + public TrainingData(string entity, string token, string pos, string chunk) { this.Token = token; this.Entity = entity; - this.Tag = tag; + this.Pos = pos; this.Chunk = chunk; } } - - - public class Token - { - public String Text { get; set; } - public int Offset { get; set; } - public int End { get; set; } - } - - public class Entity - { - public String EntityName { get; set; } - public String Value { get; set; } - public int Start { get; set; } - public int End { get; set; } - } - - } diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs index 23a596fe..f2dc390c 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs @@ -15,7 +15,7 @@ namespace BotSharp.Core.Engines.SpaCy { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("entitize", Method.GET); diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs index d0338412..4aa38442 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs @@ -17,7 +17,7 @@ namespace BotSharp.Core.Engines.SpaCy List entitiesInTrainingSet = new List(); public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { String modelPath = "./entity_rec_output"; String newModelName = "test"; diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs b/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs index 2d214b92..18ede571 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs @@ -14,7 +14,7 @@ namespace BotSharp.Core.Engines.SpaCy { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("load", Method.GET); diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs b/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs index 46305e6f..307802fb 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs @@ -16,7 +16,7 @@ namespace BotSharp.Core.Engines.SpaCy public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("tagger", Method.GET); diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs index dc95802a..e2e13830 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs @@ -16,7 +16,7 @@ namespace BotSharp.Core.Engines.SpaCy { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { //var input = new List>(); diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs index 8835b7f0..17e2b672 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs @@ -17,25 +17,26 @@ namespace BotSharp.Core.Engines.SpaCy { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); - var request = new RestRequest("tokenize", Method.GET); + var request = new RestRequest("tokenizer", Method.GET); List> tokens = new List>(); Boolean res = true; var dc = new DefaultDataContextLoader().GetDefaultDc(); var corpus = agent.Corpus; corpus.UserSays.ForEach(usersay => { + Console.WriteLine(usersay.Text); request.AddParameter("text", usersay.Text); var response = client.Execute(request); + tokens.Add(response.Data.Tokens); + res = res && response.IsSuccessful; + }); - - - data.Add("Tokens", JToken.FromObject(tokens)); return res; diff --git a/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs b/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs index f456b8a2..cd44837d 100644 --- a/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs @@ -14,7 +14,7 @@ namespace BotSharp.Core.Engines.SpaCy { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public bool ProcessAsync(Agent agent, JObject data) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("featurize", Method.GET); diff --git a/BotSharp.MachineLearning/CRFsuite/Crfutils.cs b/BotSharp.MachineLearning/CRFsuite/Crfutils.cs index c3db9e11..f725ef1d 100644 --- a/BotSharp.MachineLearning/CRFsuite/Crfutils.cs +++ b/BotSharp.MachineLearning/CRFsuite/Crfutils.cs @@ -135,16 +135,19 @@ namespace BotSharp.MachineLearning.CRFsuite /// an extractor which to do the feature extracting work /// attributes name seperated by space /// string whihch seperated by - public void CRFFileGenerator (System.Action>> FeatureExtractor, string fields, string sep= " ") + public void CRFFileGenerator (System.Action>> FeatureExtractor, string fields, string rawFile, string parsedName, string sep= " ") { - String fiPath = "/home/bolo/Desktop/BotSharp/TrainingFiles/rawTrain.txt"; - FileStream fs = new FileStream("/home/bolo/Desktop/BotSharp/TrainingFiles/1.txt", FileMode.Create); + FileStream fs = new FileStream(parsedName, FileMode.Create); StreamWriter sw = new StreamWriter(fs); List F = fields.Split(" ").ToList(); - List>> Xs = Readiter(fiPath, F, " "); + List>> Xs = Readiter(rawFile, F, " "); foreach (List> X in Xs) { + if (X.Any(x => x["w"].ToString() == "")) + { + + } FeatureExtractor(X); OutputFeatures(sw, X, "y"); } diff --git a/BotSharp.MachineLearning/CRFsuite/Ner.cs b/BotSharp.MachineLearning/CRFsuite/Ner.cs index 904fe423..ec4b9222 100644 --- a/BotSharp.MachineLearning/CRFsuite/Ner.cs +++ b/BotSharp.MachineLearning/CRFsuite/Ner.cs @@ -469,15 +469,9 @@ namespace BotSharp.MachineLearning.CRFsuite } } - string[] Uique = new string[]{"w", "wl", "pos", "chk", "shape", "shaped", "type", - "p1", "p2", "p3", "p4","s1", "s2", "s3", "s4", - "2d", "4d", "d&a", "d&-", "d&/", "d&,", "d&.", "up", - "iu", "au", "al", "ad", "ao", "cu", "cl", "ca", "cd", "cs"}; - string[] Bi = new string[]{"w", "pos", "chk", "shaped", "type"}; - - public void InitialTemplate () + public void InitialTemplate (string[] uniFeatures, string[] biFeatures) { - foreach (string name in Uique) + foreach (string name in uniFeatures) { for (int i = -2 ; i < 3; i++) { @@ -487,7 +481,7 @@ namespace BotSharp.MachineLearning.CRFsuite } } - foreach (string name in Bi) + foreach (string name in biFeatures) { for (int i = -2 ; i < 2; i++) { @@ -509,7 +503,6 @@ namespace BotSharp.MachineLearning.CRFsuite // Apply the feature templates. new Crfutils().ApplyTemplates(X, templates); - // Append disjunctive features. for (int t = 0; t < X.Count ; t++) { DisJunctive(X, t, "w", -4, -1); @@ -522,10 +515,10 @@ namespace BotSharp.MachineLearning.CRFsuite } } - public void NerStart () + public void NerStart (string rawFile, string parsedName, string[] uniFeatures, string[] biFeatures) { - InitialTemplate(); - new Crfutils().CRFFileGenerator(FeatureExtractor, fields, separator); + InitialTemplate(uniFeatures, biFeatures); + new Crfutils().CRFFileGenerator(FeatureExtractor, fields, rawFile, parsedName, separator); } diff --git a/BotSharp.MachineLearning/NLP/NlpToken.cs b/BotSharp.MachineLearning/NLP/NlpToken.cs index fdd3613f..e6cb34b8 100644 --- a/BotSharp.MachineLearning/NLP/NlpToken.cs +++ b/BotSharp.MachineLearning/NLP/NlpToken.cs @@ -8,6 +8,9 @@ namespace BotSharp.MachineLearning.NLP { public string Text { get; set; } public int Offset { get; set; } + public string Pos { get; set; } + public string Tag { get; set; } + public string Lemma { get; set; } public int End { get diff --git a/BotSharp.MachineLearning/SpaCy/server.py b/BotSharp.MachineLearning/SpaCy/server.py index 37d47bcf..467b3c0f 100644 --- a/BotSharp.MachineLearning/SpaCy/server.py +++ b/BotSharp.MachineLearning/SpaCy/server.py @@ -1,25 +1,35 @@ from bottle import route, run, request -from spacy.tokenizer import Tokenizer from spacy.pipeline import EntityRecognizer from spacy.pipeline import TextCategorizer +from spacy.gold import GoldParse +#import plac +import random import spacy nlp = spacy.load('en') -tokenizer = Tokenizer(nlp.vocab) ner = EntityRecognizer(nlp.vocab) @route('/load') def load(): pass -@route('/tokenize') +@route('/tokenizer') def tokenize(): - tokens = tokenizer(request.query.text) + doc = nlp(request.query.text) + tokens = [] + for token in doc: + tokens.append({'text': token.text, 'offset': token.idx, 'pos': token.pos_, 'tag': token.tag_, 'lemma': token.lemma_}) + return {'tokens': tokens} + + +@route('/tagger') +def tagger(): + doc = nlp(request.query.text) list = [] - for token in tokens: - print(token) - list.append({'text': token.text, 'offset': token.idx}) - return {'tokens': list} + for token in doc: + list.append(token.tag_) + return {'tags': list} + @route('/featurize') def tokenize(): @@ -46,13 +56,16 @@ def textcategorizer(): texts = request.json["Texts"] golds = request.json["Golds"] labels = request.json["Labels"] - print(labels) + i = 1 train_data = [] for index in range(len(texts)): tuple =(texts[index], golds[index]) train_data.append(tuple) - - print("training data body is: {0}".format(train_data)) + ''' + for tup in train_data: + print("cur tuple {0}, training data body: {1}".format(i, train_data)) + i = i + 1 + ''' textcat = nlp.create_pipe('textcat') nlp.add_pipe(textcat, last=True) for label in labels: @@ -68,8 +81,8 @@ def textcategorizer(): return {'ModelName':'textcat_try'} -@route('/predict') -def predict(): +@route('/textcategorizerpredict') +def textcategorizerpredict(): textcat = TextCategorizer(nlp.vocab) textcat.from_disk('./textcat_try') @@ -78,15 +91,114 @@ def predict(): doc = nlp(request.query.text) #scores = textcat.predict([request.query.text]) - #print(scores) + print(doc.cats) list = [] - for label, confidence in doc.cats: - print(label) - list.append({'Label': label, 'Confidence': confidence}) + for key in doc.cats: + print(key) + list.append({'Label': key, 'Confidence': doc.cats[key]}) print (list) return {'Labels': list} -run(host='0.0.0.0', port=5005, debug=True) +@route('/entityrecognizer', method='POST') +def entityrecognizer(): + model = request.json["ModelPath"] + new_model_name = request.json["NewModelName"] + output_dir = request.json["OutputDir"] + n_iter = request.json["IterTimes"] + raw_data = request.json["TrainingData"] + # generate training_data from raw_data + training_data = [] + for node in raw_data: + labels = [] + for entity in node['Labels']: + label = (entity['Start'], entity['End'], entity['Name']) + labels.append(label) + tup = (node['Text'], labels) + training_data.append(tup) + print(training_data) + + if model is not None: + nlp = spacy.load(model) # load existing spaCy model + print("Loaded model '%s'" % model) + else: + nlp = spacy.blank('en') # create blank Language class + print("Created blank 'en' model") + + # Add entity recognizer to model if it's not in the pipeline + # nlp.create_pipe works for built-ins that are registered with spaCy + if 'ner' not in nlp.pipe_names: + ner = nlp.create_pipe('ner') + nlp.add_pipe(ner) + print("ner created succeed!") + # otherwise, get it, so we can add labels to it + else: + ner = nlp.get_pipe('ner') + print("ner loaded succeed!") + + # check whether there are new labels + entities_in_training_set = request.json["EntitiesInTrainingSet"] + en_labels = ["PERSON","NORP","FAC","ORG","GPE","LOC","PRODUCT",\ + "EVENT","WORK_OF_ART","LAW","LANGUAGE","DATE","TIME","PERCENT",\ + "MONEY","QUANTITY","ORDINAL","CARDINAL"] + + extra_labels = nlp.entity.cfg[u'extra_labels'] \ + if ('extra_labels' in nlp.entity.cfg) else [] + + labels = [] + for entity in entities_in_training_set: + if (entity in en_labels or entity in extra_labels): + continue + labels.append(entity) + + for label in labels: + ner.add_label(label) # add new entity label to entity recognizer + print("label added succeed!") + + if model is None: + optimizer = nlp.begin_training() + else: + # Note that 'begin_training' initializes the models, so it'll zero out + # existing entity types. + optimizer = nlp.entity.create_optimizer() + + # get names of other pipes to disable them during training + other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner'] + with nlp.disable_pipes(*other_pipes): # only train NER + for itn in range(n_iter): + random.shuffle(training_data) + losses = {} + for text, annotations in training_data: + print(text) + print(annotations) + # + doc = nlp.make_doc(text) + gold = GoldParse(doc, entities=annotations) + # + nlp.update([doc], [gold], sgd=optimizer, drop=0.35)#,losses=losses) + #print(losses) + + # save model to output directory + if output_dir is not None: + output_dir = Path(output_dir) + if not output_dir.exists(): + output_dir.mkdir() + nlp.meta['name'] = new_model_name # rename model + nlp.to_disk(output_dir) + print("Saved model to", output_dir) + return True + +@route('/entityrecognizerpredict') +def entityrecognizerpredict(): + + print("Loading from", './entity_rec_output') + nlp2 = spacy.load('./entity_rec_output') + doc2 = nlp2(request.query.text) + for ent in doc2.ents: + print(ent.label_, ent.text) + + + +run(host='0.0.0.0', port=5005, debug=True) \ No newline at end of file diff --git a/BotSharp.WebHost/Algorithms/crfsuite.exe b/BotSharp.WebHost/Algorithms/crfsuite.exe new file mode 100644 index 0000000000000000000000000000000000000000..0a3843bda9ff1d31d9bfa7c39f33063bb1d43bb0 GIT binary patch literal 215040 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 i0`45#dAN&kvv5_Q+dJU4z}*427w$0J zAHh8g_bA*cxF5p3i29y}`wrYU;r;^dVYnl3pM?7m+`Vvj!KL7CgY(06z-@wSgsX#7 z;NApxHQXi8?>V@ip*_EepFe2Va}M=BunWB9hB?t|9CauN$V>cRp@vU9AroADA7a{nN6T9)+a5OP8O#4;hUc>;` zXu?2YcyAcn$8jwzKJUTvgn^KFhle)E6G0*V2gP7Z?`02dZc|K68M1Kj{hn};_6vmg zuqPaj>FJ0Nf8q(_96(%rXkHy@qmJv!aEJm=T2*@jS|SSTR~gYY02+00h^X1gA);_E zh48v7#CcFzaF58843Cb{-s?^4L=UBg=|+h6lnxuQ+bA|31fc)r3F8fRd&HMKVNC@s zs;Ew!s@vyL_b0`cvheK1@;v2{!ukF%tZK{ zeQywB%7gO+*!mUXPd(v%^e7m1#ANNs@!>Rf1cuvETKmYTe2syqcHd(o=3f@!@MmNg zuSURu1+a)Jenv6cFn0BsnZzNYq^e=3i{9oNL486zE6{cEaC8)Vs>67x5?-%3j8{nP z72=a6;68J^+e}j9d!u-IiJlw7&KBqg_(rZmSw1ac&?5@skL>WUD)xeI^m^NCN`NW? zzmT|w>B(M!eVyUqT5#sO6Hp{G>Qx(6I7{t|m!;C~)*2-gxaO$Goz*t3R2p@+78ihYh zRCSF3gFlh@&#pe9G4v@HRdEW1P~#WR2=Sbw6-J7=D=aFAPHGSbZiiikvS-3 ziFr4ScOwM%NaBd|++K)~SU5=-hs&r#_(3J{Wa;p}vA`ZR35KAw7jVyS95f={U$!rp zHd?KtCVJ~yh^4_@rCn(@Esv@xKQ^X`C2sfh1)^!}0+M{%a3Eo&i_e!0#-&UPSr8z>fUFQ|S-+|+m|VRGBCk!ysk*oZ12~=d5{JtM z%vPFF;t+5)ZW5^uc|_O5y~D%Xm^he>6CeC$lQtZcqRQViA9`0vywwpqz&wXY@dCy6 zkAoA(=+HuInnW;##2uww)^O_Y2CsIKd_2qf=~Z5OvJ1j~NN5xz#kVP<#ZHRr#s)Ya z4-ulZ6or$mEIWN1?qJz^jPe-`q#Qz=D%&0f>_ChgC&d3Op`3=87Z02Hjk5)ieZIb4 zUw2a@ck!=#3M|6=PfUU3RW1LCTUTt_tD``PSb+j?2i@gL*banuea(ws;(=y{%*jKg z;y}?LFVjbOvH$=8 literal 0 HcmV?d00001 diff --git a/BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Airport/agent.json b/BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Chatbot/agent.json similarity index 100% rename from BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Airport/agent.json rename to BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Chatbot/agent.json diff --git a/BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Airport/corpus.json b/BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Chatbot/corpus.json similarity index 94% rename from BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Airport/corpus.json rename to BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Chatbot/corpus.json index 5f605388..6475d44c 100644 --- a/BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Airport/corpus.json +++ b/BotSharp.WebHost/App_Data/DbInitializer/Agents/Sebis/Chatbot/corpus.json @@ -1,4243 +1,4201 @@ -{ - "name": "ChatbotCorpus", - "desc": "Visit https://github.com/sebischair/NLU-Evaluation-Corpora for more information", - "lang": "en", - "sentences": [ - { - "text": "i want to go marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "marienplatz" - } - ] - }, - { - "text": "when is the next train in muncher freiheit?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "muncher freiheit" - } - ] - }, - { - "text": "when does the next u-bahn leaves from garching forschungszentrum?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "u-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 10, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "from olympia einkaufszentrum to hauptbahnhof", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 2, - "text": "olympia einkaufszentrum" - }, - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "when is the next train from winterstraße 12 to kieferngarten", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "winterstraße 12" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "kieferngarten" - } - ] - }, - { - "text": "when is the next rocket from winterstraße 12 to kieferngarte", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "rocket" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "winterstraße 12" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "kieferngarte" - } - ] - }, - { - "text": "can you find a connection from garching to hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "how to get from untere strassäcker 21 to fröttmaning", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 6, - "text": "untere strassäcker 21" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "fröttmaning" - } - ] - }, - { - "text": "how i can get from marienplatz to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "connection from boltzmannstraße to kieferngarten", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 2, - "stop": 2, - "text": "boltzmannstraße" - }, - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "kieferngarten" - } - ] - }, - { - "text": "how to get from bonner platz to freimann?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 5, - "text": "bonner platz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "freimann" - } - ] - }, - { - "text": "when is the next s-bahn leaving at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "s-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 9, - "text": "garching" - } - ] - }, - { - "text": "how do i get from oez to hbf?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "oez" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "hbf" - } - ] - }, - { - "text": "how to get from winterstrasse 12 to fröttmaning", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 5, - "text": "winterstrasse 12" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "fröttmaning" - } - ] - }, - { - "text": "how do i get from garching forschungszentrum to pasing", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "pasing" - } - ] - }, - { - "text": "theresienstraße to assling", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 0, - "stop": 0, - "text": "theresienstraße" - }, - { - "entity": "StationDest", - "start": 2, - "stop": 2, - "text": "assling" - } - ] - }, - { - "text": "how can i get from theresienstraße to munich east?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "theresienstraße" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "munich east" - } - ] - }, - { - "text": "when does the next bus starts from garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "from quiddestraße to garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "can you find a connection from kurt-eisner-straße to garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 6, - "stop": 8, - "text": "kurt-eisner-straße" - }, - { - "entity": "StationDest", - "start": 10, - "stop": 11, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "can you find a connection from quiddestraße to garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 9, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "when does the next train leaves at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "from hauptbahnhof to garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "how can i get to glockenbachviertel from garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "glockenbachviertel" - } - ] - }, - { - "text": "how i can get from garching to nordfriedhof", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "nordfriedhof" - } - ] - }, - { - "text": "how can i get to glockenbachviertel from garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "glockenbachviertel" - } - ] - }, - { - "text": "when is the next train leaving in garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how can i get from moosach to quiddestraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "moosach" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "quiddestraße" - } - ] - }, - { - "text": "how can i get from moosach to poccistraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "moosach" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "poccistraße" - } - ] - }, - { - "text": "how can i get from kurt-eisner-straße to garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "kurt-eisner-straße" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how can i get from moosach to quiddestraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "moosach" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "quiddestraße" - } - ] - }, - { - "text": "how can i get from moosach to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "moosach" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "when does the next bus starts at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "what's the shortest way from quiddestraße to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 4, - "stop": 4, - "text": "shortest" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "odeonsplatz" - } - ] - }, - { - "text": "when is the next bus from ostbahnhof", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "ostbahnhof" - } - ] - }, - { - "text": "how i can get from garching to neuperlach sued", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "neuperlach sued" - } - ] - }, - { - "text": "when is the next train in munchner freiheit?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "munchner freiheit" - } - ] - }, - { - "text": "how i can get from marienplatz to garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "how do i get from poccistraße to laim", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "poccistraße" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "laim" - } - ] - }, - { - "text": "i want to go garching from marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "garching" - } - ] - }, - { - "text": "how i can get from marienplatz to garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "how can i get from hauptbahnhof to odeonsplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "prinzregentenplatz to rotkreuzplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 0, - "stop": 0, - "text": "prinzregentenplatz" - }, - { - "entity": "StationDest", - "start": 2, - "stop": 2, - "text": "rotkreuzplatz" - } - ] - }, - { - "text": "i want to go to garching from marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "garching" - } - ] - }, - { - "text": "next train from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "train" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "from prinzregentenplatz to rotkreuzplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "prinzregentenplatz" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "rotkreuzplatz" - } - ] - }, - { - "text": "when is the next subway from garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "subway" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "from garching to klinikum", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "klinikum" - } - ] - }, - { - "text": "from garching foschungszentrum to odeonsplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 2, - "text": "garching foschungszentrum" - }, - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "odeonsplatz" - } - ] - }, - { - "text": "next bus in garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "when does the train leaving in garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "next subway from garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "subway" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 4, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "tell me the next bus from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "next bus from garching, please.", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "next bus from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "next bus from central station", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 4, - "text": "central station" - } - ] - }, - { - "text": "from garching to marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "marienplatz" - } - ] - }, - { - "text": "next bus from garching.", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "connection from garching to hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 2, - "stop": 2, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "when does the next bus departs from garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "find connection from hauptbahnhof to odeonsplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "odeonsplatz" - } - ] - }, - { - "text": "when does the next u-bahn departs at garching forschungszentrum?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "u-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 10, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "when does the next u-bahn departs at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "u-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 9, - "text": "garching" - } - ] - }, - { - "text": "when does the next subway departs at garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "subway" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when is the next train in garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "how to get from münchner freiheit to garching ?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 5, - "text": "münchner freiheit" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "implerstraße to ostbahnhof", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 0, - "stop": 0, - "text": "implerstraße" - }, - { - "entity": "StationDest", - "start": 2, - "stop": 2, - "text": "ostbahnhof" - } - ] - }, - { - "text": "how can i get from hauptbahnhof to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how can i go from garching forschungszentrum to prinzregentenplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "prinzregentenplatz" - } - ] - }, - { - "text": "how can i get from mangfallplatz to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "mangfallplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "how can i get to hohenlindenerstraße", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "hohenlindenerstraße" - } - ] - }, - { - "text": "harthaus to hackerbrücke", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 0, - "stop": 0, - "text": "harthaus" - }, - { - "entity": "StationDest", - "start": 2, - "stop": 2, - "text": "hackerbrücke" - } - ] - }, - { - "text": "how can i get from feldmoching to garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "feldmoching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "from marienplatz to petershausen", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "petershausen" - } - ] - }, - { - "text": "when is the train from garching to marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "marienplatz" - } - ] - }, - { - "text": "neufahrn to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 0, - "stop": 0, - "text": "neufahrn" - }, - { - "entity": "StationDest", - "start": 2, - "stop": 2, - "text": "garching" - } - ] - }, - { - "text": "how can i get from mangfallplatz to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "mangfallplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "how can i get to hohenlindenerstr", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "hohenlindenerstr" - } - ] - }, - { - "text": "when is the next bus from garching forschungzentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "garching forschungzentrum" - } - ] - }, - { - "text": "how do i get from spitzingplatz to poccistraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "spitzingplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "poccistraße" - } - ] - }, - { - "text": "how can i get from garching forschungszentrum to marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "marienplatz" - } - ] - }, - { - "text": "how can i get from klinkum to marienplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "klinkum" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "marienplatz" - } - ] - }, - { - "text": "how to get from alte heide to marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 5, - "text": "alte heide" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "marienplatz" - } - ] - }, - { - "text": "next train from muenchen freicheit", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "train" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 4, - "text": "muenchen freicheit" - } - ] - }, - { - "text": "depart in garching, i assume", - "intent": "DepartureTime", - "entities": [ - { - "entity": "StationStart", - "start": 2, - "stop": 2, - "text": "garching" - } - ] - }, - { - "text": "when does the next u-bahn depart at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "u-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 9, - "text": "garching" - } - ] - }, - { - "text": "the next bus from garching forschungzentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 2, - "stop": 2, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 1, - "stop": 1, - "text": "next" - }, - { - "entity": "StationStart", - "start": 4, - "stop": 5, - "text": "garching forschungzentrum" - } - ] - }, - { - "text": "when is the next train in alte heide?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "alte heide" - } - ] - }, - { - "text": "or depart from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "garching" - } - ] - }, - { - "text": "hello munich city bot! how do i get from münchner freiheit to scheidplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 10, - "stop": 11, - "text": "münchner freiheit" - }, - { - "entity": "StationDest", - "start": 13, - "stop": 13, - "text": "scheidplatz" - } - ] - }, - { - "text": "how can i get from garching forschungszentrum to prinzregentenplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "prinzregentenplatz" - } - ] - }, - { - "text": "how can i get from neufahrn to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "neufahrn" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "take me to the airport", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "airport" - } - ] - }, - { - "text": "when does the next u6 leave from garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Line", - "start": 4, - "stop": 4, - "text": "u6" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how i can get from munchner freiheit to nordfriedhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "munchner freiheit" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "nordfriedhof" - } - ] - }, - { - "text": "from harthaus to hackerbrücke", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "harthaus" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "hackerbrücke" - } - ] - }, - { - "text": "when is the train from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - } - ] - }, - { - "text": "what is the next train from münchner freiheit", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "münchner freiheit" - } - ] - }, - { - "text": "how can i get from theresienstrasse to garching forschungszentrum", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "theresienstrasse" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how can i get from münchner freiheit to odeonsplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "münchner freiheit" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "odeonsplatz" - } - ] - }, - { - "text": "from garching to hauptbahnhof", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "how can i get from garching to odeonsplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "start: neufahrn end:garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 2, - "stop": 2, - "text": "neufahrn" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "garching" - } - ] - }, - { - "text": "how can i get from studentenstadt to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "studentenstadt" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when is the next bus from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "take me from hauptbahnhof to odeonsplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "odeonsplatz" - } - ] - }, - { - "text": "what's the shortest connection between quiddestraße and odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 4, - "stop": 4, - "text": "shortest" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "odeonsplatz" - } - ] - }, - { - "text": "what is the cheapest connection between quiddestraße and hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "cheapest" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "what's the shortest way between hauptbahnhof and odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 4, - "stop": 4, - "text": "shortest" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how can i get from garching to münchner freiheit as fast as possible?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 10, - "stop": 10, - "text": "fast" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "münchner freiheit" - } - ] - }, - { - "text": "what's the cheapest way from neuperlach süd to lehel?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 4, - "stop": 4, - "text": "cheapest" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "neuperlach süd" - }, - { - "entity": "StationDest", - "start": 10, - "stop": 10, - "text": "lehel" - } - ] - }, - { - "text": "how can i get from neuperlach zentrum to karlsplatz as fast as possible?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 10, - "stop": 10, - "text": "fast" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "neuperlach zentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "karlsplatz" - } - ] - }, - { - "text": "could you give me the fastest connection between brudermühlstraße and alte heide?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 5, - "stop": 5, - "text": "fastest" - }, - { - "entity": "StationStart", - "start": 8, - "stop": 8, - "text": "brudermühlstraße" - }, - { - "entity": "StationDest", - "start": 10, - "stop": 11, - "text": "alte heide" - } - ] - }, - { - "text": "is there a train from neuperlach zentrum to garching at 3 pm?", - "intent": "FindConnection", - "entities": [ - { - "entity": "TimeStartTime", - "start": 10, - "stop": 11, - "text": "3 pm" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "neuperlach zentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "garching" - } - ] - }, - { - "text": "can you find a connection from olympiazentrum to lehel at 2 pm?", - "intent": "FindConnection", - "entities": [ - { - "entity": "TimeStartTime", - "start": 10, - "stop": 11, - "text": "2 pm" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "olympiazentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "lehel" - } - ] - }, - { - "text": "i need a connection from harras to karl-preis-platz at 8 am.", - "intent": "FindConnection", - "entities": [ - { - "entity": "TimeStartTime", - "start": 13, - "stop": 14, - "text": "8 am" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "harras" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 11, - "text": "karl-preis-platz" - } - ] - }, - { - "text": "in need to be at hauptbahnhof at 1 pm, can you search a connection from garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "TimeEndTime", - "start": 7, - "stop": 8, - "text": "1 pm" - }, - { - "entity": "StationStart", - "start": 16, - "stop": 17, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "i need to be in garching at 9", - "intent": "FindConnection", - "entities": [ - { - "entity": "TimeEndTime", - "start": 7, - "stop": 7, - "text": "9" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "garching" - } - ] - }, - { - "text": "can i take a bus from quiddestraße to hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "can you find the shortest way from moosfeld to milbertshofen?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 4, - "stop": 4, - "text": "shortest" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "moosfeld" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "milbertshofen" - } - ] - }, - { - "text": "how can i get to neuperlach süd from garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 8, - "stop": 9, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 6, - "text": "neuperlach süd" - } - ] - }, - { - "text": "can you find a bus from quiddestraße to lehel?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "lehel" - } - ] - }, - { - "text": "is there a tram from karlsplatz to lehel?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "tram" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "karlsplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "lehel" - } - ] - }, - { - "text": "is there a bus from garching to moosach at around 5?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "bus" - }, - { - "entity": "TimeStartTime", - "start": 10, - "stop": 10, - "text": "5" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "moosach" - } - ] - }, - { - "text": "is there a bus from odeonsplatz to hauptbahnhof at 3 pm?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "bus" - }, - { - "entity": "TimeStartTime", - "start": 9, - "stop": 10, - "text": "3 pm" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "odeonsplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "can you tell me the cheapest way from garching forschungszentrum to quiddestraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 5, - "stop": 5, - "text": "cheapest" - }, - { - "entity": "StationStart", - "start": 8, - "stop": 9, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 11, - "stop": 11, - "text": "quiddestraße" - } - ] - }, - { - "text": "how can i get to quiddestraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "quiddestraße" - } - ] - }, - { - "text": "when does the next bus leaves from hauptbahnhof?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "how can i get from garching to hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "how can i get from kurt-eisner-straße to garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 9, - "text": "kurt-eisner-straße" - }, - { - "entity": "StationDest", - "start": 11, - "stop": 11, - "text": "garching" - } - ] - }, - { - "text": "when the next train in garching,forschungszentrum is leaving?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "Criterion", - "start": 2, - "stop": 2, - "text": "next" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 7, - "text": "garching,forschungszentrum" - } - ] - }, - { - "text": "what is the next connection from garching forschungszentrum to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how can i get from mossach to garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "mossach" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how can i get from garching forschungszentrum to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how can i get from garching, forschungszentrum to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 7, - "text": "garching, forschungszentrum" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how can i get from garching forschungszentrum to kurt-eisner-straße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 12, - "text": "kurt-eisner-straße" - } - ] - }, - { - "text": "how can i get to boltzmannstraße from quiddestraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "boltzmannstraße" - } - ] - }, - { - "text": "when does the next train departs from quiddestraße?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "quiddestraße" - } - ] - }, - { - "text": "when the next train in garching forschungszentrum is leaving?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "Criterion", - "start": 2, - "stop": 2, - "text": "next" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "when is the next u6 leaving from garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Line", - "start": 4, - "stop": 4, - "text": "u6" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when does the next train leave from garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "when is the next u6?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Line", - "start": 4, - "stop": 4, - "text": "u6" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - } - ] - }, - { - "text": "when is the next subway leaving from garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "subway" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when the next train in garching is leaving?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "Criterion", - "start": 2, - "stop": 2, - "text": "next" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - } - ] - }, - { - "text": "when is the next train leaving in garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when does the next train leaves from odeonsplatz?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "when does the next train leaves from quiddestraße?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "quiddestraße" - } - ] - }, - { - "text": "when is the next train", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - } - ] - }, - { - "text": "when does the next bus leaves at garching forschungszentrum?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "when does the next train leaves?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - } - ] - }, - { - "text": "when does the next bus leave in garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when does the next s-bahn leaves from hauptbahnhof?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "s-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 9, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "when does the next subway departes from odeonsplatz?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "subway" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "show me the next bus from garching!", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "when does the next tram starts from hauptbahnhof?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "tram" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "when will the next u-bahn depart from garching forschungszentrum?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 6, - "text": "u-bahn" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 9, - "stop": 10, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "show me the next bus from michaelibad.", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "michaelibad" - } - ] - }, - { - "text": "when does the next train starts at sendlinger tor?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "sendlinger tor" - } - ] - }, - { - "text": "hey bot, when does the next bus starts at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 7, - "stop": 7, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 6, - "stop": 6, - "text": "next" - }, - { - "entity": "StationStart", - "start": 10, - "stop": 10, - "text": "garching" - } - ] - }, - { - "text": "when does the next bus leaves at garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when is the bus from quiddestraße?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "bus" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "quiddestraße" - } - ] - }, - { - "text": "when can i get a bus at mariahilfplatz?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 5, - "stop": 5, - "text": "bus" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "mariahilfplatz" - } - ] - }, - { - "text": "when does the next bus leaves at romanplatz?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "romanplatz" - } - ] - }, - { - "text": "when does the bus to röblingweg starts?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "bus" - }, - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "röblingweg" - } - ] - }, - { - "text": "next bus from quiddestraße?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 1, - "stop": 1, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 0, - "stop": 0, - "text": "next" - }, - { - "entity": "StationStart", - "start": 3, - "stop": 3, - "text": "quiddestraße" - } - ] - }, - { - "text": "when is the next bus leaving from garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "when is the train leaving in garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "when is the train leaving in garching?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 3, - "stop": 3, - "text": "train" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "how can i get from garching to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "when is adrians next subway leaving at garching forschungszentrum?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "subway" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how can i get from olympiazentrum to hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "olympiazentrum" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "how can i get from quiddestraße to boltzmannstraße?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "quiddestraße" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "boltzmannstraße" - } - ] - }, - { - "text": "how can i get from moosach to garching forschungszentrum?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "moosach" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "can you give me a connection from garching to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 9, - "stop": 9, - "text": "odeonsplatz" - } - ] - }, - { - "text": "when is the next train from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "when comes the next train", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - } - ] - }, - { - "text": "when is the next train in nordfriedhof", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "nordfriedhof" - } - ] - }, - { - "text": "when does the next train come at garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "when is the next train from nordfriedhof to garching forschungszentrum", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "nordfriedhof" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 9, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "i want to travel from garching to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how can i get to sendlinger tor?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 5, - "stop": 6, - "text": "sendlinger tor" - } - ] - }, - { - "text": "how do i get to untere straussäcker?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationDest", - "start": 5, - "stop": 6, - "text": "untere straussäcker" - } - ] - }, - { - "text": "how can i get from garching to garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "how can i get from garching to sendlinger tor?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 8, - "text": "sendlinger tor" - } - ] - }, - { - "text": "how can i get from garchingto garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garchingto" - }, - { - "entity": "StationDest", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "when is the next train from garching", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "how do i get from marienplatz zu garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "marienplatz" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "garching" - } - ] - }, - { - "text": "how can i get to milbertshofen from garching?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 7, - "stop": 7, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 5, - "stop": 5, - "text": "milbertshofen" - } - ] - }, - { - "text": "when is the next train to garching", - "intent": "FindConnection", - "entities": [ - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "StationDest", - "start": 6, - "stop": 6, - "text": "garching" - } - ] - }, - { - "text": "how can i get from garching to milbertshofen?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "milbertshofen" - } - ] - }, - { - "text": "when does the next rocket leaves from garching forschungszentrum?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "rocket" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 8, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "connection from untere straßäcker 21 to kieferngarten", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 2, - "stop": 4, - "text": "untere straßäcker 21" - }, - { - "entity": "StationDest", - "start": 6, - "stop": 6, - "text": "kieferngarten" - } - ] - }, - { - "text": "how to get from untere strassäcker 21 to frötmaning", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 6, - "text": "untere strassäcker 21" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "frötmaning" - } - ] - }, - { - "text": "how to get from untere strassaecker 21 to frötmaning", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 6, - "text": "untere strassaecker 21" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "frötmaning" - } - ] - }, - { - "text": "when is the next train from untere straßaecker 21 to kieferngarten", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 8, - "text": "untere straßaecker 21" - }, - { - "entity": "StationDest", - "start": 10, - "stop": 10, - "text": "kieferngarten" - } - ] - }, - { - "text": "when is the next train from untere straßaecker 21, garching to kieferngarten", - "intent": "FindConnection", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 7, - "stop": 10, - "text": "straßaecker 21, garching" - }, - { - "entity": "StationDest", - "start": 12, - "stop": 12, - "text": "kieferngarten" - } - ] - }, - { - "text": "from garching to perlach", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "perlach" - } - ] - }, - { - "text": "how to get from garching to perlach?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 4, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 6, - "stop": 6, - "text": "perlach" - } - ] - }, - { - "text": "how to get from bonnerplatz to freimann", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 4, - "stop": 4, - "text": "bonnerplatz" - }, - { - "entity": "StationDest", - "start": 6, - "stop": 6, - "text": "freimann" - } - ] - }, - { - "text": "when is the next train in nordfriedhof?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 6, - "text": "nordfriedhof" - } - ] - }, - { - "text": "when is the next train in münchner freiheit?", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "train" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "münchner freiheit" - } - ] - }, - { - "text": "connection from hauptbahnhof to odeonsplatz?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 2, - "stop": 2, - "text": "hauptbahnhof" - }, - { - "entity": "StationDest", - "start": 4, - "stop": 4, - "text": "odeonsplatz" - } - ] - }, - { - "text": "how do i get from olympia einkaufszentrum to hauptbahnhof?", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 6, - "text": "olympia einkaufszentrum" - }, - { - "entity": "StationDest", - "start": 8, - "stop": 8, - "text": "hauptbahnhof" - } - ] - }, - { - "text": "when is the next bus in garching forschungszentrum", - "intent": "DepartureTime", - "entities": [ - { - "entity": "Vehicle", - "start": 4, - "stop": 4, - "text": "bus" - }, - { - "entity": "Criterion", - "start": 3, - "stop": 3, - "text": "next" - }, - { - "entity": "StationStart", - "start": 6, - "stop": 7, - "text": "garching forschungszentrum" - } - ] - }, - { - "text": "how can i get from garching to marienplatz", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 5, - "stop": 5, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 7, - "stop": 7, - "text": "marienplatz" - } - ] - }, - { - "text": "from garching to studentenstadt", - "intent": "FindConnection", - "entities": [ - { - "entity": "StationStart", - "start": 1, - "stop": 1, - "text": "garching" - }, - { - "entity": "StationDest", - "start": 3, - "stop": 3, - "text": "studentenstadt" - } - ] - } - ] -} +{ + "name": "ChatbotCorpus", + "desc": "Visit https://github.com/sebischair/NLU-Evaluation-Corpora for more information", + "lang": "en", + "sentences": [ + { + "text": "i want to go marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "marienplatz" + } + ] + }, + { + "text": "when is the next train in muncher freiheit?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "muncher freiheit" + } + ] + }, + { + "text": "when does the next u-bahn leaves from garching forschungszentrum?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "u-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 10, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "from olympia einkaufszentrum to hauptbahnhof", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 2, + "text": "olympia einkaufszentrum" + }, + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "when is the next train from winterstraße 12 to kieferngarten", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "winterstraße 12" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "kieferngarten" + } + ] + }, + { + "text": "when is the next rocket from winterstraße 12 to kieferngarte", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "rocket" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "winterstraße 12" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "kieferngarte" + } + ] + }, + { + "text": "can you find a connection from garching to hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "how to get from untere strassäcker 21 to fröttmaning", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 6, + "text": "untere strassäcker 21" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "fröttmaning" + } + ] + }, + { + "text": "how i can get from marienplatz to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "connection from boltzmannstraße to kieferngarten", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 2, + "stop": 2, + "text": "boltzmannstraße" + }, + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "kieferngarten" + } + ] + }, + { + "text": "how to get from bonner platz to freimann?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 5, + "text": "bonner platz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "freimann" + } + ] + }, + { + "text": "when is the next s-bahn leaving at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "s-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 9, + "text": "garching" + } + ] + }, + { + "text": "how do i get from oez to hbf?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "oez" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "hbf" + } + ] + }, + { + "text": "how to get from winterstrasse 12 to fröttmaning", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 5, + "text": "winterstrasse 12" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "fröttmaning" + } + ] + }, + { + "text": "how do i get from garching forschungszentrum to pasing", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "pasing" + } + ] + }, + { + "text": "theresienstraße to assling", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 0, + "stop": 0, + "text": "theresienstraße" + }, + { + "entity": "StationDest", + "start": 2, + "stop": 2, + "text": "assling" + } + ] + }, + { + "text": "how can i get from theresienstraße to munich east?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "theresienstraße" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "munich east" + } + ] + }, + { + "text": "when does the next bus starts from garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "from quiddestraße to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "can you find a connection from kurt-eisner-straße to garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 6, + "stop": 8, + "text": "kurt-eisner-straße" + }, + { + "entity": "StationDest", + "start": 10, + "stop": 11, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "can you find a connection from quiddestraße to garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 9, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "when does the next train leaves at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "from hauptbahnhof to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "how can i get to glockenbachviertel from garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "glockenbachviertel" + } + ] + }, + { + "text": "how i can get from garching to nordfriedhof", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "nordfriedhof" + } + ] + }, + { + "text": "how can i get to glockenbachviertel from garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "glockenbachviertel" + } + ] + }, + { + "text": "when is the next train leaving in garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how can i get from moosach to quiddestraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "moosach" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "quiddestraße" + } + ] + }, + { + "text": "how can i get from moosach to poccistraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "moosach" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "poccistraße" + } + ] + }, + { + "text": "how can i get from kurt-eisner-straße to garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "kurt-eisner-straße" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how can i get from moosach to quiddestraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "moosach" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "quiddestraße" + } + ] + }, + { + "text": "how can i get from moosach to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "moosach" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "when does the next bus starts at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "what's the shortest way from quiddestraße to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 4, + "stop": 4, + "text": "shortest" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "odeonsplatz" + } + ] + }, + { + "text": "when is the next bus from ostbahnhof", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "ostbahnhof" + } + ] + }, + { + "text": "how i can get from garching to neuperlach sued", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "neuperlach sued" + } + ] + }, + { + "text": "when is the next train in munchner freiheit?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "munchner freiheit" + } + ] + }, + { + "text": "how i can get from marienplatz to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "how do i get from poccistraße to laim", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "poccistraße" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "laim" + } + ] + }, + { + "text": "i want to go garching from marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "garching" + } + ] + }, + { + "text": "how i can get from marienplatz to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "how can i get from hauptbahnhof to odeonsplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "prinzregentenplatz to rotkreuzplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 0, + "stop": 0, + "text": "prinzregentenplatz" + }, + { + "entity": "StationDest", + "start": 2, + "stop": 2, + "text": "rotkreuzplatz" + } + ] + }, + { + "text": "i want to go to garching from marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "garching" + } + ] + }, + { + "text": "next train from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "train" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "from prinzregentenplatz to rotkreuzplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "prinzregentenplatz" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "rotkreuzplatz" + } + ] + }, + { + "text": "when is the next subway from garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "subway" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "from garching to klinikum", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "klinikum" + } + ] + }, + { + "text": "from garching foschungszentrum to odeonsplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 2, + "text": "garching foschungszentrum" + }, + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "odeonsplatz" + } + ] + }, + { + "text": "next bus in garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "when does the train leaving in garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "next subway from garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "subway" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 4, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "tell me the next bus from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "next bus from garching, please.", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "next bus from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "next bus from central station", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 4, + "text": "central station" + } + ] + }, + { + "text": "from garching to marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "marienplatz" + } + ] + }, + { + "text": "next bus from garching.", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "connection from garching to hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 2, + "stop": 2, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "when does the next bus departs from garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "find connection from hauptbahnhof to odeonsplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "odeonsplatz" + } + ] + }, + { + "text": "when does the next u-bahn departs at garching forschungszentrum?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "u-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 10, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "when does the next u-bahn departs at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "u-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 9, + "text": "garching" + } + ] + }, + { + "text": "when does the next subway departs at garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "subway" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when is the next train in garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "how to get from münchner freiheit to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 5, + "text": "münchner freiheit" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "implerstraße to ostbahnhof", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 0, + "stop": 0, + "text": "implerstraße" + }, + { + "entity": "StationDest", + "start": 2, + "stop": 2, + "text": "ostbahnhof" + } + ] + }, + { + "text": "how can i get from hauptbahnhof to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how can i go from garching forschungszentrum to prinzregentenplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "prinzregentenplatz" + } + ] + }, + { + "text": "how can i get from mangfallplatz to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "mangfallplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "how can i get to hohenlindenerstraße", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "hohenlindenerstraße" + } + ] + }, + { + "text": "harthaus to hackerbrücke", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 0, + "stop": 0, + "text": "harthaus" + }, + { + "entity": "StationDest", + "start": 2, + "stop": 2, + "text": "hackerbrücke" + } + ] + }, + { + "text": "how can i get from feldmoching to garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "feldmoching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "from marienplatz to petershausen", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "petershausen" + } + ] + }, + { + "text": "when is the train from garching to marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "marienplatz" + } + ] + }, + { + "text": "neufahrn to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 0, + "stop": 0, + "text": "neufahrn" + }, + { + "entity": "StationDest", + "start": 2, + "stop": 2, + "text": "garching" + } + ] + }, + { + "text": "how can i get from mangfallplatz to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "mangfallplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "how can i get to hohenlindenerstr", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "hohenlindenerstr" + } + ] + }, + { + "text": "when is the next bus from garching forschungzentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "garching forschungzentrum" + } + ] + }, + { + "text": "how do i get from spitzingplatz to poccistraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "spitzingplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "poccistraße" + } + ] + }, + { + "text": "how can i get from garching forschungszentrum to marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "marienplatz" + } + ] + }, + { + "text": "how can i get from klinkum to marienplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "klinkum" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "marienplatz" + } + ] + }, + { + "text": "how to get from alte heide to marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 5, + "text": "alte heide" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "marienplatz" + } + ] + }, + { + "text": "next train from muenchen freicheit", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "train" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 4, + "text": "muenchen freicheit" + } + ] + }, + { + "text": "depart in garching, i assume", + "intent": "DepartureTime", + "entities": [ + { + "entity": "StationStart", + "start": 2, + "stop": 2, + "text": "garching" + } + ] + }, + { + "text": "when does the next u-bahn depart at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "u-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 9, + "text": "garching" + } + ] + }, + { + "text": "the next bus from garching forschungzentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 2, + "stop": 2, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 1, + "stop": 1, + "text": "next" + }, + { + "entity": "StationStart", + "start": 4, + "stop": 5, + "text": "garching forschungzentrum" + } + ] + }, + { + "text": "when is the next train in alte heide?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "alte heide" + } + ] + }, + { + "text": "or depart from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "garching" + } + ] + }, + { + "text": "hello munich city bot! how do i get from münchner freiheit to scheidplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 10, + "stop": 11, + "text": "münchner freiheit" + }, + { + "entity": "StationDest", + "start": 13, + "stop": 13, + "text": "scheidplatz" + } + ] + }, + { + "text": "how can i get from garching forschungszentrum to prinzregentenplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "prinzregentenplatz" + } + ] + }, + { + "text": "how can i get from neufahrn to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "neufahrn" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "take me to the airport", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "airport" + } + ] + }, + { + "text": "when does the next u6 leave from garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Line", + "start": 4, + "stop": 4, + "text": "u6" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how i can get from munchner freiheit to nordfriedhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "munchner freiheit" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "nordfriedhof" + } + ] + }, + { + "text": "from harthaus to hackerbrücke", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "harthaus" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "hackerbrücke" + } + ] + }, + { + "text": "when is the train from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + } + ] + }, + { + "text": "what is the next train from münchner freiheit", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "münchner freiheit" + } + ] + }, + { + "text": "how can i get from theresienstrasse to garching forschungszentrum", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "theresienstrasse" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how can i get from münchner freiheit to odeonsplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "münchner freiheit" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "odeonsplatz" + } + ] + }, + { + "text": "from garching to hauptbahnhof", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "how can i get from garching to odeonsplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "start: neufahrn end:garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 2, + "stop": 2, + "text": "neufahrn" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "garching" + } + ] + }, + { + "text": "how can i get from studentenstadt to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "studentenstadt" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when is the next bus from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "take me from hauptbahnhof to odeonsplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "odeonsplatz" + } + ] + }, + { + "text": "what's the shortest connection between quiddestraße and odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 4, + "stop": 4, + "text": "shortest" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "odeonsplatz" + } + ] + }, + { + "text": "what is the cheapest connection between quiddestraße and hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "cheapest" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "what's the shortest way between hauptbahnhof and odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 4, + "stop": 4, + "text": "shortest" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how can i get from garching to münchner freiheit as fast as possible?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 10, + "stop": 10, + "text": "fast" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "münchner freiheit" + } + ] + }, + { + "text": "what's the cheapest way from neuperlach süd to lehel?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 4, + "stop": 4, + "text": "cheapest" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "neuperlach süd" + }, + { + "entity": "StationDest", + "start": 10, + "stop": 10, + "text": "lehel" + } + ] + }, + { + "text": "how can i get from neuperlach zentrum to karlsplatz as fast as possible?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 10, + "stop": 10, + "text": "fast" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "neuperlach zentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "karlsplatz" + } + ] + }, + { + "text": "could you give me the fastest connection between brudermühlstraße and alte heide?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 5, + "stop": 5, + "text": "fastest" + }, + { + "entity": "StationStart", + "start": 8, + "stop": 8, + "text": "brudermühlstraße" + }, + { + "entity": "StationDest", + "start": 10, + "stop": 11, + "text": "alte heide" + } + ] + }, + { + "text": "is there a train from neuperlach zentrum to garching at 3 pm?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "neuperlach zentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "garching" + } + ] + }, + { + "text": "can you find a connection from olympiazentrum to lehel at 2 pm?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "olympiazentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "lehel" + } + ] + }, + { + "text": "i need a connection from harras to karl-preis-platz at 8 am.", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "harras" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 11, + "text": "karl-preis-platz" + } + ] + }, + { + "text": "in need to be at hauptbahnhof at 1 pm, can you search a connection from garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 16, + "stop": 17, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "i need to be in garching at 9", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "garching" + } + ] + }, + { + "text": "can i take a bus from quiddestraße to hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "can you find the shortest way from moosfeld to milbertshofen?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 4, + "stop": 4, + "text": "shortest" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "moosfeld" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "milbertshofen" + } + ] + }, + { + "text": "how can i get to neuperlach süd from garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 8, + "stop": 9, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 6, + "text": "neuperlach süd" + } + ] + }, + { + "text": "can you find a bus from quiddestraße to lehel?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "lehel" + } + ] + }, + { + "text": "is there a tram from karlsplatz to lehel?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "tram" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "karlsplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "lehel" + } + ] + }, + { + "text": "is there a bus from garching to moosach at around 5?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "moosach" + } + ] + }, + { + "text": "is there a bus from odeonsplatz to hauptbahnhof at 3 pm?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "odeonsplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "can you tell me the cheapest way from garching forschungszentrum to quiddestraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 5, + "stop": 5, + "text": "cheapest" + }, + { + "entity": "StationStart", + "start": 8, + "stop": 9, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 11, + "stop": 11, + "text": "quiddestraße" + } + ] + }, + { + "text": "how can i get to quiddestraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "quiddestraße" + } + ] + }, + { + "text": "when does the next bus leaves from hauptbahnhof?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "how can i get from garching to hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "how can i get from kurt-eisner-straße to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 9, + "text": "kurt-eisner-straße" + }, + { + "entity": "StationDest", + "start": 11, + "stop": 11, + "text": "garching" + } + ] + }, + { + "text": "when the next train in garching,forschungszentrum is leaving?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "Criterion", + "start": 2, + "stop": 2, + "text": "next" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 7, + "text": "garching,forschungszentrum" + } + ] + }, + { + "text": "what is the next connection from garching forschungszentrum to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how can i get from mossach to garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "mossach" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how can i get from garching forschungszentrum to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how can i get from garching, forschungszentrum to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 7, + "text": "garching, forschungszentrum" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how can i get from garching forschungszentrum to kurt-eisner-straße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 12, + "text": "kurt-eisner-straße" + } + ] + }, + { + "text": "how can i get to boltzmannstraße from quiddestraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "boltzmannstraße" + } + ] + }, + { + "text": "when does the next train departs from quiddestraße?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "quiddestraße" + } + ] + }, + { + "text": "when the next train in garching forschungszentrum is leaving?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "Criterion", + "start": 2, + "stop": 2, + "text": "next" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "when is the next u6 leaving from garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Line", + "start": 4, + "stop": 4, + "text": "u6" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when does the next train leave from garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "when is the next u6?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Line", + "start": 4, + "stop": 4, + "text": "u6" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + } + ] + }, + { + "text": "when is the next subway leaving from garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "subway" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when the next train in garching is leaving?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "Criterion", + "start": 2, + "stop": 2, + "text": "next" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + } + ] + }, + { + "text": "when is the next train leaving in garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when does the next train leaves from odeonsplatz?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "when does the next train leaves from quiddestraße?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "quiddestraße" + } + ] + }, + { + "text": "when is the next train", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + } + ] + }, + { + "text": "when does the next bus leaves at garching forschungszentrum?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "when does the next train leaves?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + } + ] + }, + { + "text": "when does the next bus leave in garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when does the next s-bahn leaves from hauptbahnhof?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "s-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 9, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "when does the next subway departes from odeonsplatz?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "subway" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "show me the next bus from garching!", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "when does the next tram starts from hauptbahnhof?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "tram" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "when will the next u-bahn depart from garching forschungszentrum?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 6, + "text": "u-bahn" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 9, + "stop": 10, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "show me the next bus from michaelibad.", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "michaelibad" + } + ] + }, + { + "text": "when does the next train starts at sendlinger tor?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "sendlinger tor" + } + ] + }, + { + "text": "hey bot, when does the next bus starts at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 7, + "stop": 7, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 6, + "stop": 6, + "text": "next" + }, + { + "entity": "StationStart", + "start": 10, + "stop": 10, + "text": "garching" + } + ] + }, + { + "text": "when does the next bus leaves at garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when is the bus from quiddestraße?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "quiddestraße" + } + ] + }, + { + "text": "when can i get a bus at mariahilfplatz?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 5, + "stop": 5, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "mariahilfplatz" + } + ] + }, + { + "text": "when does the next bus leaves at romanplatz?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "romanplatz" + } + ] + }, + { + "text": "when does the bus to röblingweg starts?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "bus" + }, + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "röblingweg" + } + ] + }, + { + "text": "next bus from quiddestraße?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 1, + "stop": 1, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 0, + "stop": 0, + "text": "next" + }, + { + "entity": "StationStart", + "start": 3, + "stop": 3, + "text": "quiddestraße" + } + ] + }, + { + "text": "when is the next bus leaving from garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "when is the train leaving in garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "when is the train leaving in garching?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 3, + "stop": 3, + "text": "train" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "how can i get from garching to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "when is adrians next subway leaving at garching forschungszentrum?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "subway" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how can i get from olympiazentrum to hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "olympiazentrum" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "how can i get from quiddestraße to boltzmannstraße?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "quiddestraße" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "boltzmannstraße" + } + ] + }, + { + "text": "how can i get from moosach to garching forschungszentrum?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "moosach" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "can you give me a connection from garching to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 9, + "stop": 9, + "text": "odeonsplatz" + } + ] + }, + { + "text": "when is the next train from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "when comes the next train", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + } + ] + }, + { + "text": "when is the next train in nordfriedhof", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "nordfriedhof" + } + ] + }, + { + "text": "when does the next train come at garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "when is the next train from nordfriedhof to garching forschungszentrum", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "nordfriedhof" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 9, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "i want to travel from garching to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how can i get to sendlinger tor?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 5, + "stop": 6, + "text": "sendlinger tor" + } + ] + }, + { + "text": "how do i get to untere straussäcker?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationDest", + "start": 5, + "stop": 6, + "text": "untere straussäcker" + } + ] + }, + { + "text": "how can i get from garching to garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "how can i get from garching to sendlinger tor?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 8, + "text": "sendlinger tor" + } + ] + }, + { + "text": "how can i get from garchingto garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garchingto" + }, + { + "entity": "StationDest", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "when is the next train from garching", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "how do i get from marienplatz zu garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "marienplatz" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "garching" + } + ] + }, + { + "text": "how can i get to milbertshofen from garching?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 7, + "stop": 7, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 5, + "stop": 5, + "text": "milbertshofen" + } + ] + }, + { + "text": "when is the next train to garching", + "intent": "FindConnection", + "entities": [ + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "StationDest", + "start": 6, + "stop": 6, + "text": "garching" + } + ] + }, + { + "text": "how can i get from garching to milbertshofen?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "milbertshofen" + } + ] + }, + { + "text": "when does the next rocket leaves from garching forschungszentrum?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "rocket" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 8, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "connection from untere straßäcker 21 to kieferngarten", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 2, + "stop": 4, + "text": "untere straßäcker 21" + }, + { + "entity": "StationDest", + "start": 6, + "stop": 6, + "text": "kieferngarten" + } + ] + }, + { + "text": "how to get from untere strassäcker 21 to frötmaning", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 6, + "text": "untere strassäcker 21" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "frötmaning" + } + ] + }, + { + "text": "how to get from untere strassaecker 21 to frötmaning", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 6, + "text": "untere strassaecker 21" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "frötmaning" + } + ] + }, + { + "text": "when is the next train from untere straßaecker 21 to kieferngarten", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 8, + "text": "untere straßaecker 21" + }, + { + "entity": "StationDest", + "start": 10, + "stop": 10, + "text": "kieferngarten" + } + ] + }, + { + "text": "when is the next train from untere straßaecker 21, garching to kieferngarten", + "intent": "FindConnection", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 7, + "stop": 10, + "text": "straßaecker 21, garching" + }, + { + "entity": "StationDest", + "start": 12, + "stop": 12, + "text": "kieferngarten" + } + ] + }, + { + "text": "from garching to perlach", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "perlach" + } + ] + }, + { + "text": "how to get from garching to perlach?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 4, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 6, + "stop": 6, + "text": "perlach" + } + ] + }, + { + "text": "how to get from bonnerplatz to freimann", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 4, + "stop": 4, + "text": "bonnerplatz" + }, + { + "entity": "StationDest", + "start": 6, + "stop": 6, + "text": "freimann" + } + ] + }, + { + "text": "when is the next train in nordfriedhof?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 6, + "text": "nordfriedhof" + } + ] + }, + { + "text": "when is the next train in münchner freiheit?", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "train" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "münchner freiheit" + } + ] + }, + { + "text": "connection from hauptbahnhof to odeonsplatz?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 2, + "stop": 2, + "text": "hauptbahnhof" + }, + { + "entity": "StationDest", + "start": 4, + "stop": 4, + "text": "odeonsplatz" + } + ] + }, + { + "text": "how do i get from olympia einkaufszentrum to hauptbahnhof?", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 6, + "text": "olympia einkaufszentrum" + }, + { + "entity": "StationDest", + "start": 8, + "stop": 8, + "text": "hauptbahnhof" + } + ] + }, + { + "text": "when is the next bus in garching forschungszentrum", + "intent": "DepartureTime", + "entities": [ + { + "entity": "Vehicle", + "start": 4, + "stop": 4, + "text": "bus" + }, + { + "entity": "Criterion", + "start": 3, + "stop": 3, + "text": "next" + }, + { + "entity": "StationStart", + "start": 6, + "stop": 7, + "text": "garching forschungszentrum" + } + ] + }, + { + "text": "how can i get from garching to marienplatz", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 5, + "stop": 5, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 7, + "stop": 7, + "text": "marienplatz" + } + ] + }, + { + "text": "from garching to studentenstadt", + "intent": "FindConnection", + "entities": [ + { + "entity": "StationStart", + "start": 1, + "stop": 1, + "text": "garching" + }, + { + "entity": "StationDest", + "start": 3, + "stop": 3, + "text": "studentenstadt" + } + ] + } + ] +} diff --git a/BotSharp.WebHost/App_Data/DbInitializer/Agents/agents.json b/BotSharp.WebHost/App_Data/DbInitializer/Agents/agents.json index 34f854ad..4a3e46f4 100644 --- a/BotSharp.WebHost/App_Data/DbInitializer/Agents/agents.json +++ b/BotSharp.WebHost/App_Data/DbInitializer/Agents/agents.json @@ -16,7 +16,7 @@ }, { "Id": "bff7605c-3db5-44dc-9ba7-1c9be2832318", - "Name": "Airport", + "Name": "Chatbot", "UserId": "8da9e1e0-42dc-420a-8016-79b04c1297d0", "ClientAccessToken": "6ba8a06865944f14981ce18d229283f5", "DeveloperAccessToken": "f12fbdb0da5a4616b18fa7582d32f6e3", diff --git a/BotSharp.WebHost/BotSharp.WebHost.csproj b/BotSharp.WebHost/BotSharp.WebHost.csproj index 757b271d..c467e00c 100644 --- a/BotSharp.WebHost/BotSharp.WebHost.csproj +++ b/BotSharp.WebHost/BotSharp.WebHost.csproj @@ -5,6 +5,13 @@ Portable;win10-x64;centos.7-x64 + + + + + + + diff --git a/BotSharp.WebHost/Settings/bot.json b/BotSharp.WebHost/Settings/bot.json index b6924bd2..c6c3d52f 100644 --- a/BotSharp.WebHost/Settings/bot.json +++ b/BotSharp.WebHost/Settings/bot.json @@ -9,6 +9,10 @@ "SpaCyProvider": { "Url": "http://10.2.21.200:5005" }, - "Pipe": "SpaCyTokenizer, SpaCyTagger, CRFsuiteEntityRecognizer" + "Pipe": "SpaCyTokenizer, CRFsuiteEntityRecognizer", + "CRFsuiteEntityRecognizer": { + "uniFeatures": "w wl pos chk shape shaped type p1 p2 p3 p4 s1 s2 s3 s4 2d 4d d&a d&- d&/ d&, d&. up iu au al ad ao cu cl ca cd cs", + "biFeatures": "w pos chk shaped type" + } } }