我目前的网络应用程序项目需要一点NLP:
...如果你有NLTK,那么这很大程度上是一项幼稚的任务 - 我做的有点:应用程序后端是龙卷风上的Django;你认为做这些事情不是问题。
但是,我必须以交互方式提供必须使用令牌化器的用户反馈,因此我需要对数据客户端进行令牌化。
现在我实际上正在使用NLTK,通过REST API调用Tornado进程来包装NLTK函数而不是其他任何东西。目前,延迟和并发等事情显然不是最优惠的w / r / t这个ad-hoc服务,礼貌地说。我想,我应该做的是,如果不自己重新实现这个功能的咖啡/ Java版本。
然而,从我所看到的情况来看,JavaScript并没有被认为很酷,足以累积出可以在C或Python(甚至是Erlang)中找到的非常网络特定的通用库schmorgasbörd。 NLTK当然是任何人的衡量标准,但我只需要几个百分点的包装。
但是现在我处于一个十字路口 - 我必须加倍努力:
或完全不同的东西。我该怎么办?喜欢开始做事。这是我的问题。我愿意接受涉及非典型方法的解决方案 - 只要你的建议不令人反感(例如“使用Silverlight”)和/或时间漩涡(例如“获得计算语言学博士你的troglodyte”)我就是游戏。先感谢您。
我认为,正如您在评论中所写的那样,高效算法运行所需的数据量最终将阻止您在客户端做事。甚至基本处理也需要大量数据,例如bigram / trigram频率等。另一方面,符号方法也需要重要的数据(语法规则,字典等)。根据我的经验,如果没有至少3MB到5MB的数据,你就无法运行良好的NLP流程,我认为这对于今天的客户来说太大了。
所以我会通过电线做事。为此我建议使用异步/推送方法,也许使用Faye或Socket.io?只要在客户端等待服务器处理文本时用户没有卡住,我确信您可以实现完美且流畅的用户体验。
node.js有一个非常好的自然语言处理叫做natural。它目前不是为在浏览器中运行而构建的,但作者have stated表示他们想要修复它。大部分甚至可能已经使用了browserify或Require.JS之类的东西。
我认为你应该部署一个单独的服务,独立于你的应用程序的其余部分,它完成大部分工作服务器端,但可以根据客户端接下来输入的内容向客户端发送多个选项。当我读到您的请求时,我会想到Google,Quora和Yelp等网站的搜索自动完成功能。您可能在搜索框中只输入了3或4个字符,但这些服务会根据他们认为您将在下次输入的内容发送多个查询建议。如果你动态地标记文本,你可以使用某种ngram模型(或其他更复杂的语言模型)来猜测句子何时结束,并告诉前端如何为k最有可能的未来结果做些什么。基本上有一个后端服务,可以预先计算/缓存大量的结果,并有一个半智能前端,可以检查用户输入的当前状态是否与后端发送的预测状态匹配几百毫秒之前和看似即时在客户面前做正确的事情,而不是挂断浏览器试图在那里做一些内存/计算密集型操作。
您提供的两个选项是 1)做一切客户端,由于缺少现有的nlp js库,可能会很快但很复杂
2)做一切可能更容易的服务器端,但使你的应用程序看起来对用户来说很滞后
我请你做
3)做好服务器端的所有事情,但提前考虑几个步骤,并向客户端发送多个选项,以便在更容易实现的地方完成工作,但客户感觉就像是瞬间发生的。