diff --git a/BotSharp.Core/BotSharp.Core.csproj b/BotSharp.Core/BotSharp.Core.csproj index 409bb78b..e3e5092c 100644 --- a/BotSharp.Core/BotSharp.Core.csproj +++ b/BotSharp.Core/BotSharp.Core.csproj @@ -78,6 +78,7 @@ If you feel that this project is helpful to you, please Star on the project, we + diff --git a/BotSharp.Core/Engines/Jieba.NET/JiebaTokenizer.cs b/BotSharp.Core/Engines/Jieba.NET/JiebaTokenizer.cs new file mode 100644 index 00000000..ec4cf769 --- /dev/null +++ b/BotSharp.Core/Engines/Jieba.NET/JiebaTokenizer.cs @@ -0,0 +1,26 @@ +using BotSharp.Core.Abstractions; +using BotSharp.Core.Agents; +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace BotSharp.Core.Engines.Jieba.NET +{ + public class JiebaTokenizer : INlpTrain, INlpPredict + { + public IConfiguration Configuration { get; set; } + public PipeSettings Settings { get; set; } + + public Task Predict(Agent agent, NlpDoc doc, PipeModel meta) + { + throw new NotImplementedException(); + } + + public Task Train(Agent agent, NlpDoc doc, PipeModel meta) + { + throw new NotImplementedException(); + } + } +} diff --git a/BotSharp.Core/Engines/Jieba.NET/README.rst b/BotSharp.Core/Engines/Jieba.NET/README.rst new file mode 100644 index 00000000..347cc004 --- /dev/null +++ b/BotSharp.Core/Engines/Jieba.NET/README.rst @@ -0,0 +1,3 @@ +BotSharp uses the jieba.NetCore to do tokenization. (https://github.com/1483523635/jieba.NetCore) + +Please follow the install instruction (https://github.com/anderscui/jieba.NET/) diff --git a/BotSharp.NLP.UnitTest/DefaultTaggerTest.cs b/BotSharp.NLP.UnitTest/DefaultTaggerTest.cs index ac2aef22..7b43f8dc 100644 --- a/BotSharp.NLP.UnitTest/DefaultTaggerTest.cs +++ b/BotSharp.NLP.UnitTest/DefaultTaggerTest.cs @@ -14,7 +14,9 @@ namespace BotSharp.NLP.UnitTest [TestMethod] public void TagInCoNLL2000() { - var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); + var tokens = tokenizer.Tokenize("How are you doing?"); var tagger = new TaggerFactory(new TagOptions diff --git a/BotSharp.NLP.UnitTest/NGramTaggerTest.cs b/BotSharp.NLP.UnitTest/NGramTaggerTest.cs index 5701a7c3..0c3fb10d 100644 --- a/BotSharp.NLP.UnitTest/NGramTaggerTest.cs +++ b/BotSharp.NLP.UnitTest/NGramTaggerTest.cs @@ -18,10 +18,11 @@ namespace BotSharp.NLP.UnitTest public void UniGramInCoNLL2000() { // tokenization - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.WORD_PUNC }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Chancellor of the Exchequer Nigel Lawson's restated commitment"); @@ -57,10 +58,11 @@ namespace BotSharp.NLP.UnitTest public void BiGramInCoNLL2000() { // tokenization - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.WORD_PUNC }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Chancellor of the Exchequer Nigel Lawson's restated commitment"); @@ -84,10 +86,11 @@ namespace BotSharp.NLP.UnitTest public void TriGramInCoNLL2000() { // tokenization - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.WORD_PUNC }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Chancellor of the Exchequer Nigel Lawson's restated commitment"); diff --git a/BotSharp.NLP.UnitTest/NaiveBayesClassifierTest.cs b/BotSharp.NLP.UnitTest/NaiveBayesClassifierTest.cs index 331caed3..cabbeb71 100644 --- a/BotSharp.NLP.UnitTest/NaiveBayesClassifierTest.cs +++ b/BotSharp.NLP.UnitTest/NaiveBayesClassifierTest.cs @@ -26,7 +26,9 @@ namespace BotSharp.NLP.UnitTest FileName = "cooking.stackexchange.txt" }); - var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); + var newSentences = tokenizer.Tokenize(sentences.Select(x => x.Text).ToList()); for(int i = 0; i < newSentences.Count; i++) { @@ -75,10 +77,11 @@ namespace BotSharp.NLP.UnitTest var corpus = GetLabeledCorpus(options); - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.WORD_PUNC }, SupportedLanguage.English); + tokenizer.GetTokenizer(); corpus.ForEach(x => x.Words = tokenizer.Tokenize(x.Text)); @@ -139,7 +142,9 @@ namespace BotSharp.NLP.UnitTest FileName = "spotify.txt" }); - var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); + var newSentences = tokenizer.Tokenize(sentences.Select(x => x.Text).ToList()); for (int i = 0; i < newSentences.Count; i++) { diff --git a/BotSharp.NLP.UnitTest/Tokenize/RegexTokenizerTest.cs b/BotSharp.NLP.UnitTest/Tokenize/RegexTokenizerTest.cs index ce93e189..e305ca20 100644 --- a/BotSharp.NLP.UnitTest/Tokenize/RegexTokenizerTest.cs +++ b/BotSharp.NLP.UnitTest/Tokenize/RegexTokenizerTest.cs @@ -10,10 +10,11 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void TokenizeInWhiteSpace() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.WHITE_SPACE }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Chop into pieces, isn't it?"); @@ -36,11 +37,12 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void TokenizeInWordPunctuation() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.WORD_PUNC, SpecialWords = new List { "n't" } }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Chop into pieces, isn't it?"); @@ -72,10 +74,11 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void TokenizeInBlankLine() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { Pattern = RegexTokenizer.BLANK_LINE }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize(@"Chop into pieces, diff --git a/BotSharp.NLP.UnitTest/Tokenize/TreebankTokenizerTest.cs b/BotSharp.NLP.UnitTest/Tokenize/TreebankTokenizerTest.cs index ddaf7673..ef72b123 100644 --- a/BotSharp.NLP.UnitTest/Tokenize/TreebankTokenizerTest.cs +++ b/BotSharp.NLP.UnitTest/Tokenize/TreebankTokenizerTest.cs @@ -12,9 +12,10 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void ReplaceStartingQuoting() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("«Hello!"); @@ -31,9 +32,10 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void ReplaceEndingQuoting() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Aren't you"); @@ -50,9 +52,10 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void ReplacePunctuation() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("Hello World..."); @@ -69,9 +72,10 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void ReplaceBrackets() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize(""); @@ -91,9 +95,10 @@ namespace BotSharp.NLP.UnitTest.Tokenize [TestMethod] public void ReplaceConventions() { - var tokenizer = new TokenizerFactory(new TokenizationOptions + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); var tokens = tokenizer.Tokenize("I cannot jump."); diff --git a/BotSharp.NLP.UnitTest/Vector/OneHotEncodingTest.cs b/BotSharp.NLP.UnitTest/Vector/OneHotEncodingTest.cs index 5c39f326..7c02ea5a 100644 --- a/BotSharp.NLP.UnitTest/Vector/OneHotEncodingTest.cs +++ b/BotSharp.NLP.UnitTest/Vector/OneHotEncodingTest.cs @@ -24,7 +24,9 @@ namespace BotSharp.NLP.UnitTest.Vector FileName = "cooking.stackexchange.txt" }); - var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + var tokenizer = new TokenizerFactory(new TokenizationOptions { }, SupportedLanguage.English); + tokenizer.GetTokenizer(); + var newSentences = tokenizer.Tokenize(sentences.Select(x => x.Text).ToList()); for (int i = 0; i < newSentences.Count; i++) {