kmp openharmony 文本统计与分析
本文介绍了一个基于Kotlin Multiplatform(kmp)和openharmony实现的轻量级文本统计分析工具。该工具通过Kotlin算法引擎实现文本分析功能,包括统计字数、行数、字符类型分布和提取高频词等,并通过ArkTS面板进行可视化展示。文章详细展示了Kotlin文本分析算法实现、JavaScript桥接函数以及ArkTS UI组件代码,说明了如何利用Kotlin标准库函数进行高效

文本分析是常见的算法应用场景。基于 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
更多推荐
所有评论(0)