首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

整合 InfoSphere Streams 自訂 Java 運算子與 ICU4J 實現即時音譯處理

     編輯:Java 相關知識

背景動機

成長型市場常存在多語言混雜資料(如印地語夾雜拉丁字母),文本分析前需先統一音譯至目標文字(如拉丁字母),再進行情感分析等後續處理。

架構概覽

即時音譯高層架構圖

資料流:來源 → 音譯運算子 → 文本分析 → 輸出沉澱。

先決條件

  • InfoSphere Streams 2.0+,具備 SPL 應用開發基礎。
  • Java 中級程式能力。
  • ICU4J 函式庫(com.ibm.icu)。
  • 輸入資料需為 UTF-8/UTF-16 編碼。

建立自訂 Java 運算子

  1. 於 Streams Studio 配置 Java 運算子開發環境。
  2. 實作 com.ibm.streams.operator.Operator 介面,核心邏輯於 process():
public class TransliterateOperator extends AbstractOperator {
    @Override
    public void process(StreamingInput input, Tuple tuple) {
        OperatorContext ctx = getOperatorContext();
        String srcLang = ctx.getParameterValues("sourceLanguage").get(0);
        String dstLang = ctx.getParameterValues("destLanguage").get(0);
        Transliterator t = Transliterator.getInstance(srcLang + "-" + dstLang);

        String text = tuple.getString("inp");
        String result = toBaseCharacters(t.transliterate(text));

        StreamingOutput out = getOutput(0);
        OutputTuple ot = out.newTuple();
        ot.setString("TransliteratedText", result);
        out.submit(ot);
    }

    private String toBaseCharacters(String s) {
        if (s == null || s.isEmpty()) return s;
        StringBuilder sb = new StringBuilder();
        for (char c : s.toCharArray()) {
            String n = Normalizer.normalize(String.valueOf(c), Normalizer.Form.NFKD);
            try { sb.append(new String(n.getBytes("UTF-8"), 0, 1)); }
            catch (UnsupportedEncodingException ignored) {}
        }
        return sb.toString();
    }
}

運算子模型配置

  • 指定外部依賴 icu4j.jar。
  • 定義參數 sourceLanguage、destLanguage(如 Hindi-Latin)。
  • 輸入連接埠型別 ustring,輸出 ustring TransliteratedText。

外部庫依賴配置

運算子參數設定

SPL 應用程式範例

composite Main {
    graph
    stream SourceBlogs = InetSource() {
        param URIList: ["https://localblogs.com/fashionwear"];
        initDelay: 5.0; incrementalFetch: true; fetchIntervalSeconds: 60.0;
    }
    stream TransliteratedOutput = Transliterate(SourceBlogs) {
        param sourceLanguage: "Any"; destLanguage: "Latin";
    }
    stream Sentiment = TextExtractor(TransliteratedOutput) {
        param AQLFile: "getsentiment.aql";
    }
    () as Sink = FileSink(Sentiment) {
        param file: "output.txt"; format: csv; hasDelayField: false;
    }
}

ICU4J 核心類別

  • Transliterator:getInstance("Hindi-Latin") 取得實例,transliterate() 執行轉換,無狀態。
  • Normalizer:NFKD 分解格式,將重音字元拆解為基底字元+組合符號。

支援語言對:Hindi-Latin、Arabic-Latin、Kannada-Latin、Telugu-Latin、Tamil-Latin 等。

實際效果示範

輸入:  "mujhe xyz suit pasanda nahin aya"  (印地語羅馬拼音)
音譯:  "mujhe xyz suit pasanda nahin aya"  (已為拉丁字母,Normalizer 處理重音)
分析:  偵測到 "nahin"(否定詞)→ 情感:negative

結語

自訂 Java 運算子結合 ICU4J,提供可部署於 InfoSphere Streams 的即時音譯能力,解決多語言文本分析的前置一致性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved