在这里插入图片描述

文本分析是常见的算法应用场景。基于 Kotlin Multiplatform(kmp)与 openharmony,我们实现了一个轻量级的文本统计分析工具:输入文本内容,即可获得字数、行数、字符类型分布和高频词等统计信息,并通过 ArkTS 面板进行可视化呈现。本文包含简洁的 Kotlin 算法实现、JavaScript 桥接与 ArkTS UI 代码。

Kotlin 文本统计分析引擎

@JsExport
fun textStatsAnalyzer(inputData: String): String {
    val sanitized = inputData.trim()
    if (sanitized.isEmpty()) {
        return "❌ 输入为空,请输入需要分析的文本内容"
    }
    
    val lines = sanitized.lines()
    val totalChars = sanitized.length
    val totalWords = sanitized.split(Regex("\\s+")).filter { it.isNotBlank() }.size
    val linesCount = lines.size
    val nonEmptyLines = lines.count { it.trim().isNotEmpty() }
    
    // 字符类型统计
    val digitCount = sanitized.count { it.isDigit() }
    val letterCount = sanitized.count { it.isLetter() }
    val spaceCount = sanitized.count { it.isWhitespace() }
    val punctuationCount = sanitized.count { !it.isLetterOrDigit() && !it.isWhitespace() }
    
    // 简单的高频词统计(取前5个)
    val words = sanitized.lowercase()
        .split(Regex("\\W+"))
        .filter { it.length > 1 }
        .groupingBy { it }
        .eachCount()
        .toList()
        .sortedByDescending { it.second }
        .take(5)
    
    val builder = StringBuilder()
    builder.appendLine("📝 文本统计分析报告")
    builder.appendLine("总字符数: $totalChars")
    builder.appendLine("总词数: $totalWords")
    builder.appendLine("总行数: $linesCount")
    builder.appendLine("非空行数: $nonEmptyLines")
    builder.appendLine("----- 字符类型分布 -----")
    builder.appendLine("数字: $digitCount")
    builder.appendLine("字母: $letterCount")
    builder.appendLine("空格: $spaceCount")
    builder.appendLine("标点符号: $punctuationCount")
    if (words.isNotEmpty()) {
        builder.appendLine("----- 高频词 Top 5 -----")
        words.forEachIndexed { index, (word, count) ->
            builder.appendLine("${index + 1}. $word (出现 $count 次)")
        }
    }
    
    return builder.toString().trim()
}

该 Kotlin 函数接收文本字符串,使用 Kotlin 标准库进行统计计算:count() 统计字符类型,split() 分词,groupingBy()eachCount() 统计词频。结果以文本形式返回,方便在 ArkTS 中展示。通过 @JsExport 标注,该函数可编译到 JavaScript,供 openharmony 端调用。

JavaScript 桥接函数

import { textStatsAnalyzer } from './hellokjs.js';

export function runTextStatsAnalysis(payload) {
  const normalized = typeof payload === 'string' ? payload.trim() : '';
  if (!normalized) {
    return '⚠️ 输入为空,请提供文本内容';
  }
  try {
    const report = textStatsAnalyzer(normalized);
    console.info('[text-stats] success', report.split('\n')[0]);
    return report;
  } catch (error) {
    console.error('[text-stats] failed', error);
    return `❌ 执行失败: ${error?.message ?? error}`;
  }
}

桥接层负责输入校验和异常捕获,调用 Kotlin 引擎并返回结果。

ArkTS 文本统计分析面板

import { textStatsAnalyzer } from './hellokjs';

@Component
struct TextStatsPanel {
  @State inputData: string = 'Kotlin Multiplatform (KMP) 是一个跨平台开发框架,可以在多个平台上共享代码。\nOpenHarmony 是一个开源操作系统,支持多种设备类型。';
  @State result: string = '';
  @State loading: boolean = false;

  execute() {
    this.loading = true;
    setTimeout(() => {
      this.result = textStatsAnalyzer(this.inputData);
      this.loading = false;
    }, 100);
  }
}

ArkTS UI 提供文本输入框、分析按钮和结果展示区域,用户可以输入文本并查看统计结果。

算法说明

本实现采用 Kotlin 标准库函数进行文本分析:

  • 字符统计:使用 count { predicate } 进行字符类型分类统计
  • 词频分析:使用 split(Regex("\\W+")) 分词,groupingBy().eachCount() 统计词频,时间复杂度为 O(n)
  • 行数统计:使用 lines() 分割行,count { it.trim().isNotEmpty() } 统计非空行

代码简洁高效,适合快速文本分析场景。

应用场景

该工具适用于文本内容分析场景,例如:文档字数统计、代码行数分析、文本内容概览、高频词提取等。通过 kmp 与 openharmony 的协同,可以在终端设备上快速完成文本统计分析,无需依赖大型文本处理工具。***

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐