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++)
{