Skip to Content

本文英文版

大家好,新年快乐!

每逢新春佳节,我们都会发一些新年祝福语给家人、朋友和同事,最常见的就是新年快乐,恭喜发财之类的,当然也会收到许多别人的祝福。笔者自从有了手机,每年除夕都会做这件事情,不发的话总感觉缺了点什么。众所周知,SAP HANA有文本分析功能,春节在家闲着无聊,一个念头闪过,SAP HANA可以分析新年祝福语吗?笔者做了一些测试,均以失败告终,但是好消息是我们可以在SAP HANA文本分析里面做定制化,从而让SAP HANA能够识别和分析新年祝福语。在本文中,笔者将和大家分享如何在SAP HANA里面定制化文本分析,让SAP HANA为我们送上新年祝福。 😉

有趣的争论,到底哪种羊?

在我们切入正题之前,让我们先看一个有趣的争论。大年初一当笔者打开Chrome的时候,出现了下面的Google doodle,呵呵,Google也和我们一起庆祝农历新年。 😆 不过现在已经看不到这个Google doodle了,如果大家还想回味一下的话,可以访问 Lunar New Year 2015Google Doodle Rings in Chinese Lunar New Year. 那么有趣的争论到底是什么呢?大家知道,今年是羊年,中国人就叫羊年,可是老外弄不明白了,到底中国的羊年是哪一种羊呢?到底是公羊(Ram)、绵羊(Sheep)还是山羊(Goat)?哈哈,详见 Whatever Floats Your Goat: The 2015 Lunar New Year Animal Is Up For Debate : Code Switch : NPR

1.PNG

来自SAP HANA的祝福 – 定制化文本分析EXTRACTION_CORE

我们将在该节讨论如何通过定制化文本分析EXTRACTION_CORE来收到SAP HANA的祝福。首先,让我们看一下在没有定制化的情况下会发生什么。本文所有测试都基于 SAP HANA SPS 09 Rev. 91。


DROP SCHEMA TA CASCADE;
CREATE SCHEMA TA;
SET SCHEMA TA;
CREATE COLUMN TABLE TA_TABLE (
  ID INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
  CONTENT NVARCHAR(200),
  LANG NVARCHAR(2)
);
INSERT INTO TA_TABLE (CONTENT, LANG) VALUES ('新年快乐', 'ZH');
INSERT INTO TA_TABLE (CONTENT, LANG) VALUES ('恭喜发财', 'ZH');
CREATE FULLTEXT INDEX TA_INDEX ON TA_TABLE (CONTENT)
CONFIGURATION 'EXTRACTION_CORE'
LANGUAGE COLUMN LANG
TEXT ANALYSIS ON;
SELECT * FROM "$TA_TA_INDEX";



通过上面的SQL语句,我们首先建了一张带有语言字段(LANG)的原始表,接着插入了两条祝福语,新年快乐和恭喜发财,然后我们创建了一个全文索引来做文本分析,该全文索引基于原始表中的CONTENT字段,配置为EXTRACTION_CORE。大家可以从 Text Analysis – SAP HANA Text Analysis Developer Guide – SAP Library 找到目前所有可用的配置。下图是我们查询文本分析的结果表,大家可以从 Structure of the $TA Table – SAP HANA Text Analysis Developer Guide – SAP Library 找到所有列的解释。从图中可以发现,SAP HANA没有解析出任何内容,原因很简单,因为在SAP HANA预先定义的 predefined entity types 里面没有GREETING。

2.PNG

那么我们现在可以做什么呢?我们可以从 SAP HANA Text Analysis Extraction Customization Guide – SAP Library 中找到答案,该文件展示了如何定制化文本分析的解析。这里还有一个视频详细介绍了该方法 SAP HANA Academy – Text Analysis: 10. Custom Dictionaries – YouTube 下面就让我们自己来一步步实现。

步骤一:创建XS项目

/wp-content/uploads/2015/03/3_1_655444.png

步骤二:创建.hdbtextdict文件,即自定义词典。在该文件中,我们可以定义自己的 TA_TYPE(entity_category) 和 TA_TOKEN(entity_name)。比如,我们定义了”GREETING”这个entity_category, 定义了”新年快乐”和”恭喜发财”这两个entity_name。

/wp-content/uploads/2015/03/3_2_655445.png

GREETING.hdbtextdict


<?xml version="1.0" encoding="UTF-8"?>
<dictionary xmlns="http://www.sap.com/ta/4.0">
  <entity_category name="GREETING">
  <entity_name standard_form="新年快乐">
  </entity_name>
  <entity_name standard_form="恭喜发财">
  </entity_name>
  </entity_category>
</dictionary>



步骤三:创建.hdbtextconfig文件,即自定义配置。在该文件中,我们需要引入步骤二中的.hdbtextdict文件。本例中,我们复制了SAP HANA标准的 EXTRACTION_CORE (sap.hana.ta.config::EXTRACTION_CORE),然后引入我们的自定义词典。

/wp-content/uploads/2015/03/3_3_655446.png

EXTRACTION_CORE_CUSTOM.hdbtextconfig


...
    <!-- List of repository objects containing Text Analysis extraction dictionaries. -->
    <property name="Dictionaries" type="string-list">
        <string-list-value>TACustom::GREETING.hdbtextdict</string-list-value>
    </property>
...



步骤四:使用步骤三中的自定义配置来创建全文索引。


DROP FULLTEXT INDEX TA_INDEX;
CREATE FULLTEXT INDEX TA_INDEX ON TA_TABLE (CONTENT)
CONFIGURATION 'TACustom::EXTRACTION_CORE_CUSTOM'
LANGUAGE COLUMN LANG
TEXT ANALYSIS ON;
SELECT * FROM "$TA_TA_INDEX";



如下图所示,现在我们可以收到来自SAP HANA的祝福啦。 🙂

/wp-content/uploads/2015/03/4_1_655447.png

当然,除了这两个祝福语之外还有许许多多祝福语,用户可以丰富自己的自定义词典,即.hdbtextdict文件.

来自SAP HANA的情感 – 定制化文本分析EXTRACTION_CORE_VOICEOFCUSTOMER

我们知道SAP HANA文本分析中最强的武器是情感分析。现在我们已经得到了SAP HANA的祝福,那么对于这些祝福,SAP HANA又会分析出什么情感呢?出于好奇,笔者尝试了英语和中文两种语言,下面就让我们一起来看一下。


INSERT INTO TA_TABLE (CONTENT, LANG) VALUES ('Happy new year', 'EN');
INSERT INTO TA_TABLE (CONTENT, LANG) VALUES ('Congratulations for prosperity', 'EN');
SELECT * FROM TA_TABLE;



5.PNG

首先,笔者在原始表中添加了两条英语祝福,和我们原先两条中文祝福对应。 “新年快乐” 对应 “Happy new year”,  “恭喜发财” 对应 “Congratulations for prosperity”。 然后我们这次创建配置为 “EXTRACTION_CORE_VOICEOFCUSTOMER” 的全文索引,让SAP HANA来做情感分析。


DROP FULLTEXT INDEX TA_INDEX;
CREATE FULLTEXT INDEX TA_INDEX ON TA_TABLE (CONTENT)
CONFIGURATION 'EXTRACTION_CORE_VOICEOFCUSTOMER'
LANGUAGE COLUMN LANG
TEXT ANALYSIS ON;
SELECT * FROM "$TA_TA_INDEX";



从如下的分析结果,我们可以发现SAP HANA从两条新插入的英语祝福语中成功分析出了情感,但是原先的两条中文祝福语却没有分析出情感。深入分析的话,SAP HANA在两条英语祝福语中分析出了具体是哪种情感(红框标注)和情感所形容的具体主题。另外还可以发现在 SAP HANA SPS09中有一个改进,那就是TA_PARENT字段。有了这个字段,我们可以非常方便的绑定情感和主题。那么下面让我们来具体看一下。

  • 对于 “Happy new year”, “Happy” 是一个弱正面情感(weak positive sentiment)。然后为什么快乐呢?为新年 “new year”。
  • 对于 “Congratulations for prosperity”, “Congratulations” 也是一个弱正面情感(weak positive sentiment)。然后恭喜什么呢?恭喜发财 “prosperity”.

/wp-content/uploads/2015/03/6_1_655449.png


看起来SAP HANA完美支持了英语的情感分析,那么对于中文呢?别担心,我们依旧可以像在上节中定制化EXTRACTION_CORE一样来定制化EXTRACTION_CORE_VOICEOFCUSTOMER。因为中文是一种非空格语言(non-whitespace language), 我们需要查看 Sentiment Analysis Customization in Nonwhitespace Languages。那么我们想让SAP HANA也分析出来和英文类似的结果。

  • 对于 “新年快乐”, “新年” 等同于 “new year”, “快乐” 等同于 “happy”。
  • 对于 “恭喜发财”, “恭喜” 等同于 “congratulations”, “发财” 等同于 “prosperity”。

那么,让我们来尝试一下。


步骤一:创建自定义词典,即.hdbtextdict文件。该文件的XML结构和上节的 GREETING.hdbtextdict相同。但是在情感分析中,我们只能使用如下五种entity_category:

  • CustomTopic
  • CustomPositive
  • CustomNegative
  • CustomNeutral
  • CustomProblem

/wp-content/uploads/2015/03/7_2_655450.png

GREETING_VOC.hdbtextdict


<?xml version="1.0" encoding="UTF-8"?>
<dictionary xmlns="http://www.sap.com/ta/4.0">
  <entity_category name="CustomTopic">
  <entity_name standard_form="新年">
  </entity_name>
  <entity_name standard_form="发财">
  </entity_name>
  </entity_category>
  <entity_category name="CustomPositive">
  <entity_name standard_form="快乐">
  </entity_name>
  <entity_name standard_form="恭喜">
  </entity_name>
  </entity_category>
</dictionary>



步骤二:创建自定义配置,即.hdbtextconfig文件。和上节的.hdbtextconfig文件类似,我们先复制SAP HANA标准配置EXTRACTION_CORE_VOICEOFCUSTOMER (sap.hana.ta.config::EXTRACTION_CORE_VOICEOFCUSTOMER) 然后引入我们的自定义词典。

/wp-content/uploads/2015/03/7_3_655451.png

EXTRACTION_CORE_VOC_CUSTOM.hdbtextconfig


...
<!-- List of Text Analysis extraction dictionaries for Sentiment Analysis. -->
    <property name="Dictionaries" type="string-list">
...
      <string-list-value>TACustom::GREETING_VOC.hdbtextdict</string-list-value>
    </property>
...



步骤三:使用步骤二中的自定义配置来创建全文索引。


DROP FULLTEXT INDEX TA_INDEX;
CREATE FULLTEXT INDEX TA_INDEX ON TA_TABLE (CONTENT)
CONFIGURATION 'TACustom::EXTRACTION_CORE_VOC_CUSTOM'
LANGUAGE COLUMN LANG
TEXT ANALYSIS ON;
SELECT * FROM "$TA_TA_INDEX";



/wp-content/uploads/2015/03/8_1_655452.png

虽然我们可以在TA_TYPE字段中找到 “CustomTopic” and “CustomPositive”,分析的结果不完全正确,分析结果不太满意。我们需要的是类似英语的那种分析结果。那么为什么分析结果会不同呢?原因是我们只定义了自定义词典,但是对于情感分析来说还有其他因素,比如解析规则等。为了简便,我们可以在两条中文祝福语中稍加修改来达到目的。


INSERT INTO TA_TABLE (CONTENT, LANG) VALUES ('新年很快乐', 'ZH');
INSERT INTO TA_TABLE (CONTENT, LANG) VALUES ('恭喜你发财', 'ZH');
SELECT * FROM "$TA_TA_INDEX";



/wp-content/uploads/2015/03/9_1_655453.png

现在我们就可以发现和英文差不多的分析结果了。SAP HANA在两条中文祝福语中都分析出了具体情感和主题。这就是我们想要的!

总结

在本文中,我们定制化了两种SAP HANA文本分析的配置,EXTRACTION_CORE 和 EXTRACTION_CORE_VOICEOFCUSTOMER。通过对文本分析的定制化,我们在农历新年收到了来自SAP HANA正面情感的祝福。


希望这篇文章对大家理解SAP HANA的文本分析有所帮助。祝大家新年快乐,恭喜发财! 🙂

/wp-content/uploads/2015/03/happynewyear_655454.gif

/wp-content/uploads/2015/03/gongxi_655455.gif

Image source

想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

转载本文章请注明作者和出处http://scn.sap.com/community/chinese/hana/blog/2015/03/01/%E6%9D%A5%E8%87%AAsap-hana%E7%9A%84%E6%96%B0%E5%B9%B4%E7%A5%9D…,请勿用于任何商业用途。

To report this post you need to login first.

2 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply