Flutter插件kss_dart的介绍与使用

Flutter插件kss_dart的介绍与使用

Korean Sentence Splitter 是一个用于将韩文文本分割成句子的库。该库基于启发式算法实现,可以处理不同类型的文本,包括正式文章和非正式文章。

示例

示例

1. 安装Flutter插件kss_dart

pubspec.yaml 文件中添加以下依赖:

dependencies:
  ...
  kss_dart:

2. 使用 splitSentences 方法

splitSentences 是 Kss 的核心方法,用于将文本分割成句子。

2.1 使用启发式算法分割句子

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "회사 동료 분들과 다녀왔는데 분위기도 좋고 음식도 맛있었어요 다만, 강남 토끼정이 강남 쉑쉑버거 골목길로 쭉 올라가야 하는데 다들 쉑쉑버거의 유혹에 넘어갈 뻔 했답니다 강남역 맛집 토끼정의 외부 모습.";
var result = kss.splitSentences(text);
print(result);
// 输出: ["회사 동료 분들과 다녀왔는데 분위기도 좋고 음식도 맛있었어요,", "다만, 강남 토끼정이 강남 쉑쉑버거 골목길로 쭉 올라가야 하는데 다들 쉑쉑버거의 유혹에 넘어갈 뻔 했답니다", "강남역 맛집 토끼정의 외부 모습."]

2.2 不使用启发式算法分割句子

如果你的文章标点符号规则相对较好,建议设置 useHeuristic = false(默认值为 true)。

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "미리 예약을 할 수 있는 시스템으로 합리적인 가격에 여러 종류의 생선, 그리고 다양한 부위를 즐길 수 있기 때문이다. 계절에 따라 모둠회의 종류는 조금씩 달라지지만 자주 올려주는 참돔 마스까와는 특히 맛이 매우 좋다. 일반 모둠회도 좋지만 좀 더 특별한 맛을 즐기고 싶다면 특수 부위 모둠회를 추천한다 제철 생선 5~6가지 구성에 평소 접하지 못했던 부위까지 색다르게 즐길 수 있다.";
var result = kss.splitSentences(text, useHeuristic: false);
print(result);
// 输出: ["미리 예약을 할 수 있는 시스템으로 합리적인 가격에 여러 종류의 생선, 그리고 다양한 부위를 즐길 수 있기 때문이다.", "계절에 따라 모둠회의 종류는 조금씩 달라지지만 자주 올려주는 참돔 마스까와는 특히 맛이 매우 좋다.", "제철 생선 5~6가지 구성에 평소 접하지 못했던 부위까지 색다르게 즐길 수 있다."]

2.3 处理括号和引号

Kss 提供了一种技术,不将括号或引号内的句子分割。

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "그가 말했다. '거기는 가지 마세요. 위험하니까요. 알겠죠?' 그러자 그가 말했다. 알겠어요.";
var result = kss.splitSentences(text);
print(result);
// 输出: ["그가 말했다.", "'거기는 가지 마세요. 위험하니까요. 알겠죠?' 그러자 그가 말했다.", "알겠어요."]

2.3.1 优化递归

为了优化递归,可以通过参数 maxRecoverStepmaxRecoverLength 来调整。

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "VERY_LONG_TEXT";
var result = kss.splitSentences(text, useHeuristic: true, useQuotesBracketProcessing: true, maxRecoverStep: 5, maxRecoverLength: 20000);
print(result);
// 输出: [...]

2.3.2 关闭括号和引号处理

如果需要关闭括号和引号处理,可以设置 useQuotesBracketsProcessing = false

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "그가 말했다. (거기는 가지 마세요. 위험하니까요. 알겠죠?) 그러자 그가 말했다. 알겠어요.";
var result = kss.splitSentences(text);
print(result);
// 输出: ["그가 말했다.", "(거기는 가지 마세요. 위험하니까요. 알겠죠?) 그러자 그가 말했다.", "알겠어요."]

3. 使用 splitChunks 方法

splitChunks 方法将文本分割成长度不超过 maxLength 的块。

3.1 设置最大长度

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "NoSQL이라고 하는 말은 No 'English'라고 하는 말과 마찬가지다. 세상에는 영어 말고도 수많은 언어가 존재한다. MongoDB에서 사용하는 쿼리 언어와 CouchDB에서 사용하는 쿼리 언어는 서로 전혀 다르다. 그럼에도 이 두 쿼리 언어는 같은 NoSQL 카테고리에 속한다. 어쨌거나 SQL이 아니기 때문이다. 또한 NoSQL이 No RDBMS를 의미하지는 않는다. BerkleyDB같은 예외가 있기 때문이다. 그리고 No RDBMS가 NoSQL인 것도 아니다. SQL호환 레이어를 제공하는 KV-store라는 예외가 역시 존재한다. 물론 KV-store의 특징상 range query를 where절에 넣을 수 없으므로 완전한 SQL은 못 되고 SQL의 부분집합 정도를 제공한다.";
var result = kss.splitChunks(text, 128);
print(result);
// 输出: [ChunkWithIndex(start = 0, text = "..."), ChunkWithIndex(start = 124, text = "..."), ...]

3.2 跨块重叠句子

如果 overlaptrue,则文本将类似于滑动窗口的方式分块。

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "NoSQL이라고 하는 말은 No 'English'라고 하는 말과 마찬가지다. 세상에는 영어 말고도 수많은 언어가 존재한다. MongoDB에서 사용하는 쿼리 언어와 CouchDB에서 사용하는 쿼리 언어는 서로 전혀 다르다. 그럼에도 이 두 쿼리 언어는 같은 NoSQL 카테고리에 속한다. 어쨌거나 SQL이 아니기 때문이다. 또한 NoSQL이 No RDBMS를 의미하지는 않는다. BerkleyDB같은 예외가 있기 때문이다. 그리고 No RDBMS가 NoSQL인 것도 아니다. SQL호환 레이어를 제공하는 KV-store라는 예외가 역시 존재한다. 물론 KV-store의 특징상 range query를 where절에 넣을 수 없으므로 완전한 SQL은 못 되고 SQL의 부분집합 정도를 제공한다.";
var result = kss.splitChunks(text, 128, overlap: false, useHeuristic: true);
print(result);
// 输出: [ChunkWithIndex(start = 0, text = "..."), ChunkWithIndex(start = 43, text = "..."), ...]

3.3 使用 splitSentences 中的所有选项

你可以使用 splitSentences 中的所有选项。

import 'package:kss_dart/kss_dart.dart';

Kss kss = Kss();
String text = "NoSQL이라고 하는 말은 No 'English'라고 하는 말과 마찬가지다. 세상에는 영어 말고도 수많은 언어가 존재한다. MongoDB에서 사용하는 쿼리 언어와 CouchDB에서 사용하는 쿼리 언어는 서로 전혀 다르다. 그럼에도 이 두 쿼리 언어는 같은 NoSQL 카테고리에 속한다. 어쨌거나 SQL이 아니기 때문이다. 또한 NoSQL이 No RDBMS를 의미하지는 않는다. BerkleyDB같은 예외가 있기 때문이다. 그리고 No RDBMS가 NoSQL인 것도 아니다. SQL호환 레이어를 제공하는 KV-store라는 예외가 역시 존재한다. 물론 KV-store의 특징상 range query를 where절에 넣을 수 없으므로 완전한 SQL은 못 되고 SQL의 부분집합 정도를 제공한다.";
var result = kss.splitChunks(text, 128, overlap: false, useHeuristic: true, useQuotesBracketsProcessing: false);
print(result);
// 输出: [ChunkWithIndex(start = 0, text = "..."), ChunkWithIndex(start = 124, text = "..."), ...]

完整示例代码

import 'package:flutter/material.dart';
import 'package:kss_dart/kss_dart.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  var listTestText = [
    "그는 나를 보고 멈칫했다. \"안녕하세요.\" 나에게 인사를 건넸다.",
    "회사 동료 분들과 다녀왔는데 \"분위기도 좋고 음식도 맛있었어요\" 다만, 강남 토끼정이 강남 쉑쉑버거 골목길로 쭉 올라가야 하는데 다들 쉑쉑버거의 유혹에 넘어갈 뻔 했답니다 강남역 맛집 토끼정의 외부 모습.",
    "미리 예약을 할 수 있는 시스템으로 합리적인 가격에 여러 종류의 생선, 그리고 다양한 부위를 즐길 수 있기 때문이다. 계절에 따라 모둠회의 종류는 조금씩 달라지지만 자주 올려주는 참돔 마스까와는 특히 맛이 매우 좋다. 일반 모둠회도 좋지만 좀 더 특별한 맛을 즐기고 싶다면 특수 부위 모둠회를 추천한다 제철 생선 5~6가지 구성에 평소 접하지 못했던 부위까지 색다르게 즐길 수 있다.",
    "그가 말했다. '거기는 가지 마세요. 위험하니까요. 알겠죠?' 그러자 그가 말했다. 알겠어요.",
    "NoSQL이라고 하는 말은 No 'English'라고 하는 말과 마찬가지다. 세상에는 영어 말고도 수많은 언어가 존재한다. MongoDB에서 사용하는 쿼리 언어와 CouchDB에서 사용하는 쿼리 언어는 서로 전혀 다르다. 그럼에도 이 두 쿼리 언어는 같은 NoSQL 카테고리에 속한다. 어쨌거나 SQL이 아니기 때문이다. 또한 NoSQL이 No RDBMS를 의미하지는 않는다. BerkleyDB같은 예외가 있기 때문이다. 그리고 No RDBMS가 NoSQL인 것도 아니다. SQL호환 레이어를 제공하는 KV-store라는 예외가 역시 존재한다. 물론 KV-store의 특징상 range query를 where절에 넣을 수 없으므로 완전한 SQL은 못 되고 SQL의 부분집합 정도를 제공한다.",
  ];

  List<String> datas = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    var kss = Kss();
    listTestText.forEach((e) {
      datas.add(kss.splitSentences(e).join("\n"));
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("example kss_dart"),
      ),
      body: Center(
        child: ListView(
          padding: EdgeInsets.all(10),
          children: listTestText
              .asMap()
              .map((k, e) {
                return MapEntry(
                    k,
                    Card(
                        child: Column(
                      children: [
                        Text("原句 : "),
                        Text(e),
                        Divider(),
                        Text("kss 分割后的句子 : "),
                        Text(datas[k]),
                      ],
                    )));
              })
              .values
              .toList(),
        ),
      ),
    );
  }
}

更多关于Flutter插件kss_dart的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件kss_dart的介绍与使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


kss_dart 是一个不太常见的 Flutter 插件,因此关于它的具体功能和用途可能没有广泛的文档或社区支持。如果你在项目中遇到了这个插件,或者对其功能感兴趣,以下是一些可能的步骤来探索和了解它的潜在用途:


1. 检查插件的来源

  • 查看插件的发布者或开发者,了解其背景和可信度。
  • pub.dev 上搜索 kss_dart,查看是否有官方页面或文档。
  • 如果没有官方页面,可能需要通过 GitHub 或其他代码托管平台查找其源码。

2. 分析插件的功能

  • 查看插件的 README 文件或文档,了解其主要功能。
  • 如果文档不完整,可以通过查看插件的源码(通常是 lib 目录)来推断其功能。
  • 查找插件的示例代码或测试用例,了解其使用方法。

3. 猜测 kss_dart 的用途

根据插件的名称 kss_dart,可以推测它可能与以下内容相关:

  • KSS (Knyle Style Sheets): 如果与 KSS 相关,可能是用于生成样式文档或样式管理的工具。
  • Kotlin/Java 与 Dart 的交互: 如果插件涉及与原生代码的交互,可能是用于在 Flutter 中调用 Kotlin 或 Java 代码的工具。
  • 其他特定功能: 可能是某个特定领域的工具,例如加密、网络请求、UI 组件等。

4. 在项目中使用 kss_dart

如果你决定使用这个插件,可以按照以下步骤进行:

  • pubspec.yaml 中添加依赖:
    dependencies:
      kss_dart: ^版本号
    
  • 运行 flutter pub get 安装插件。
  • 在代码中导入插件并使用:
    import 'package:kss_dart/kss_dart.dart';
回到顶部