我正在开发一个基于NLP的应用程序,它使用全局键盘钩子来读取按键。这是它的工作界面:
BIEngine.Hook.KeyboardListener KListener = new BIEngine.Hook.KeyboardListener();
private void Application_Startup(object sender, StartupEventArgs e)
{
KListener.KeyDown += new BIEngine.Hook.RawKeyEventHandler(KListener_KeyDown);
}
void KListener_KeyDown(object sender, BIEngine.Hook.RawKeyEventArgs args)
{
Trace.WriteLine(args.ToString());
}
现在我将用户的单词作为空格,回车符,制表符,句点等分隔的字母集。因此,如果用户输入他的软件窗口got today
,我将会得到
g
o
t
t..
那么最有效的方法是什么(因为这个应用程序将在后台不断运行)将这些字母连接起来形成单词sans the spaces和其他分隔符并对某些设置单词做出反应,例如,如果用户类型today
,它将被传递到NLP库,并向用户呈现某种反馈。
感谢您提出任何建议,代码等。
答案 0 :(得分:2)
我强烈建议您使用最简单的方法来完成您想要的操作,并且不要担心性能问题。众所周知,过早优化可能会耗费大量时间而且效益甚微。
如果你从不让字符串变得特别长(比如,~2000个字符)那么我建议你只需附加一个普通的ts(object)
,每当它长度超过100个字符时修剪它。我非常怀疑你能否从中观察到任何性能影响。只有当您遇到可测量的性能问题时(例如,您注意到在用户键入时,程序占用的CPU时间超过0.1%),您应该考虑对其进行优化。而且我打赌你会发现使用CPU的不是你的字符串连接,而是完全不同的东西。
为什么呢?因为如果你在出现问题之前尝试优化所有内容,那么你将永远无法完成实际的工作。大多数情况下,优化是不必要的。
说完这一切之后,按字符匹配字符串字符的最有效方法是使用有限状态机,但我觉得解释如何解决这个问题超出了这个问题的范围。
答案 1 :(得分:1)
查看你的帖子,我自动考虑使用写入而不是写入,但我不知道可能对你的实际配置产生什么影响。
这会让它保持在“同一条线”,但到底是什么?
您还可以在应用中插入块代码以执行可视或逻辑转换,然后显示或处理它。 这样,您就不必为应用启动过程添加额外的工作负载。