当前位置:天才代写 > tutorial > JAVA 教程 > 利用InfoSphere Streams的自界说Java 运算符和ICU4J实现及时音译

利用InfoSphere Streams的自界说Java 运算符和ICU4J实现及时音译

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:551

副标题#e#

集成 Java 音译模块和 InfoSphere Streams 的自界说 Java 运算符

简介

在生长型市场区域中,任何办理方案提供商面对的首要挑战是可用数据的方言和语言学的纷歧致性。由于生长型市场区域中拥有包罗英语在内的多种官方语言,所以地域的语言标记逐渐嵌入到了英语标记中。因此,您首先需要执行音译来实现数据中的一致性,然后再继承执行处理惩罚/文天职析。

假如利用预定的语言,那么数据音译会为您提供更统一、更一致的功效。本文将先容利用 InfoSphere Streams 的自界说 Java 运算符和 ICU4J 库执行及时音译时所涉及的步调。IBM InfoSphere Streams 提供了执行及时阐明流程的成果,提供了各类东西包和适配器,答允您及时毗连到各类资源并从中互换数据,在数据上执行操纵。及时音译的高级实现架构如图 1 所示。

图 1. 及时音译高级办理方案图

操作InfoSphere Streams的自定义Java 运算符和ICU4J实现实时音译

先决条件

业务先决条件:该当具有操作 InfoSphere Streams 设计和运行 Streams Processing Language (SPL) 应用措施功课的根基技术,并能操作 Java 编程的中级技术。源语言必需利用 UTF-8、UTF-16 名目举办编码。

软件先决条件:InfoSphere Streams(2.0 或更高版本),以及 ICU4J 库。

建设音译自界说 Java 运算符

执行以下步调,建设音译自界说 Java 运算符。

凭据 Streams 信息中心 中的描写搭建用于 Java 运算符开拓的 Streams Studio 情况。

搭建好情况之后,利用 Java 运算符中的 ICU4J 库编写音译逻辑。ICU4J 库的 jar 文件应导入到项目事情区中。SPL 中的原始 Java 运算符的布局如清单 1 所示。

清单 1. InfoSphere Streams 中 Java 运算符的名目
public synchronized void initialize(OperatorContext context);
                            
public void process(StreamingInput<Tuple> inputStream, Tuple tuple);
                            
public void processPunctuation(StreamingInput<Tuple> inputStream,
            StreamingData.Punctuation marker);
                            
public void allPortsReady();
                            
public void shutdown();

运算符的逻辑应位于流程函数内。清单 2 显示了一个样例代码。
清单 2. 利用 Java 运算符执行音译的样例代码

public String toBaseCharacters(final String sText) {
        if (sText == null || sText.length() == 0)
                return sText;
                            
        final char[] chars = sText.toCharArray();
        final int iSize = chars.length;
        final StringBuilder sb = new StringBuilder(iSize);
        for (int i = 0; i < iSize; i++) {
                String sLetter = new String(new char[] { chars[i] });
                sLetter = Normalizer.normalize(sLetter, Normalizer.NFKD);
                            
                try {
                byte[] bLetter = sLetter.getBytes("UTF-8");
                sb.append((char) bLetter[0]);
                } catch (UnsupportedEncodingException e) {
                }
        }
        return sb.toString();
}
                            
public final synchronized void process(final StreamingInput input,
                        final Tuple tuple) throws Exception  {
        try
        {
                OperatorContext ctxt =getOperatorContext();
                            
                Transliterator t=Transliterator.getInstance(
            ctxt.getParameterValues("sourceLanguage").get(0)+"-"+
                ctxt.getParameterValues("destLanguage")
                .get(0));               
                StreamingOutput<OutputTuple> output = getOutput(0);
                OutputTuple outputTuple = output.newTuple();
                boolean  reject      = false;
                //read the source tuple
                String value =  tuple.getString("inp");
                            
                if ((value == null)) {
                throw(new Exception("Input is null"));
                } else {
                outputTuple.setString("TransliteratedText",
                toBaseCharacters(t.transliterate(value.toString())));
                }
                output.submit(outputTuple);                        
            }
            catch(Exception e)
            {
                            
            }
            .....


#p#副标题#e#

读取输入文本,举办音译,然后提交给输出端口,请留意,应将输入作为 ustring 来读取,这是 Java 运算符中的字符串。

建设并编译好运算符代码后,设置运算符模子,使之可供 SPL 应用措施利用。

#p#分页标题#e#

对付每一个新运算符而言,按照需要指定的整体设置需求建设相应的运算符模子。运算符模子的一个片断如图 2 所示。

图 2. 外部的库依赖干系

操作InfoSphere Streams的自定义Java 运算符和ICU4J实现实时音译

运算符中需要为各个代码小节配置的值如表 1 所示。

操作InfoSphere Streams的自定义Java 运算符和ICU4J实现实时音译

通过 SPL 在 InfoSphere Streams 应用措施中利用自界说的 Java 运算符

思量这样一个场景,通过阐明博客帖子和社交媒体社区帖子,您但愿相识什么样的人群在接头您的产物,该场景是专门针对您的产物而建设。您的产物的客户已经利用处所方言表达了他们的意见,可是阐明东西很难领略这些客户的立场,因为文天职析法则并不合用于所有方言。

为了办理这一挑战,可在源语言上执行音译,然后举办阐明。清单 3 向您展示了如安在执行文天职析之前执行音译。音译运算符具有两个参数:源语言和方针语言。假如源语言已知,则需要对其举办相应的配置。假如输入语言未知,可能具有多种语言标记,那么将其配置为 Any 会更安详一些。

查察本栏目

清单 3. 利用自界说 Java 运算符执行音译的 SPL 样例应用措施
composite Main {
                    
        graph
        stream <rstring LingualInput> SourceBlogs = InetSource ()
        {
                param
                URIList:
                        ["http://localblogs.com/fashionwear"];
                initDelay: 5u;
                incrementalFetch: true;
                fetchIntervalSeconds: 60u;
        }   
                    
        stream <ustring TransliteratedText> TransliteratedOutput=
        Transliterate(LingualInput)
        {
                param
                        sourceLanguage:"Any";
                        destLanguage:"Latin";
        }       
                    
    stream <rstring text,rstring product,rstring sentiment,rstring sentiment_text> 
        as sentiment = TextExtractor(TransliteratedOutput)
        {
                param
                        AQLFile: "getsentiment.aql";
    }
        () as RssResults = FileSink(sentiment)
        {
            param
                    file: "output.txt";
                    format: csv;
                    hasDelayField: false;
                } 
                    
}

#p#副标题#e#

思量从 URL 中读取输入。在这里,客户对 xyz 公司的产物表达了负面的情绪。此时的挑战就是输入,这是一个多语言的文本。

xyz suit

举办音译之后,输入就转换为英语名目。

mujhe xyz suit pasanda nahin aya

音译输出为您提供了一个运行文天职析的通用平台。在文本中,pasand 和 nahin 都包括负面情绪。因此,这个输入连同 AQL 文件中的法则一起通报给 Text Extractor 运算符,AQL 文件中的法则设置为处理惩罚音译后的地域方言要害词,好比 pasand、nahin 等。因此,Text Extractor 的输出将如下所示。

mujhe xyz suit pasanda nahin aya, negative, nahin aaya

因此,您可以从一个多语言输入中乐成提取客户的情绪。

ICU4J 简介

ICU4J 提供一组支持区域化的种别。支持区域化成果的主要种别是 Transliterator 和 Normalizer。

Transliterator 类提供了一个 transliterate() 函数,该函数将字符串从一种语言转换为另一种语言。音译函数没有状态,也就是说函数中不保存以前的挪用信息。利用 transliterate() 函数之前,需要为 Transliterator 实例提供所需的源语言和方针语言来将其初始化,并用破折号 (-) 脱离它们。譬喻:Transliterator.getInstance("Hindi-Latin");

Normalizer 类提供将音译函数的输出尺度化为组及名目或解析名目标函数。譬喻:拉丁字符 A-acute 等就可尺度化为组及名目标单个 A,可能解析名目标两个 A (AA)。

ICU4J 支持的一些语言转换如下所示。

ASCII-Latin

Accents-Any

Amharic-Latin/BGN

Arabic-Latin

Bengali-Devanagari

Bengali-Latin

Kannada-Latin

Hindi-Latin

Telugu-Latin

Tamil-Latin

异常环境

InfoSphere Streams 提供了一个调试措施,可以支持及时应用措施 Streams Debugger。Streams Debugger 提供的呼吁和选项可轻松用于跟踪和验证输出。

竣事语

本文提出了如何利用 ICU4J 库执行音译的问题,以及人们在构建原始 Java 运算符时必需执行的各类设置配置。音译将充当办理多种语言挑战的要害组件,并为运行文天职析提供了一个配合基本。

 

    关键字:

天才代写-代写联系方式