#hangul #hangeul #lib #library

tossicat

入力された単語に応じて同じトッシ(助詞)を適切に変換するライブラリ

15 リリース (5 異常)

0.6.0 2023年3月25日
0.5.1 2023年2月8日
0.4.7 2023年1月30日
0.3.2 2022年12月29日
0.1.0 2022年12月5日

#426 in テキスト処理

1ヶ月あたり48ダウンロード

LGPL-2.1

125KB
1.5K SLoC

logo

トッシキャット コア

このプロジェクトはtossiからインスパイアされています。Pythonで実装された前のtossiと同様に、任意の単語とその単語に付ける助詞(つまりトッシ)を入力すると、入力した助詞を入力した単語に自然な形で変換して返します。

変換する助詞が複数含まれる文も以下の形式で入力してください。

"{哲秀, 은} {영희, 과} {밥, 를} 먹습니다."

次のように変更します。

"哲秀는 영희와 밥을 먹습니다."

上記のように変換する助詞とそれを付ける単語をカンマ(',')で区切って、これら2つを中括号'{, }'で囲んで入力すると、上記のように適切な助詞に変換して、それを付ける単語に追加して中括号を取り除いて文に挿入して返します。

使い方

使い方は以下の通りです。現在のプロジェクト内のCargo.tomlファイルで[dependencies]の次にtossicat = "0.6.0"を以下のように追加してください。

[dependencies]

tossicat = "0.6.0"

今では、あなたのコードで以下のようにtossicatに含まれる関数を使用できます。

use tossicat::postfix;
use tossicat::modify_sentence;

fn main() {
    println!("결과: {}", postfix("사과", ""));
    println!("결과: {}", modify_sentence("{철수, 은} {영희,   과} {사과,  을} 먹습니다."));
}

実行結果は以下の通りです。ただし、「リンゴ」という単語には「を」を付けることができませんので、「を」を「は」に変えてください。

결과: Ok("사과를")
결과: Ok("철수는 영희와 밥을 먹습니다.")

詳細はhttps://crates.io/crates/tossicatを参照してください。

なぜこのライブラリが必要なのか?

なぜ各単語に助詞を変えて付ける必要があるのか?例を紹介します。
「リンゴ」という単語に目的助詞(を/は)を付ける場合、「を」ではなく「は」を付ける必要があります。なぜなら、目的助詞は直前に接続される文字に音節がない場合「を」、音節がある場合「は」を使用する必要があるからです。もちろん、「リンゴ」という単語に「のように」という助詞を付ける場合には、このような変化を考慮する必要はありません。なぜなら、「のように」という助詞はどんな単語にも無条件に付けることができるからです。このように、助詞によって変えて付ける必要がある場合と、変えて付ける必要がない場合があります。変えて付ける必要がある場合には、どのようなルールを使用するかを選択する必要があります。

もちろん、韓国語を使用する韓国人にとっては、学校の教育を通じてこのようなものを簡単に区別して比較的正確に処理することができます。しかし、外国人にとってはそれほど簡単ではありません。さらに重要なのは、アプリ内で文を組み合わせてユーザーに表現しようとする場合、特定の単語に助詞を付けることを自動化するために、このような自動化を行うライブラリが必要になるということがあります。まさにこのプロジェクトがそのような場合に必要なものです。

从前面的代码中,执行 postfix("苹果", "") 的结果可以看出,postfix() 函数成功地找到了适当的值,并将其附加到 "苹果" 这个词上返回。

本项目使用 Rust 编写。详细信息请参考以下内容。此外,本项目灵感来源于 LOPES-HUFS-tossi_for_rust。然而,由于没有考虑扩展性,在项目进展过程中达到了瓶颈。因此,为了分离和扩展各个功能,我们创建了名为 TossiCat 的组织(organization),并将代码分别放入各个存储库(repositories)中进行编码,然后从原始代码迁移并重新开始。

实现函数

本项目中有两个重要的函数。

  • postfix(word: &str, tossi: &str):根据输入的内容,将适当的 tossi 附加到 word 上并返回。
  • modify_sentence():将输入的句子中包含的多个 tossi 转换为输入的单词,并返回转换后的句子。

本项目可处理的 tossi(助词)

本项目将 tossi 分为两类。

  1. 需要考虑转换的 tossi
  2. 不需要转换的 tossi

在这里,“不需要转换的 tossi”是指无论附加到哪个词上都不会有问题。然而,“需要转换的 tossi”则需要根据这些 tossi 附加的词来将其转换为具有相同含义的其他 tossi。因此,本项目能够处理这两类 tossi,能够判断哪些 tossi 需要转换,哪些不需要转换,并在需要转换的情况下进行适当的转换。

可处理的 tossi 列表

目前,本项目中的 tossi 如下。将持续添加。

  1. 需要考虑转换的 tossi,共 51 个
  2. 不需要转换的 tossi,共 33 个

两者相加,共可处理 84 个 tossi。由于无法正确发音外文单词,因此可能需要将 tossi 合并进行转换,例如 "(을)를",因此内部可处理的 tossi 数量要多得多。这两类 tossi 的完整列表请参考 available_tossi_list.md,有关详细内容的说明请参考 RELEASES.md

构建本项目

要构建本项目,只需执行以下命令。

cargo build --release

构建完成后,将在 tossicat-core/target/release 中创建名为 tossicat 的可执行文件。目前,本项目不需要创建可执行文件,但由于存在 main.rs 以进行测试,因此可以创建可执行文件。

代码编写注意事项

为了匹配编码风格,在提交代码之前,请使用以下命令整理代码。

cargo fmt

然后,使用 cargo clippy 命令检查您编写的代码中的问题,并进行修改。

cargo clippy

最后,在测试没有问题后,请提交代码。

cargo test

No runtime deps