我最近开始使用斯坦福大学的CoreNLP进行自然语言处理(NLP)的实验,并且想知道为文本挖掘应用程序之类的东西存储NLP解析数据的一些标准方法是什么?
我认为可能有趣的一种方法是将子级存储为邻接列表,并充分利用递归查询(Postgres支持此功能,我发现它确实很好用)。
但我认为,根据多年来从事该领域工作的人员所进行的分析类型,可能有许多标准方法可以执行此操作。那么NLP解析数据的标准持久性策略是什么?如何使用它们?
我最近开始使用斯坦福大学的CoreNLP进行自然语言处理(NLP)的实验,并且想知道为文本挖掘应用程序之类的东西存储NLP解析数据的一些标准方法是什么?
我认为可能有趣的一种方法是将子级存储为邻接列表,并充分利用递归查询(Postgres支持此功能,我发现它确实很好用)。
但我认为,根据多年来从事该领域工作的人员所进行的分析类型,可能有许多标准方法可以执行此操作。那么NLP解析数据的标准持久性策略是什么?如何使用它们?
Answers:
我曾经使用过NLP工具包,但遇到了您所描述的问题。我认为(至少)有两种方法:
(隐式方法),使用备注
在函数是一流对象的编程语言(例如Lua,Python或Perl 1)中,一旦为给定值计算了一个函数的值,就可以通过在运行时将函数替换为其计算值来实现自动记忆参数集。
这是我使用的方法,可以快速实施。缺点是,某些较大的数据结构将保留在磁盘上,虽然加载比重新计算快几个数量级,但仍然要花时间。
(显式),请使用一些数据库(无论是关系数据库还是面向文档的数据库)来存储您将来可能关心的所有结果。一开始需要更多的注意,但从长远来看会有所收获。
可能感兴趣:
编辑:最近我用于多步长时间运行计算的另一件事是一个工作流框架,其中有数十个。持久性并不是真的,但持久性是工作流程中的一步。我正在为此尝试luigi,例如Hadoop和Postgres帮助器类,它可以消除很多样板代码。
一个好的策略是使用一个良好的Reduce / Map特色数据库,也像NOSQL数据库(如MongoDB或CouchDB)一样。
这些数据库允许创建用于映射术语和邻接关系的简单编码规则,以及用于减少(也称为“分组”)信息的简单编码规则。
您可以从这里开始:
http : //www.mongodb.org/
http://wiki.apache.org/couchdb/