【问题标题】:Laravel database design for natural language processing on text用于文本自然语言处理的 Laravel 数据库设计
【发布时间】:2016-06-25 20:39:36
【问题描述】:

我有一个数据库设计问题。

我目前正在使用三种不同的 NLP 引擎(Stanford NLP、IBM Watson 和 OpinionFinder)对 Twitter 消息进行自然语言处理,以获取盘中股票数据。

Stanford NLP 和 OpinionFinder 都使用极性标志来表示情绪 - 正面、中性和负面。我可以在数据库中识别出这个-101

IBM Watson 对称为愤怒、厌恶、恐惧、快乐和悲伤的文本有五个不同的百分比(从 0 到 100),这可以存储为浮点数或整数(即0.9 或 90)。

每一天(标识为date,格式为YYYY-mm-dd)有三个情绪行,每个NLP引擎一个行。所以,可以有三个相同的symbol_iddate,这就是为什么我认为我还应该在复合唯一键中添加一个nlp_engine。我的计划是使用symbol_id date nlp_engine 作为复合唯一键。

对此的替代方法是,我还有一个 Prices 表,用于存储股票价格/期货数据,它具有以下格式:

id | date | symbol_id | ...

所以,我可以使用Symbols.id 引用Sentiments.prices_id 中的每一天,因为我只收集日内(每日)数据。

因此,我想创建一个名为 Sentiments 的表,其中包含以下列:

id | symbol_id | date | nlp_engine | anger | disgust | fear | joy | sadness | polarity | created_at | updated_at

解释:

id - 主键

symbol_id(包含我的股票代码的Symbols table 的外键+datenlp_engine 列的复合唯一键)

date - (symbol_idnlp_engine 的复合唯一键)

nlp_engine - (我应该为此使用字符串还是应该创建一个名为 NLPEngines 的新表并使用 nlp_engine_id?这也应该是具有 symbol_iddate 的复合唯一键)

anger - 浮动

disgust - 浮动

fear - 浮动

joy - 浮动

sadness - 浮动

polarity - 有符号整数,例如-101

我只是想对这个数据库设计提出一些批评 - 谢谢。

【问题讨论】:

    标签: php mysql database laravel


    【解决方案1】:

    您的数据结构听起来很可靠,但这取决于您将如何存储/检索这些数据。

    1. 此数据是计算的结果,如果它需要实时且是一次性的,您可能需要考虑使用更接近缓存存储或 NoSql 的东西。但同样,这取决于您手头的问题。

    2. Laravel 在单表继承方面不是特别灵活。您需要解析正确的类来处理不同引擎之间的交互。如果sentiments 表数据不需要进行规范化,那么您将把来自不同引擎的数据归类为一种没有意义的格式。您最好创建 3 个不同的表,每个引擎一个。

    但是,如果您绝对需要能够将多个引擎结果绑定到一个 Price,那么是的,我认为您采用了正确的方法。我建议使用访问器/修改器来规范化您的数据,这样您的应用程序的其余部分就不必知道如何去做。

    【讨论】:

    • 嗨,迪伦。我们只是对消息进行一次处理并保存到数据库一次——这不是实时的,因为我们现在只是在查看过去的数据,是的.. 我想知道这 3 个不同的 NLP 引擎是否将其存储在一个数据库中会很好,因为每个 NLP 引擎存储其值的方式略有不同。也许我应该按照你说的做 - 为每个引擎使用一个新表。
    猜你喜欢
    • 2016-07-19
    • 2015-07-23
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多