From 15af4c07975aa8925156079025fc57809a08674e Mon Sep 17 00:00:00 2001 From: "haiping008@gmail.com" Date: Mon, 6 Aug 2018 10:51:49 -0500 Subject: [PATCH 1/6] Fix get corpus is empty for Sebis trainer. --- BotSharp.Core/Engines/BotTrainer.cs | 5 +---- .../Engines/Sebis/AgentImporterInSebis.cs | 6 ++++-- BotSharp.RestApi/AgentController.cs | 21 ++++++++++++++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/BotSharp.Core/Engines/BotTrainer.cs b/BotSharp.Core/Engines/BotTrainer.cs index a7812a443..9065a3f2d 100644 --- a/BotSharp.Core/Engines/BotTrainer.cs +++ b/BotSharp.Core/Engines/BotTrainer.cs @@ -19,13 +19,10 @@ public class BotTrainer private string agentId; - private string config; - - public BotTrainer(string agentId, Database dc, string config = "BotSharpAi") + public BotTrainer(string agentId, Database dc) { this.dc = dc; this.agentId = agentId; - this.config = config; } public string Train(Agent agent) diff --git a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs index 32afb4136..25e86fe00 100644 --- a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs +++ b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs @@ -58,11 +58,11 @@ public void LoadIntents(Agent agent, string agentDir) agent.Intents = sentences.Select(x => x.Name).Distinct().Select(x => new Intent{Name = x}).ToList(); agent.Intents.ForEach(intent => { - ImportIntentUserSays(agent, intent, sentences); + ImportIntentUserSays(intent, sentences); }); } - private void ImportIntentUserSays(Agent agent, Intent intent, List sentences) + private void ImportIntentUserSays(Intent intent, List sentences) { intent.UserSays = new List(); @@ -113,6 +113,8 @@ private void ImportIntentUserSays(Agent agent, Intent intent, List }); } } + + intent.UserSays.Add(expression); }); } diff --git a/BotSharp.RestApi/AgentController.cs b/BotSharp.RestApi/AgentController.cs index 153b8bb83..10f74cf8b 100644 --- a/BotSharp.RestApi/AgentController.cs +++ b/BotSharp.RestApi/AgentController.cs @@ -2,8 +2,10 @@ using BotSharp.Core.Engines; using BotSharp.Core.Engines.BotSharp; using BotSharp.Core.Models; +using DotNetToolkit; using EntityFrameworkCore.BootKit; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using System; using System.Collections.Generic; @@ -19,6 +21,17 @@ namespace BotSharp.RestApi [Route("v1/[controller]/[action]")] public class AgentController : ControllerBase { + private readonly IBotPlatform _platform; + + /// + /// Initialize dialog controller and get a platform instance + /// + /// + public AgentController(IBotPlatform platform) + { + _platform = platform; + } + /// /// Restore a agent from a uploaded zip file /// @@ -45,9 +58,8 @@ public ActionResult Restore([FromRoute] String agentId) [HttpGet("{agentId}")] public string Train([FromRoute] String agentId) { - var ai = new BotSharpAi(); - ai.LoadAgent("bff7605c-3db5-44dc-9ba7-1c9be2832318"); - ai.Train(); + _platform.LoadAgent(agentId); + _platform.Train(); return ""; } @@ -60,8 +72,7 @@ public string Train([FromRoute] String agentId) [HttpGet("{agentId}")] public ActionResult Dump([FromRoute] String agentId) { - var rasa = new RasaAi(); - var agent = rasa.LoadAgent(agentId); + var agent = _platform.LoadAgent(agentId); return Ok(agent); } From 7bfe6b50b80938dfe4921a8b232fc96c8f410657 Mon Sep 17 00:00:00 2001 From: "haiping008@gmail.com" Date: Mon, 6 Aug 2018 11:59:03 -0500 Subject: [PATCH 2/6] Fix space missing before entity. --- BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs index 25e86fe00..1f59dd62e 100644 --- a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs +++ b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs @@ -102,7 +102,7 @@ private void ImportIntentUserSays(Intent intent, List sentences) Text = say.Text.Substring(entity.Start, entity.Value.Length) }); - pos = entity.End + 1; + pos = entity.End; if (pos < say.Text.Length && entityIdx == say.Entities.Count - 1) { From 6c598952c71e849f41d05cf73aca5c55eec1172f Mon Sep 17 00:00:00 2001 From: Bolo <36342729+PppBr@users.noreply.github.com> Date: Mon, 6 Aug 2018 13:45:14 -0500 Subject: [PATCH 3/6] fixed the string join bug for sebis --- BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs index 38b80a844..48863211c 100644 --- a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs +++ b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs @@ -117,12 +117,9 @@ private void ImportIntentUserSays(Intent intent, List sentences) } } -<<<<<<< HEAD -======= int second = 0; expression.Data.ForEach(x => x.UpdatedTime = DateTime.UtcNow.AddSeconds(second++)); ->>>>>>> b389d837f25afa256b35d0418274967557fb06f9 intent.UserSays.Add(expression); }); } From 5486eb43a2785e3da0efc346a868729abdd0ea38 Mon Sep 17 00:00:00 2001 From: Bolo <36342729+PppBr@users.noreply.github.com> Date: Wed, 8 Aug 2018 09:45:35 -0500 Subject: [PATCH 4/6] initial the CRFNerPredict API --- BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs index d601eb337..9094bde1e 100644 --- a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs +++ b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs @@ -135,6 +135,7 @@ public List Merge(List sentence, List tags, List return trainingTuple; } + } public class TrainingData From b72717cedfb89a19a41732c9e337e4185a6081f0 Mon Sep 17 00:00:00 2001 From: Bolo <36342729+PppBr@users.noreply.github.com> Date: Thu, 9 Aug 2018 16:06:40 -0500 Subject: [PATCH 5/6] update code with Oceania --- .gitignore | 9 + BotSharp.Core/Abstractions/IBotPlatform.cs | 3 +- BotSharp.Core/Abstractions/INlpPipeline.cs | 12 +- BotSharp.Core/BotSharp.Core.csproj | 6 +- BotSharp.Core/Engines/BotEngineBase.cs | 13 +- BotSharp.Core/Engines/BotPreditor.cs | 53 + BotSharp.Core/Engines/BotSharp/BotSharpAi.cs | 9 +- BotSharp.Core/Engines/BotTrainer.cs | 63 +- .../CRFsuite/CRFsuiteEntityRecognizer.cs | 141 +- .../Engines/Classifiers/FasttextClassifier.cs | 49 + BotSharp.Core/Engines/ModelMetaData.cs | 17 + BotSharp.Core/Engines/PipeModel.cs | 29 + .../Engines/Sebis/AgentImporterInSebis.cs | 2 +- BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs | 8 +- .../Engines/SpaCy/SpaCyEntityRecognizer.cs | 8 +- BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs | 26 +- BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs | 11 +- .../Engines/SpaCy/SpaCyTextCategorizer.cs | 8 +- BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs | 20 +- .../Engines/SpaCy/SpacyFeaturizer.cs | 8 +- BotSharp.MachineLearning/CRFsuite/Crfutils.cs | 11 +- BotSharp.MachineLearning/CRFsuite/Ner.cs | 22 +- BotSharp.MachineLearning/NLP/NlpToken.cs | 3 + BotSharp.MachineLearning/SpaCy/server.py | 148 +- BotSharp.RestApi/Dialogs/DialogController.cs | 9 +- BotSharp.WebHost/Algorithms/crfsuite.exe | Bin 0 -> 215040 bytes BotSharp.WebHost/Algorithms/fasttext.exe | Bin 0 -> 495855 bytes .../DbInitializer/Accounts/users.json | 1 + .../Sebis/{Airport => Chatbot}/agent.json | 0 .../Sebis/{Airport => Chatbot}/corpus.json | 8444 ++++++++--------- .../App_Data/DbInitializer/Agents/agents.json | 2 +- BotSharp.WebHost/BotSharp.WebHost.csproj | 16 +- BotSharp.WebHost/Settings/app.json | 3 +- BotSharp.WebHost/Settings/bot.json | 7 +- BotSharp.WebHost/Startup.cs | 74 +- README.md | 2 +- 36 files changed, 4782 insertions(+), 4455 deletions(-) create mode 100644 BotSharp.Core/Engines/BotPreditor.cs create mode 100644 BotSharp.Core/Engines/Classifiers/FasttextClassifier.cs create mode 100644 BotSharp.Core/Engines/ModelMetaData.cs create mode 100644 BotSharp.Core/Engines/PipeModel.cs create mode 100644 BotSharp.WebHost/Algorithms/crfsuite.exe create mode 100644 BotSharp.WebHost/Algorithms/fasttext.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 cae01f15b..4298cb56d 100644 --- a/.gitignore +++ b/.gitignore @@ -294,3 +294,12 @@ __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 +/BotSharp.WebHost/App_Data/ModelFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318/ner-crf.model +/BotSharp.WebHost/App_Data/ModelFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318/metadata.json +/BotSharp.WebHost/App_Data/TrainingFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318/ner-crf.parsed.txt +/BotSharp.WebHost/App_Data/TrainingFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318/ner-crf.corpus.txt +/BotSharp.WebHost/App_Data/ModelFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318 +/BotSharp.WebHost/App_Data/TrainingFiles/bff7605c-3db5-44dc-9ba7-1c9be2832318 diff --git a/BotSharp.Core/Abstractions/IBotPlatform.cs b/BotSharp.Core/Abstractions/IBotPlatform.cs index a07c4198b..546c6b115 100644 --- a/BotSharp.Core/Abstractions/IBotPlatform.cs +++ b/BotSharp.Core/Abstractions/IBotPlatform.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Engines { @@ -18,6 +19,6 @@ public interface IBotPlatform AIResponse TextRequest(AIRequest request); - void Train(); + Task Train(); } } diff --git a/BotSharp.Core/Abstractions/INlpPipeline.cs b/BotSharp.Core/Abstractions/INlpPipeline.cs index 774be45e8..eb16b353f 100644 --- a/BotSharp.Core/Abstractions/INlpPipeline.cs +++ b/BotSharp.Core/Abstractions/INlpPipeline.cs @@ -1,9 +1,11 @@ using BotSharp.Core.Agents; +using BotSharp.Core.Engines; using Microsoft.Extensions.Configuration; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Abstractions { @@ -14,6 +16,14 @@ public interface INlpPipeline { IConfiguration Configuration { get; set; } - bool Process(Agent agent, JObject data); + /// + /// Process + /// + /// + /// Intermediate result + /// Meta data which is packed to model + /// + Task Train(Agent agent, JObject data, PipeModel meta); + Task Predict(Agent agent, JObject data, PipeModel meta); } } diff --git a/BotSharp.Core/BotSharp.Core.csproj b/BotSharp.Core/BotSharp.Core.csproj index 6378b2af1..fec84743a 100644 --- a/BotSharp.Core/BotSharp.Core.csproj +++ b/BotSharp.Core/BotSharp.Core.csproj @@ -35,7 +35,7 @@ - + @@ -46,4 +46,8 @@ + + + + diff --git a/BotSharp.Core/Engines/BotEngineBase.cs b/BotSharp.Core/Engines/BotEngineBase.cs index 6445072b9..c58544505 100644 --- a/BotSharp.Core/Engines/BotEngineBase.cs +++ b/BotSharp.Core/Engines/BotEngineBase.cs @@ -4,11 +4,13 @@ using BotSharp.Core.Models; using EntityFrameworkCore.BootKit; using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Engines { @@ -32,6 +34,13 @@ public BotEngineBase() DbInitializerPath = Path.Join(dataPath, $"DbInitializer"); } + public AIResponse TextRequest(AIRequest request) + { + var preditor = new BotPreditor(); + var text = preditor.Predict(agent, request); + return null; + } + public Agent LoadAgent(string id) { if (agent == null) @@ -177,9 +186,9 @@ join ees in dc.Table() on ee.Id equals ees.EntityEntryId return corpus; } - public virtual void Train() + public virtual Task Train() { - + return Task.CompletedTask; } } diff --git a/BotSharp.Core/Engines/BotPreditor.cs b/BotSharp.Core/Engines/BotPreditor.cs new file mode 100644 index 000000000..e6522a580 --- /dev/null +++ b/BotSharp.Core/Engines/BotPreditor.cs @@ -0,0 +1,53 @@ +using BotSharp.Core.Abstractions; +using BotSharp.Core.Agents; +using BotSharp.Core.Models; +using DotNetToolkit; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BotSharp.Core.Engines +{ + public class BotPreditor + { + public async Task Predict(Agent agent, AIRequest request) + { + // load model + var dir = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "ModelFiles", agent.Id); + Console.WriteLine($"Load model from {dir}"); + var metaJson = File.ReadAllText(Path.Join(dir, "metadata.json")); + var meta = JsonConvert.DeserializeObject(metaJson); + + // Get NLP Provider + var config = (IConfiguration)AppDomain.CurrentDomain.GetData("Configuration"); + var assemblies = (string[])AppDomain.CurrentDomain.GetData("Assemblies"); + + var providerPipe = meta.Pipeline.First(); + var provider = TypeHelper.GetInstance(providerPipe.Name, assemblies) as INlpPipeline; + provider.Configuration = config.GetSection(meta.Platform); + + var data = JObject.FromObject(new + { + }); + + await provider.Train(agent, data, providerPipe); + meta.Pipeline.RemoveAt(0); + + // pipe process + meta.Pipeline.ForEach(async pipeMeta => + { + var pipe = TypeHelper.GetInstance(pipeMeta.Name, assemblies) as INlpPipeline; + pipe.Configuration = provider.Configuration; + await pipe.Predict(agent, data, pipeMeta); + }); + + return ""; + } + } +} diff --git a/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs b/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs index bec9333e2..4ea57d6fa 100644 --- a/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs +++ b/BotSharp.Core/Engines/BotSharp/BotSharpAi.cs @@ -1,21 +1,18 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; using BotSharp.Core.Models; namespace BotSharp.Core.Engines.BotSharp { public class BotSharpAi : BotEngineBase, IBotPlatform { - public AIResponse TextRequest(AIRequest request) - { - throw new NotImplementedException(); - } - public override void Train() + public override async Task Train() { agent.Corpus = GetIntentExpressions(); var trainer = new BotTrainer(agent.Id, dc); - trainer.Train(agent); + await trainer.Train(agent); } } } diff --git a/BotSharp.Core/Engines/BotTrainer.cs b/BotSharp.Core/Engines/BotTrainer.cs index 9065a3f2d..ed56e360d 100644 --- a/BotSharp.Core/Engines/BotTrainer.cs +++ b/BotSharp.Core/Engines/BotTrainer.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; +using System.Threading.Tasks; using BotSharp.Core.Abstractions; using BotSharp.Core.Agents; using BotSharp.Core.Intents; @@ -9,7 +11,9 @@ using EntityFrameworkCore.BootKit; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; namespace BotSharp.Core.Engines { @@ -25,7 +29,7 @@ public BotTrainer(string agentId, Database dc) this.agentId = agentId; } - public string Train(Agent agent) + public async Task Train(Agent agent) { agent.Intents = dc.Table() .Include(x => x.Contexts) @@ -47,9 +51,37 @@ public string Train(Agent agent) string providerName = config.GetSection($"{platform}:Provider").Value; var provider = TypeHelper.GetInstance(providerName, assemblies) as INlpPipeline; provider.Configuration = config.GetSection(platform); - provider.Process(agent, data); - //var corpus = agent.GrabCorpus(dc); + var pipeModel = new PipeModel + { + Name = providerName, + Class = provider.ToString(), + Meta = new JObject(), + Time = DateTime.UtcNow + }; + + await provider.Train(agent, data, pipeModel); + + var meta = new ModelMetaData + { + Platform = platform, + Language = agent.Language, + TrainingDate = DateTime.UtcNow, + Version = config.GetValue($"Version"), + Pipeline = new List() { pipeModel } + }; + + var dirTrain = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles", agent.Id); + if (!Directory.Exists(dirTrain)) + { + Directory.CreateDirectory(dirTrain); + } + + var dirModel = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "ModelFiles", agent.Id); + if (!Directory.Exists(dirModel)) + { + Directory.CreateDirectory(dirModel); + } // pipe process var pipelines = provider.Configuration.GetSection($"Pipe").Value @@ -57,15 +89,34 @@ public string Train(Agent agent) .Select(x => x.Trim()) .ToList(); - pipelines.ForEach(pipeName => + pipelines.ForEach(async pipeName => { var pipe = TypeHelper.GetInstance(pipeName, assemblies) as INlpPipeline; pipe.Configuration = provider.Configuration; - pipe.Process(agent, data); + pipeModel = new PipeModel + { + Name = pipeName, + Class = pipe.ToString(), + Time = DateTime.UtcNow + }; + meta.Pipeline.Add(pipeModel); + + await pipe.Train(agent, data, pipeModel); + }); + + // save model meta data + var dir = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "ModelFiles", agent.Id); + var metaJson = JsonConvert.SerializeObject(meta, new JsonSerializerSettings + { + Formatting = Formatting.Indented, + NullValueHandling = NullValueHandling.Ignore, + ContractResolver = new CamelCasePropertyNamesContractResolver() }); + File.WriteAllText(Path.Join(dir, "metadata.json"), metaJson); + Console.WriteLine(metaJson); - return ""; + return metaJson; } } } diff --git a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs index 9094bde1e..673d27dac 100644 --- a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs +++ b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs @@ -1,17 +1,19 @@ using BotSharp.Core.Abstractions; using BotSharp.Core.Agents; using BotSharp.MachineLearning.NLP; +using DotNetToolkit; using EntityFrameworkCore.BootKit; using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; 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,70 @@ public class CRFsuiteEntityRecognizer : INlpPipeline { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { var dc = new DefaultDataContextLoader().GetDefaultDc(); var corpus = agent.Corpus; - - List> tags = data["Tags"].ToObject>>(); + + meta.Model = "ner-crf.model"; + 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); + var dirTrain = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles", agent.Id); + var dirModel = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "ModelFiles", agent.Id); + string rawTrainingDataFileName = Path.Join(dirTrain, "ner-crf.corpus.txt"); + string parsedTrainingDataFileName = Path.Join(dirTrain, "ner-crf.parsed.txt"); + string modelFileName = Path.Join(dirModel, meta.Model); - 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(); + } + } - return true; - } + var fields = Configuration.GetValue($"CRFsuiteEntityRecognizer:fields"); + var uniFeatures = Configuration.GetValue($"CRFsuiteEntityRecognizer:uniFeatures"); + var biFeatures = Configuration.GetValue($"CRFsuiteEntityRecognizer:biFeatures"); + + new MachineLearning.CRFsuite.Ner() + .NerStart(rawTrainingDataFileName, parsedTrainingDataFileName, fields, uniFeatures.Split(" "), biFeatures.Split(" ")); - public void Runcmd () - { var algorithmDir = Path.Join(AppDomain.CurrentDomain.GetData("ContentRootPath").ToString(), "Algorithms"); - var dataDir = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles"); - - 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(); - - p.StandardInput.WriteLine(cmd + "&exit"); - p.StandardInput.AutoFlush = false; - - string output = p.StandardOutput.ReadToEnd(); - - p.WaitForExit();//等待程序执行完退出进程 - p.Close(); - Console.WriteLine(output); + + CmdHelper.Run(Path.Join(algorithmDir, "crfsuite"), $"learn -m {modelFileName} {parsedTrainingDataFileName}"); // --split=3 -x + + Console.WriteLine($"Saved model to {modelFileName}"); + meta.Meta = new JObject(); + meta.Meta["fields"] = fields; + meta.Meta["uniFeatures"] = uniFeatures; + meta.Meta["biFeatures"] = biFeatures; + + return true; } - 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 +96,7 @@ public List Merge(List sentence, List tags, List 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 +115,7 @@ public List Merge(List sentence, List tags, List 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,50 +124,36 @@ public List Merge(List sentence, List tags, List } 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 { i = i + wordCandidateCount - 1; } } - return trainingTuple; + return trainingTuple; } + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } } public class TrainingData { 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.Chunk = chunk; + Token = token; + Entity = entity; + Pos = pos; + 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/Classifiers/FasttextClassifier.cs b/BotSharp.Core/Engines/Classifiers/FasttextClassifier.cs new file mode 100644 index 000000000..3d442da15 --- /dev/null +++ b/BotSharp.Core/Engines/Classifiers/FasttextClassifier.cs @@ -0,0 +1,49 @@ +using BotSharp.Core.Abstractions; +using BotSharp.Core.Agents; +using DotNetToolkit; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading.Tasks; + +namespace BotSharp.Core.Engines.Classifiers +{ + public class FasttextClassifier : INlpPipeline + { + public IConfiguration Configuration { get; set; } + + public Task Predict(Agent agent, JObject data, PipeModel meta) + { + throw new NotImplementedException(); + } + + public async Task Train(Agent agent, JObject data, PipeModel meta) + { + meta.Model = "classification-fasttext.model"; + var algorithmDir = Path.Join(AppDomain.CurrentDomain.GetData("ContentRootPath").ToString(), "Algorithms"); + var dirTrain = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles", agent.Id); + var dirModel = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "ModelFiles", agent.Id); + + string parsedTrainingDataFileName = Path.Join(dirTrain, $"classification-fasttext.parsed.txt"); + string modelFileName = Path.Join(dirModel, meta.Model); + + // assemble corpus + StringBuilder corpus = new StringBuilder(); + agent.Corpus.UserSays.ForEach(x => corpus.AppendLine($"__label__{x.Intent} {x.Text}")); + + File.WriteAllText(parsedTrainingDataFileName, corpus.ToString()); + + var output = CmdHelper.Run(Path.Join(algorithmDir, "fasttext"), $"supervised -input {parsedTrainingDataFileName} -output {modelFileName}"); + + Console.WriteLine($"Saved model to {modelFileName}"); + meta.Meta = new JObject(); + meta.Meta["compiled at"] = "Aug 3, 2018"; + + + return true; + } + } +} diff --git a/BotSharp.Core/Engines/ModelMetaData.cs b/BotSharp.Core/Engines/ModelMetaData.cs new file mode 100644 index 000000000..6ea1ea64a --- /dev/null +++ b/BotSharp.Core/Engines/ModelMetaData.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Core.Engines +{ + public class ModelMetaData + { + public string Platform { get; set; } + public string Language { get; set; } + + public string Version { get; set; } + public DateTime TrainingDate { get; set; } + + public List Pipeline { get; set; } + } +} diff --git a/BotSharp.Core/Engines/PipeModel.cs b/BotSharp.Core/Engines/PipeModel.cs new file mode 100644 index 000000000..d971408a9 --- /dev/null +++ b/BotSharp.Core/Engines/PipeModel.cs @@ -0,0 +1,29 @@ +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Core.Engines +{ + public class PipeModel + { + /// + /// Pipe name + /// + public string Name { get; set; } + + /// + /// Pipe type name + /// + public string Class { get; set; } + + public DateTime Time { get; set; } + + public string Model { get; set; } + + /// + /// Extra meta data according to pipe + /// + public JObject Meta { get; set; } + } +} diff --git a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs index 48863211c..ba849bfd7 100644 --- a/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs +++ b/BotSharp.Core/Engines/Sebis/AgentImporterInSebis.cs @@ -105,7 +105,7 @@ private void ImportIntentUserSays(Intent intent, List sentences) Text = say.Text.Substring(entity.Start, entity.Value.Length) }); - pos = entity.End; + pos = entity.End + 1; if (pos < say.Text.Length && entityIdx == say.Entities.Count - 1) { diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs index 23a596fe8..8d32ed333 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyEntitizer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; using BotSharp.Core.Abstractions; using BotSharp.Core.Agents; using BotSharp.Core.Models; @@ -15,7 +16,12 @@ public class SpaCyEntitizer : INlpPipeline { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } + + public async Task Train(Agent agent, JObject data, PipeModel meta) { 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 d03384126..acfb1f592 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Engines.SpaCy { @@ -17,7 +18,7 @@ public class SpaCyEntityRecognizer : INlpPipeline List entitiesInTrainingSet = new List(); public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { String modelPath = "./entity_rec_output"; String newModelName = "test"; @@ -54,6 +55,11 @@ public bool Process(Agent agent, JObject data) return true; } + + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } } public class Result diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs b/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs index 2d214b925..f61d98104 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyProvider.cs @@ -1,26 +1,46 @@ using BotSharp.Core.Abstractions; using BotSharp.Core.Agents; using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using RestSharp; using System; using System.Collections.Generic; using System.Net.Http; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Engines.SpaCy { public class SpaCyProvider : INlpPipeline { public IConfiguration Configuration { get; set; } - - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("load", Method.GET); - var response = client.Execute(request); + var response = client.Execute(request); + + meta.Meta = JObject.FromObject(response.Data); + meta.Meta["models"] = null; + meta.Model = response.Data.Models; return response.IsSuccessful; } + + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } + + private class Result + { + [JsonProperty("spaCy ver")] + public string Version { get; set; } + [JsonProperty("models")] + public string Models { get; set; } + [JsonProperty("python ver")] + public string Python { get; set; } + } } } diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs b/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs index 46305e6f4..15878f767 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyTagger.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Text; using BotSharp.MachineLearning.NLP; +using System.Threading.Tasks; namespace BotSharp.Core.Engines.SpaCy { @@ -15,8 +16,7 @@ public class SpaCyTagger : INlpPipeline { public IConfiguration Configuration { get; set; } - - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("tagger", Method.GET); @@ -36,7 +36,12 @@ public bool Process(Agent agent, JObject data) return res; } - public class Result + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } + + private class Result { public List Tags { get; set; } } diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs index dc95802ab..6ae93765a 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyTextCategorizer.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Engines.SpaCy { @@ -16,7 +17,7 @@ public class SpaCyTextCategorizer : INlpPipeline { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { //var input = new List>(); @@ -62,6 +63,11 @@ public bool Process(Agent agent, JObject data) return true; } + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } + public class Result { public String ModelName { get; set; } diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs index 8835b7f08..f68d54170 100644 --- a/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpaCyTokenizer.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Tasks; namespace BotSharp.Core.Engines.SpaCy { @@ -17,32 +18,37 @@ public class SpaCyTokenizer : INlpPipeline { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { 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; } - - public class Result + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } + + private class Result { public List Tokens { get; set; } } diff --git a/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs b/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs index f456b8a28..2293a2fb6 100644 --- a/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs +++ b/BotSharp.Core/Engines/SpaCy/SpacyFeaturizer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; using BotSharp.Core.Abstractions; using BotSharp.Core.Agents; using EntityFrameworkCore.BootKit; @@ -14,7 +15,7 @@ public class SpacyFeaturizer : INlpPipeline { public IConfiguration Configuration { get; set; } - public bool Process(Agent agent, JObject data) + public async Task Train(Agent agent, JObject data, PipeModel meta) { var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); var request = new RestRequest("featurize", Method.GET); @@ -35,6 +36,11 @@ public bool Process(Agent agent, JObject data) return res; } + public async Task Predict(Agent agent, JObject data, PipeModel meta) + { + return true; + } + public class Result { public List Vectors { get; set; } diff --git a/BotSharp.MachineLearning/CRFsuite/Crfutils.cs b/BotSharp.MachineLearning/CRFsuite/Crfutils.cs index c3db9e119..f725ef1d4 100644 --- a/BotSharp.MachineLearning/CRFsuite/Crfutils.cs +++ b/BotSharp.MachineLearning/CRFsuite/Crfutils.cs @@ -135,16 +135,19 @@ public void OutputFeatures (StreamWriter sw, List> X, /// 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 904fe423b..c4b63a90b 100644 --- a/BotSharp.MachineLearning/CRFsuite/Ner.cs +++ b/BotSharp.MachineLearning/CRFsuite/Ner.cs @@ -11,8 +11,7 @@ public class Ner { // Separator of field values. string separator = " "; - // Field names of the input data. - string fields = "y w pos chk"; + Template templates = new Template(); public string GetShape (string token) @@ -469,15 +468,9 @@ public void DisJunctive(List> X, int t, string field, } } - 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 +480,7 @@ public void InitialTemplate () } } - foreach (string name in Bi) + foreach (string name in biFeatures) { for (int i = -2 ; i < 2; i++) { @@ -509,7 +502,6 @@ public void FeatureExtractor (List> X) // 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 +514,10 @@ public void FeatureExtractor (List> X) } } - public void NerStart () + public void NerStart(string rawFile, string parsedName, string fields, 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 fdd3613fb..e6cb34b8e 100644 --- a/BotSharp.MachineLearning/NLP/NlpToken.cs +++ b/BotSharp.MachineLearning/NLP/NlpToken.cs @@ -8,6 +8,9 @@ public class NlpToken { 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 37d47bcf7..467b3c0f7 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.RestApi/Dialogs/DialogController.cs b/BotSharp.RestApi/Dialogs/DialogController.cs index 85487bafa..701c541d8 100644 --- a/BotSharp.RestApi/Dialogs/DialogController.cs +++ b/BotSharp.RestApi/Dialogs/DialogController.cs @@ -13,6 +13,7 @@ namespace BotSharp.RestApi.Dialogs /// /// Conversation controller /// + [Authorize] [Route("v1/[controller]")] public class DialogController : ControllerBase { @@ -33,16 +34,10 @@ public DialogController(IBotPlatform platform) /// /// /// - [AllowAnonymous] [HttpPost("/v1/query")] public ActionResult Query([FromBody] QueryModel request) { - String clientAccessToken = Request.Headers["Authorization"]; - if (String.IsNullOrEmpty(clientAccessToken)) - { - return Unauthorized(); - } - + String clientAccessToken = Request.Headers["ClientAccessToken"]; var config = new AIConfiguration(clientAccessToken, SupportedLanguage.English); config.SessionId = request.SessionId; 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/Algorithms/fasttext.exe b/BotSharp.WebHost/Algorithms/fasttext.exe new file mode 100644 index 0000000000000000000000000000000000000000..0ffcdd4c48e0772f785a639ca44513c16bff9ade GIT binary patch literal 495855 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

!xxki)cT@hQ)~9oXrmxJ+$tb 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

  • HD2d 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 D>h-1T literal 0 HcmV?d00001 diff --git a/BotSharp.WebHost/App_Data/DbInitializer/Accounts/users.json b/BotSharp.WebHost/App_Data/DbInitializer/Accounts/users.json index 9b7fabcb4..16d0b63bb 100644 --- a/BotSharp.WebHost/App_Data/DbInitializer/Accounts/users.json +++ b/BotSharp.WebHost/App_Data/DbInitializer/Accounts/users.json @@ -1,5 +1,6 @@ [ { + "id": "54cc19ee-e3d5-4d59-a011-fa0121450e36", "userName": "botsharp", "email": "support@botsharp.io", "firstName": "Support", 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 5f605388f..6475d44cd 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 34f854ad7..4a3e46f4e 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 757b271d5..055b58187 100644 --- a/BotSharp.WebHost/BotSharp.WebHost.csproj +++ b/BotSharp.WebHost/BotSharp.WebHost.csproj @@ -5,6 +5,21 @@ Portable;win10-x64;centos.7-x64 + + + + + + + + + + + + + + + @@ -57,7 +72,6 @@ - diff --git a/BotSharp.WebHost/Settings/app.json b/BotSharp.WebHost/Settings/app.json index e60729fd3..9ea54790b 100644 --- a/BotSharp.WebHost/Settings/app.json +++ b/BotSharp.WebHost/Settings/app.json @@ -1,4 +1,5 @@ { "Assemblies": "BotSharp.Core", - "BotPlatform": "BotSharpAi" + "BotPlatform": "BotSharpAi", + "Version": "0.1.0" } diff --git a/BotSharp.WebHost/Settings/bot.json b/BotSharp.WebHost/Settings/bot.json index b6924bd2a..3e721a5ee 100644 --- a/BotSharp.WebHost/Settings/bot.json +++ b/BotSharp.WebHost/Settings/bot.json @@ -9,6 +9,11 @@ "SpaCyProvider": { "Url": "http://10.2.21.200:5005" }, - "Pipe": "SpaCyTokenizer, SpaCyTagger, CRFsuiteEntityRecognizer" + "Pipe": "SpaCyTokenizer, CRFsuiteEntityRecognizer, FasttextClassifier", + "CRFsuiteEntityRecognizer": { + "fields": "y w pos chk", + "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" + } } } diff --git a/BotSharp.WebHost/Startup.cs b/BotSharp.WebHost/Startup.cs index 140496dab..0518ebe59 100644 --- a/BotSharp.WebHost/Startup.cs +++ b/BotSharp.WebHost/Startup.cs @@ -16,6 +16,8 @@ using BotSharp.Core.Engines.BotSharp; using System.Collections.Generic; using Newtonsoft.Json; +using DotNetToolkit.JwtHelper; +using BotSharp.Core.Agents; namespace BotSharp.WebHost { @@ -31,6 +33,7 @@ public Startup(IConfiguration configuration) public void ConfigureServices(IServiceCollection services) { services.AddCors(); + services.AddJwtAuth(Configuration); services.AddMvc(options => { @@ -43,6 +46,18 @@ public void ConfigureServices(IServiceCollection services) services.AddSwaggerGen(c => { + c.AddSecurityDefinition("Bearer", new ApiKeyScheme() + { + In = "header", + Description = "Please insert JWT with Bearer schema. Example: \"Authorization: Bearer {token}\"", + Name = "Authorization", + Type = "apiKey" + }); + + c.AddSecurityRequirement(new Dictionary> { + { "Bearer", Enumerable.Empty() }, + }); + var info = Configuration.GetSection("Swagger").Get(); c.SwaggerDoc(info.Version, info); @@ -74,10 +89,7 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) app.UseDefaultFiles(); app.UseStaticFiles(); - app.UseSwagger(c => - { - - }); + app.UseSwagger(); app.UseSwaggerUI(c => { var info = Configuration.GetSection("Swagger").Get(); @@ -95,8 +107,15 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) app.Use(async (context, next) => { string token = context.Request.Headers["Authorization"]; - if (string.IsNullOrWhiteSpace(token)) + if (!string.IsNullOrWhiteSpace(token) && (token = token.Split(' ').Last()).Length == 32) { + var config = (IConfiguration)AppDomain.CurrentDomain.GetData("Configuration"); + context.Request.Headers["ClientAccessToken"] = token; + + var dc = new DefaultDataContextLoader().GetDefaultDc(); + var userId = dc.Table().FirstOrDefault(x => x.ClientAccessToken == token)?.UserId; + + context.Request.Headers["Authorization"] = "Bearer " + JwtToken.GenerateToken(config, userId); } await next.Invoke(); @@ -114,51 +133,6 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) loader.Env = env; loader.Config = Configuration; loader.Load(); - - /*Runcmd(); - var ai = new BotSharpAi(); - ai.LoadAgent("6a9fd374-c43d-447a-97f2-f37540d0c725"); - ai.Train();*/ - } - - public void Runcmd () - { - string cmd = "/home/bolo/Desktop/BotSharp/TrainingFiles/crfsuite learn -m /home/bolo/Desktop/BotSharp/TrainingFiles/bolo.model /home/bolo/Desktop/BotSharp/TrainingFiles/1.txt"; - System.Diagnostics.Process p = new System.Diagnostics.Process(); - p.StartInfo.FileName = "sh"; - p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动 - p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息 - p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息 - p.StartInfo.RedirectStandardError = true;//重定向标准错误输出 - p.StartInfo.CreateNoWindow = false;//不显示程序窗口 - p.Start();//启动程序 - - //向cmd窗口发送输入信息 - p.StandardInput.WriteLine(cmd + "&exit"); - - p.StandardInput.AutoFlush = false; - //p.StandardInput.WriteLine("exit"); - //向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死 - //同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令 - - - - //获取cmd窗口的输出信息 - string output = p.StandardOutput.ReadToEnd(); - - //StreamReader reader = p.StandardOutput; - //string line=reader.ReadLine(); - //while (!reader.EndOfStream) - //{ - // str += line + " "; - // line = reader.ReadLine(); - //} - - p.WaitForExit();//等待程序执行完退出进程 - p.Close(); - - - Console.WriteLine(output); } } } \ No newline at end of file diff --git a/README.md b/README.md index 4a61e83cb..b23b17e1e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ### The Open Source AI Chatbot Platform Builder for Enterprise ### -**BotSharp** is an open source AI chatbot platform builder not only a bot builder, it's a complete out of box toolkit for building up a functional chabot platform which utilize aritifical intelligence. It's witten in C# running on .Net Core that is full cross-platform framework. C# is a enterprise grade programming language which is widely used to code business logic in information management related system. BotSharp adopts machine learning algrithm in C/C++ interfaces directly which skips the python interfaces. That will facilitate the feature of the typed language C#, and be more easier when refactoring code in system scope. +**BotSharp** is an open source AI chatbot platform builder's framework. It's not only a bot builder but also a complete out of box toolkit for building up a functional chabot platform which utilize aritifical intelligence. It's witten in C# running on .Net Core that is full cross-platform framework. C# is a enterprise grade programming language which is widely used to code business logic in information management related system. BotSharp adopts machine learning algrithm in C/C++ interfaces directly which skips the python interfaces. That will facilitate the feature of the typed language C#, and be more easier when refactoring code in system scope. Why we do this? because we all know python is not friendly programming language for enterprise developers, it's not only because it's low performance but also it's a type weak language, it will be a disater if you use python to build your bussiness system. From 6730e522f15980d138a6a35af7c5eeae0d34304e Mon Sep 17 00:00:00 2001 From: Bolo <36342729+PppBr@users.noreply.github.com> Date: Thu, 9 Aug 2018 16:59:04 -0500 Subject: [PATCH 6/6] add crfsuitNER predict API --- .../CRFsuite/CRFsuiteEntityRecognizer.cs | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs index 673d27dac..e0004b8f7 100644 --- a/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs +++ b/BotSharp.Core/Engines/CRFsuite/CRFsuiteEntityRecognizer.cs @@ -137,6 +137,57 @@ public List Merge(List tokens, List Predict(Agent agent, JObject data, PipeModel meta) { + List> tokens = data["Tokens"].ToObject>>(); + var uniFeatures = Configuration.GetValue($"CRFsuiteEntityRecognizer:uniFeatures"); + var biFeatures = Configuration.GetValue($"CRFsuiteEntityRecognizer:biFeatures"); + string field = Configuration.GetValue($"CRFsuiteEntityRecognizer:fields"); + string[] fields = field.Split(" "); + + var dirTrain = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "TrainingFiles", agent.Id); + var dirModel = Path.Join(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "ModelFiles", agent.Id); + + string rawPredictingDataFileName = Path.Join(dirTrain, "ner-crf.corpus.predict.txt"); + string parsedPredictingDataFileName = Path.Join(dirTrain, "ner-crf.parsed.predict.txt"); + string modelFileName = Path.Join(dirModel, meta.Model); + + + using (FileStream fs = new FileStream(rawPredictingDataFileName, FileMode.Create)) + { + using (StreamWriter sw = new StreamWriter(fs)) + { + List curLine = new List(); + foreach (List tokenList in tokens) + { + foreach (NlpToken token in tokenList) + { + for (int i = 0 ; i < fields.Length; i++) + { + if (fields[i] == "y") { + curLine.Add(""); + } + else if (fields[i] == "w") { + curLine.Add(token.Text); + } + else if (fields[i] == "pos") { + curLine.Add(token.Tag); + } + else if (fields[i] == "chk") { + curLine.Add(""); + } + } + sw.Write(string.Join(" ", curLine) + "\n"); + } + sw.Write("\n"); + } + sw.Flush(); + } + } + new MachineLearning.CRFsuite.Ner() + .NerStart(rawPredictingDataFileName, parsedPredictingDataFileName, field, uniFeatures.Split(" "), biFeatures.Split(" ")); + + var algorithmDir = Path.Join(AppDomain.CurrentDomain.GetData("ContentRootPath").ToString(), "Algorithms"); + + CmdHelper.Run(Path.Join(algorithmDir, "crfsuite"), $"tag -r -m {modelFileName} {parsedPredictingDataFileName}"); return true; } }