๐Ÿฅ NetKiwi

July 1, 2026 ยท View on GitHub

๐Ÿฅ Install

dotnet add package NetKiwi

๐Ÿฅ Licence

  • Kiwi: LGPL 3.0

๐Ÿฅ Basic Usage

using NetKiwi.Backend;
public void ExampleAnalyze()
{
    Kiwi kiwi = new KiwiBuilder().Build(); // Kiwi ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

    Result[] result = kiwi.Analyze("๋ชจ๋“  ๊ตญ๋ฏผ์€ ์ธ๊ฐ„์œผ๋กœ์„œ์˜ ์กด์—„๊ณผ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ–‰๋ณต์„ ์ถ”๊ตฌํ•  ๊ถŒ๋ฆฌ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ตญ๊ฐ€๋Š” ๊ฐœ์ธ์ด ๊ฐ€์ง€๋Š” ๋ถˆ๊ฐ€์นจ์˜ ๊ธฐ๋ณธ์  ์ธ๊ถŒ์„ ํ™•์ธํ•˜๊ณ  ์ด๋ฅผ ๋ณด์žฅํ•  ์˜๋ฌด๋ฅผ ์ง„๋‹ค."); // ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์˜ต๋‹ˆ๋‹ค
    foreach (Result res in result) // foreach๋กœ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค
    {
        foreach (Token t in res.morphs)
        {
            Console.WriteLine($"๋ถ„์„๋œ ํ˜•ํƒœ์†Œ: {t.form}");
            Console.WriteLine($"๋ถ„์„๋œ ํ˜•ํƒœ์†Œ์˜ ํƒœ๊ทธ: {t.tag}");
        }
    }
}
using NetKiwi.Backend;
public void ExampleAnalyzeWithUsing()
{

    using (Kiwi kiwi = new KiwiBuilder().Build()) // ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด using ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.
    {
        Result[] result = kiwi.Analyze("๋ชจ๋“  ๊ตญ๋ฏผ์€ ์ธ๊ฐ„์œผ๋กœ์„œ์˜ ์กด์—„๊ณผ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ–‰๋ณต์„ ์ถ”๊ตฌํ•  ๊ถŒ๋ฆฌ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ตญ๊ฐ€๋Š” ๊ฐœ์ธ์ด ๊ฐ€์ง€๋Š” ๋ถˆ๊ฐ€์นจ์˜ ๊ธฐ๋ณธ์  ์ธ๊ถŒ์„ ํ™•์ธํ•˜๊ณ  ์ด๋ฅผ ๋ณด์žฅํ•  ์˜๋ฌด๋ฅผ ์ง„๋‹ค."); // ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์˜ต๋‹ˆ๋‹ค
        foreach (Result res in result) // foreach๋กœ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค
        {
            foreach (Token t in res.morphs)
            {
                Console.WriteLine($"๋ถ„์„๋œ ํ˜•ํƒœ์†Œ: {t.form}");
                Console.WriteLine($"๋ถ„์„๋œ ํ˜•ํƒœ์†Œ์˜ ํƒœ๊ทธ: {t.tag}");
            }
        }
    } // using ๋ธ”๋ก์ด ๋๋‚˜๋ฉด Kiwi ๊ฐ์ฒด๊ฐ€ ์ž๋™์œผ๋กœ Dispose ๋ฉ๋‹ˆ๋‹ค
}
using NetKiwi.Backend;

public void ExampleAnalyzeMulti() // ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ๋™์‹œ์— ๋ถ„์„ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
{
    using (Kiwi kiwi = new KiwiBuilder().Build())
    {
        string[] arr = new string[100];
        for (int i = 0; i < 100; ++i)
        {
            arr[i] = String.Format("ํ…Œ์ŠคํŠธ {0}์ž…๋‹ˆ๋‹ค.", i);
        }

        kiwi.AnalyzeMulti((i) =>
        {
            if (i >= arr.Length) return null;
            return arr[i];
        }, (i, res) =>
        {
            Console.WriteLine($"{res.Length}"); // res์˜ ๊ธธ์ด๋Š” TopN๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ด ์˜ˆ์ œ์—์„œ๋Š” TopN = 1).
                                                // AnalyzeMulti๋Š” ๊ฐ ๋ฌธ์žฅ์— ๋Œ€ํ•ด topN๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธ์žฅ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด topN์„ ๋Š˜๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
            Console.WriteLine($"๋ฌธ์žฅ {i}์˜ ๋ถ„์„ ๊ฒฐ๊ณผ:");
            Console.WriteLine($"๋ถ„์„๋œ ํ˜•ํƒœ์†Œ ์ˆ˜: {res[0].morphs.Length}");
            Console.WriteLine($"๋ถ„์„๋œ ํ˜•ํƒœ์†Œ: {string.Join(", ", res[0].morphs.Select(m => m.form))}");
            return 0;
        });
    }
}

๐Ÿฅ Reference