本文英文版
大家好,新年快乐!
每逢新春佳节,我们都会发一些新年祝福语给家人、朋友和同事,最常见的就是新年快乐,恭喜发财之类的,当然也会收到许多别人的祝福。笔者自从有了手机,每年除夕都会做这件事情,不发的话总感觉缺了点什么。众所周知,SAP HANA有文本分析功能,春节在家闲着无聊,一个念头闪过,SAP HANA可以分析新年祝福语吗?笔者做了一些测试,均以失败告终,但是好消息是我们可以在SAP HANA文本分析里面做定制化,从而让SAP HANA能够识别和分析新年祝福语。在本文中,笔者将和大家分享如何在SAP HANA里面定制化文本分析,让SAP HANA为我们送上新年祝福。 :wink:
在我们切入正题之前,让我们先看一个有趣的争论。大年初一当笔者打开Chrome的时候,出现了下面的Google doodle,呵呵,Google也和我们一起庆祝农历新年。 :lol: 不过现在已经看不到这个Google doodle了,如果大家还想回味一下的话,可以访问 Lunar New Year 2015 和 Google 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
我们将在该节讨论如何通过定制化文本分析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。
那么我们现在可以做什么呢?我们可以从 SAP HANA Text Analysis Extraction Customization Guide - SAP Library 中找到答案,该文件展示了如何定制化文本分析的解析。这里还有一个视频详细介绍了该方法 SAP HANA Academy - Text Analysis: 10. Custom Dictionaries - YouTube 下面就让我们自己来一步步实现。
步骤一:创建XS项目
步骤二:创建.hdbtextdict文件,即自定义词典。在该文件中,我们可以定义自己的 TA_TYPE(entity_category) 和 TA_TOKEN(entity_name)。比如,我们定义了"GREETING"这个entity_category, 定义了"新年快乐"和"恭喜发财"这两个entity_name。
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),然后引入我们的自定义词典。
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的祝福啦。 :smile:
当然,除了这两个祝福语之外还有许许多多祝福语,用户可以丰富自己的自定义词典,即.hdbtextdict文件.
我们知道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;
首先,笔者在原始表中添加了两条英语祝福,和我们原先两条中文祝福对应。 "新年快乐" 对应 "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字段。有了这个字段,我们可以非常方便的绑定情感和主题。那么下面让我们来具体看一下。
看起来SAP HANA完美支持了英语的情感分析,那么对于中文呢?别担心,我们依旧可以像在上节中定制化EXTRACTION_CORE一样来定制化EXTRACTION_CORE_VOICEOFCUSTOMER。因为中文是一种非空格语言(non-whitespace language), 我们需要查看 Sentiment Analysis Customization in Nonwhitespace Languages。那么我们想让SAP HANA也分析出来和英文类似的结果。
那么,让我们来尝试一下。
步骤一:创建自定义词典,即.hdbtextdict文件。该文件的XML结构和上节的 GREETING.hdbtextdict相同。但是在情感分析中,我们只能使用如下五种entity_category:
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) 然后引入我们的自定义词典。
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";
虽然我们可以在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";
现在我们就可以发现和英文差不多的分析结果了。SAP HANA在两条中文祝福语中都分析出了具体情感和主题。这就是我们想要的!
在本文中,我们定制化了两种SAP HANA文本分析的配置,EXTRACTION_CORE 和 EXTRACTION_CORE_VOICEOFCUSTOMER。通过对文本分析的定制化,我们在农历新年收到了来自SAP HANA正面情感的祝福。
希望这篇文章对大家理解SAP HANA的文本分析有所帮助。祝大家新年快乐,恭喜发财! :smile:
想获取更多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%...,请勿用于任何商业用途。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
34 | |
17 | |
16 | |
15 | |
11 | |
9 | |
8 | |
8 | |
8 | |
7 |