实例介绍
Textc 是一个强大的自然语言处理库,它使开发者能够创建基于文本命令的应用。这个库通过查找一系列语法中的匹配项来对文本输入进行标记化,这些语法被组织在一个文本处理器中。当输入与定义的令牌类型匹配时,引擎尝试使用每种语法中定义的令牌类型来解析输入。如果有多个语法匹配,处理引擎会使用评分器选择最佳匹配。选定的语法会生成一个表达式,该表达式持有解析后的令牌,并提交给命令处理器。常见的命令处理器实现将表达式令牌绑定到(类/委托)方法参数,通过令牌类型到语言(C#)类型的转换。
此外,Textc 支持使用上下文来充实语法令牌要求,类似于自然对话中的上下文。例如,当人们在对话中时,有时可以省略句子的部分内容,因为它在对话上下文中是隐含的。Textc 的上下文概念也是如此,可以通过将语法令牌标记为上下文或在命令处理过程中添加某些内容来向上下文中添加内容。
// 创建文本处理器示例
Func> sumFunc = (a, b) => Task.FromResult(a + b);
// 定义计算器方法
var sumSyntax = CsdlParser.Parse("operation+:Word(sum) a:Integer :Word?(and) b:Integer");
// 定义输出处理器,将命令结果打印到控制台
var outputProcessor = new DelegateOutputProcessor((o, context) => Console.WriteLine($"Result: {o}"));
此外,Textc 还支持使用 Redis 作为请求上下文的存储方式,而不是应用程序的内存。这需要通过 NuGet 安装扩展包。Textc 通过 CSDL(命令语法定义语言)提供了一种方便的方式来定义语法。CSDL 语句由一个或多个令牌声明组成,每个令牌声明都以特定的方式指定。【实例截图】
【核心代码】
文件清单
└── textc-csharp-8284f6a27700e900ef328f689ed36f3b178f02ba
├── appveyor.yml
├── LICENSE
├── README.md
└── src
├── Takenet.Textc
│ ├── Csdl
│ │ ├── ActivatorTokenTypeFactory.cs
│ │ ├── CsdlParser.cs
│ │ ├── CsdlSyntax.cs
│ │ ├── CsdlToken.cs
│ │ └── ITokenTypeFactory.cs
│ ├── Expression.cs
│ ├── IRequestContext.cs
│ ├── ISyntaxParser.cs
│ ├── ITextCursor.cs
│ ├── ITextProcessor.cs
│ ├── ITextSplitter.cs
│ ├── MatchNotFoundException.cs
│ ├── Metadata
│ │ ├── TokenTypeAttribute.cs
│ │ ├── TokenTypeLibraryAttribute.cs
│ │ └── TokenTypePropertyAttribute.cs
│ ├── packages.config
│ ├── ParsedInput.cs
│ ├── PreProcessors
│ │ ├── DictionaryReplacerPreProcessor.cs
│ │ ├── ITextPreProcessor.cs
│ │ ├── JoinWordsPreProcessor.cs
│ │ ├── SpellCorrect.cs
│ │ ├── SpellCorrectPreProcessor.cs
│ │ ├── TextNormalizerPreProcessor.cs
│ │ ├── ToLowerCasePreProcessor.cs
│ │ └── TrimTextPreprocessor.cs
│ ├── Processors
│ │ ├── CommandProcessorOutputBase.cs
│ │ ├── DelegateCommandProcessor.cs
│ │ ├── DelegateOutputProcessor.cs
│ │ ├── HttpCommandProcessor.cs
│ │ ├── ICommandProcessor.cs
│ │ ├── IOutputProcessor.cs
│ │ ├── OutputProcessorBase.cs
│ │ ├── ReflectionCommandProcessor.cs
│ │ └── TypeUtil.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── RequestContext.cs
│ ├── RequestContextExtensions.cs
│ ├── Scorers
│ │ ├── IExpressionScorer.cs
│ │ ├── MatchCountExpressionScorer.cs
│ │ └── RatioExpressionScorer.cs
│ ├── Splitters
│ │ └── PunctuationTextSplitter.cs
│ ├── Syntax.cs
│ ├── SyntaxParser.cs
│ ├── Takenet.Textc.csproj
│ ├── Takenet.Textc.nuspec
│ ├── Takenet.Textc.v2.ncrunchproject
│ ├── TextcException.cs
│ ├── TextCursor.cs
│ ├── TextProcessor.cs
│ ├── Token.cs
│ └── Types
│ ├── DecimalTokenType.cs
│ ├── DoubleMetaphoneWordTokenType.cs
│ ├── IntegerTokenType.cs
│ ├── ITokenType.cs
│ ├── LevenshteinDistanceTextTokenType.cs
│ ├── LevenshteinDistanceWordTokenType.cs
│ ├── LongTokenType.cs
│ ├── RegexLongTokenType.cs
│ ├── RegexTextTokenType.cs
│ ├── RegexTokenTypeBase.cs
│ ├── RegexWordTokenType.cs
│ ├── SoundexWordTokenType.cs
│ ├── StringExtensions.cs
│ ├── TextTokenType.cs
│ ├── TokenType.cs
│ ├── ValueTokenTypeBase.cs
│ └── WordTokenType.cs
├── Takenet.Textc.Extensions.Redis
│ ├── packages.config
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── RedisRequestContext.cs
│ ├── Takenet.Textc.Extensions.Redis.csproj
│ └── Takenet.Textc.Extensions.Redis.nuspec
├── Takenet.Textc.Samples
│ ├── App.config
│ ├── Calculator.cs
│ ├── Calendar2.cs
│ ├── Calendar.cs
│ ├── Pizza.cs
│ ├── Program.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── Takenet.Textc.Samples.csproj
│ └── Takenet.Textc.Samples.v2.ncrunchproject
├── Takenet.Textc.sln
├── Takenet.Textc.UnitTests
│ ├── app.config
│ ├── packages.config
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ ├── RequestContextTests.cs
│ ├── Takenet.Textc.UnitTests.csproj
│ ├── Takenet.Textc.UnitTests.v2.ncrunchproject
│ ├── TextProcessorTests.cs
│ └── Types
│ ├── DoubleMetaphoneWordTokenTypeTests.cs
│ ├── LevenshteinDistanceTextTokenTypeTests.cs
│ ├── SoundexWordTokenTypeTests.cs
│ ├── TextTokenTypeTests.cs
│ └── TokenTypeTestsBase.cs
└── Takenet.Textc.v2.ncrunchsolution
18 directories, 98 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论