CoffeeScript或JavaScript中的基本NLP - Punkt tokenizaton,简单训练的贝叶斯模型 - 从哪里开始?

fis*_*000 8 javascript nlp user-experience tokenize coffeescript

我目前的网络应用程序项目需要一点NLP:

  • 通过Punkt和类似的方式将文本标记为句子;
  • 通过从属条款打破较长的句子(通常是逗号,除非它不是)
  • 一个贝叶斯模型适合分块段落,感觉均匀,没有孤儿或寡妇,也没有尴尬的分裂(可能)

......如果你有NLTK,那么这很大程度上是一件非常容易的事情- 我会这样做:应用程序后端是龙卷风上的Django; 你认为做这些事情不是问题.

但是,我必须以交互方式提供必须使用令牌化器的用户反馈,因此我需要对数据客户端进行令牌化.

现在我实际上正在使用NLTK,通过REST API调用Tornado进程来包装NLTK函数而不是其他任何东西.目前,延迟和并发等事情显然不是最优惠的w/r/t这个ad-hoc服务,礼貌地说.我想,我应该做的是,如果不自己重新实现这个功能的咖啡/ Java版本.

然而,从我所看到的情况来看,JavaScript并没有被认为很酷,足以累积出可以在C或Python(甚至是Erlang)中找到的非常网络特定的通用库schmorgasbörd.NLTK当然是任何人的衡量标准,但我只需要几个百分点的包装.

但是现在我处于一个十字路口 - 我必须加倍努力:

  • "学习科学JavaScript技术适合重新实现算法,我最好与Facebook好友"计划,或者:
  • 不那么有趣但更具决定性的可行性"通过电线进行标记化,但过度补偿速度和编程兴趣的缺点 - 通过将函数调用提升为强大的高性能Web服务架构典范,确保无沙滩球的用户体验, Facebook看起来像Google+"选项.

或完全不同的东西.我该怎么办?喜欢开始做事.这是我的问题.我愿意接受涉及非典型方法的解决方案 - 只要你的建议不令人反感(例如"使用Silverlight")和/或时间漩涡(例如"获得计算语言学博士你的troglodyte")我就是游戏.先感谢您.

Bla*_*sad 3

我认为,正如您在评论中所写,运行高效算法所需的数据量最终将阻止您在客户端执行操作。即使是基本处理也需要大量数据,例如二元/三元频率等。另一方面,符号方法也需要大量数据(语法规则、词典等)。根据我的经验,如果没有至少 3MB 到 5MB 的数据,就无法运行良好的 NLP 流程,我认为这对于当今的客户来说太大了。

所以我会通过网络做事。为此,我建议使用异步/推送方法,也许使用Faye或 Socket.io ?我相信只要用户在客户端等待服务器处理文本时不被卡住,您就可以实现完美且流畅的用户体验。